Sunday, August 21, 2011

StringGrid to CSV

This is a demo delphi 2010 project to show export and import of CSV files.



Project Code: StringGrid2CSV

unit mainform;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, ExtCtrls, StdCtrls, ToolWin, Grids;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Panel2: TPanel;
   Splitter1: TSplitter;
   StringGrid1: TStringGrid;
   Memo1: TMemo;
   ToolBar1: TToolBar;
   ToolButton1: TToolButton;
   btnImport: TToolButton;
   ToolButton2: TToolButton;
   ToolButton3: TToolButton;
   btnFillDefault: TToolButton;
  procedure FormCreate(Sender: TObject);
  procedure ToolButton3Click(Sender: TObject);
  procedure btnFillDefaultClick(Sender: TObject);
  procedure ToolButton1Click(Sender: TObject);
  procedure btnImportClick(Sender: TObject);
private
  { Private declarations }
  procedure ClearStringGrid(AStringGrid: TStringGrid; IncludeHeader: Boolean);
public
  { Public declarations }
end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 btnFillDefault.Click;
end;

procedure TForm1.ClearStringGrid(AStringGrid: TStringGrid;
 IncludeHeader: Boolean);
var
 i: Integer;
begin
for i := 0 to AStringGrid.RowCount - 1 do
  if (IncludeHeader or (i <> 0)) then
     AStringGrid.Rows[i].Clear
end;

Function ExportSG2CSV(Grid: TStringGrid; Memo: TMemo;
 FileName: String): Boolean;
Var
 CSV: TStrings;
 i: Integer;
begin
 CSV := TStringList.Create;
Try
  For i := 0 To Grid.RowCount - 1 Do
     CSV.Add(Grid.Rows[i].CommaText);

   Memo.Lines := CSV;
   CSV.SaveToFile(FileName);
   Result := True;
Finally
   CSV.Free;
End;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 ExportSG2CSV(StringGrid1, Memo1, 'File1.csv');
end;

Procedure LoadCSVtoGrid(Grid: TStringGrid; FileName: String; Memo: TMemo);
var
 FileStringsList: TStringList;
 RowStringsList: TStringList;
 i: Integer;
begin
 FileStringsList := TStringList.Create;
 RowStringsList := TStringList.Create;
try
    FileStringsList.LoadFromFile(FileName);
  //FileStringsList.Assign(Memo.Lines);
   Grid.RowCount := FileStringsList.Count;
  for i := 0 to FileStringsList.Count - 1 do
  begin
     RowStringsList.Clear;
     RowStringsList.CommaText := FileStringsList[i];
     Grid.Rows[i].Assign(RowStringsList);
  end;
finally
   FileStringsList.Free;
   RowStringsList.Free;
end;
end;

procedure TForm1.btnImportClick(Sender: TObject);
begin
 LoadCSVtoGrid(StringGrid1, 'File1.csv', Memo1);
end;

procedure TForm1.ToolButton3Click(Sender: TObject);
begin
 ClearStringGrid(StringGrid1, True);
end;

procedure TForm1.btnFillDefaultClick(Sender: TObject);
var
 i, J, K: Integer;
begin
 K := 0;
with StringGrid1 do
  for i := 0 to ColCount - 1 do
    for J := 0 to RowCount - 1 do
    begin
       K := K + 1;
       Cells[i, J] := Format('%*.*d', [2, 2, K]) + ' Col ' + IntToStr(i)
         + ' Row ' + IntToStr(J);
    end;
end;

end.

1 comment:

Unknown said...

Thanks for your code. very simple to understand and works perfectly.