Сохранение и загрузка, импорт и экспорт
Code: |
procedure SGridToHtml(SG: TStringgrid; Dest: TMemo; BorderSize: Integer); var i, p: integer; SStyle1, SStyle2, Text: string; begin Dest.Clear; Dest.Lines.Add('<html>'); Dest.Lines.Add('<body>'); Dest.Lines.Add(' <table border="' + IntToStr(BorderSize) + '" width="' + IntToStr(SG.Width) + '" height="' + IntToStr(SG.Width) + '">');
for i := 0 to SG.RowCount - 1 do begin Dest.Lines.Add(' <tr>'); for p := 0 to SG.ColCount - 1 do begin SStyle1 := ''; SStyle2 := ''; if fsbold in SG.Font.Style then begin SStyle1 := SStyle1 + '<b>'; SStyle2 := SStyle2 + '</b>'; end; if fsitalic in SG.Font.Style then begin SStyle1 := SStyle1 + '<i>'; SStyle2 := SStyle2 + '</i>'; end; if fsunderline in SG.Font.Style then begin SStyle1 := SStyle1 + '<u>'; SStyle2 := SStyle2 + '</u>'; end; Text := sg.Cells[p, i]; if Text = '' then Text := ' '; Dest.Lines.Add(' <td width="' + IntToStr(sg.ColWidths[p]) + '" height="' + IntToStr(sg.RowHeights[p]) + '"><font color="#' + IntToHex(sg.Font.Color, 6) + '" face="' + SG.Font.Name + '">' + SStyle1 + Text + SStyle2 + '</font></td>'); end; Dest.Lines.Add(' </tr>'); end; Dest.Lines.Add(' </table>'); Dest.Lines.Add('</body>');; Dest.Lines.Add('</html>'); end;
// Example, Beispiel procedure TFormCSVInport.Button6Click(Sender: TObject); begin SGridToHtml(StringGrid1, Memo1, 1); Memo1.Lines.SaveToFile('c:\test.html'); end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт
Какое наилучшее решение для сохранения экземпляра TStringGrid (150x10)?
Если вы хотите сохранить это на диске:
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт
Code: |
procedure SaveGrid; var f: textfile; x, y: integer; begin assignfile(f, 'Filename'); rewrite(f); writeln(f, stringgrid.colcount); writeln(f, stringgrid.rowcount); for X := 0 to stringgrid.colcount - 1 do for y := 0 to stringgrid.rowcount - 1 do writeln(F, stringgrid.cells[x, y]); closefile(f); end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт
Code: |
function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean; const xlCellTypeLastCell = $0000000B; var XLApp, Sheet: OLEVariant; RangeMatrix: Variant; x, y, k, r: Integer; begin Screen.Cursor:=crAppStart; Result := False; XLApp := CreateOleObject('Excel.Application'); try XLApp.Visible := False; XLApp.Workbooks.Open(AXLSFile); Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1]; Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; x := XLApp.ActiveCell.Row; y := XLApp.ActiveCell.Column; AGrid.RowCount := x; AGrid.ColCount := y; RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value; k := 1; repeat for r := 1 to y do AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R]; Inc(k, 1); AGrid.RowCount := k + 1; until k > x; RangeMatrix := Unassigned; finally if not VarIsEmpty(XLApp) then begin XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; Result := True; end; end; Screen.Cursor:=crDefault; end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт
Экспорт StringGrid в исполняемый файл *.EXE
Как-то раз мне понадобилось из моей программы извлекать все содержимое StringGrid'a в exe-файл. В данном случае можно конечно писать свой собственный компилятор, но, согласитесь, это лишнее. Гораздо проще заранее написать exe-файл и поместить его в ресурсы нашей программы. А потом извлекать его оттуда, и записывать в его ресурсы содержимое StringGrid'a. Заманчиво звучит, правда? Тогда перейдем к реализации.
1. Создание exe-файла, в который поместим в конце содержимое StringGrid'a.
Так как данная статья посвящена языку Делфи, то и писать этот exe-файл я рекомендую на Делфи. Запускаем Делфи, создаем новый проект, и на форму кидаем StringGrid. Это обязательный набор, но вы можете добавить все что угодно, все, что вы хотели бы видеть, после того как сделаете экспорт из StringGrid'a в исполняемый файл.
Ниже представлен код процедуры загрузки содержимого из ресурсов в StringGrid:
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт
Code: |
{ This copies the contents of a TstringGrid/TDrawGrid (only Text!!) into a string. Tabs are inserted between the columns, CR+LF between rows. }
use Grids;
{...}
{ we need this Cracker Class because the Col/RowCount property is not public in TCustomGrid } type TGridHack = class(TCustomGrid);
function GetstringGridText(_Grid: TCustomGrid): string; var Grid: TGridHack; Row, Col: Integer; s: string; begin // Cast the paramter to a TGridHack, so we can access protected properties Grid := TGridHack(_Grid); Result := ''; // for all rows, then for all columns for Row := 0 to Grid.RowCount - 1 do begin for Col := 0 to Grid.ColCount - 1 do begin // the first column does not need the tab if Col > 0 then Result := Result + #9; Result := Result + Grid.GetEditText(Col, Row); end; Result := Result + #13#10; end; end; |
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт
Code: |
{ With OLE Automation }
uses ComObj;
function RefToCell(ARow, ACol: Integer): string; begin Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow); end;
function SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean; const xlWBATWorksheet = -4167; var Row, Col: Integer; GridPrevFile: string; XLApp, Sheet, Data: OLEVariant; i, j: Integer; begin // Prepare Data Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant); for i := 0 to AGrid.ColCount - 1 do for j := 0 to AGrid.RowCount - 1 do Data[j + 1, i + 1] := AGrid.Cells[i, j]; // Create Excel-OLE Object Result := False; XLApp := CreateOleObject('Excel.Application'); try // Hide Excel XLApp.Visible := False; // Add new Workbook XLApp.Workbooks.Add(xlWBatWorkSheet); Sheet := XLApp.Workbooks[1].WorkSheets[1]; Sheet.Name := ASheetName; // Fill up the sheet Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount, AGrid.ColCount)].Value := Data; // Save Excel Worksheet try XLApp.Workbooks[1].SaveAs(AFileName); Result := True; except // Error ? end; finally // Quit Excel if not VarIsEmpty(XLApp) then begin XLApp.DisplayAlerts := False; XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; end; end; end;
// Example:
procedure TForm1.Button1Click(Sender: TObject); begin if SaveAsExcelFile(stringGrid1, 'My Stringgrid Data', 'c:\MyExcelFile.xls') then ShowMessage('StringGrid saved!'); end;
|
- Подробности
- Родительская категория: StringGrid
- Категория: Сохранение и загрузка, импорт и экспорт