Другие языки программирования и технологии

Сохранение из StringGrid в файл и загрузка из файла - Delphi

Есть таблица с 5 столбцами и 0 строками. Данные заполняются в режиме редактирования таблицы. Возникает вопрос, как правильно их сохранить у файл и потом открыть из него. Если можно пример. Так, что бы в каждую колонку погрузились свои данные. Нужен только один файл для сохранения данных.

//Delphi code
//Если бы одна колонка (столбец) то можно так
StringGrid1.Cols[0].SaveToFile('c:\test.txt');
StringGrid1.Cols[0].LoadFromFile('c:\test.txt');
// а когда пять колонок?
вот так можно:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ChDir(ExtractFilePath(Application.ExeName));
Form1.OpenDialog1.DefaultExt:='*.dat';
Form1.OpenDialog1.Filter:='*.dat';
Form1.SaveDialog1.DefaultExt:='*.dat';
Form1.SaveDialog1.Filter:='*.dat';
end;
//заполняем поля StringGrid'a от 0 до 99
procedure TForm1.Button1Click(Sender: TObject);
var i,j,n:word;
begin
n:=0;
for i:=0 to 19 do
for j:=0 to 4 do
begin
Form1.StringGrid1.Cells[j,i]:=IntToStr(n);
inc(n);
end;
end;
//открываем файл для чтения
procedure TForm1.Button2Click(Sender: TObject);
var f: TStrings; i,j,n:word;
begin
f:=TStringList.Create;
try
n:=0;
if Form1.OpenDialog1.Execute then
begin
f.LoadFromFile(Form1.OpenDialog1.FileName);
for i:=0 to 4 do
for j:=0 to 19 do
begin
Form1.StringGrid1.Cells[i,j]:=f.Strings[n];
inc(n);
end;
end;
finally
f.Free;
end;
end;
//записываем в файл значения полей StringGrid'a
procedure TForm1.Button3Click(Sender: TObject);
var f:TStrings; i,j:word;
begin
f:=TStringList.Create;
try
for i:=0 to 4 do
for j:=0 to 19 do
f.Add(Form1.StringGrid1.Cells[i,j]);
if Form1.SaveDialog1.Execute then
f.SaveToFile(Form1.SaveDialog1.FileName);
finally
f.Free;
end;
end;
//обнуляем все поля StringGrid'a
procedure TForm1.Button4Click(Sender: TObject);
var i,j:word;
begin
for i:=0 to 4 do
for j:=0 to 19 do
Form1.StringGrid1.Cells[i,j]:='0';
end;
end.
результат работы программы
Анатолий Болтовский
Анатолий Болтовский
642
Лучший ответ
Есть пример на Lazarus со StringGrid, как сохранить данные в XML, включая раскраску ячеек..
http://visual-t.ru/files/StringGridTest.zip
Диман Дидык На с ++ builder пример бы
Есть вариант Excel.
Ну вот код (часть моей проги)
Function CExcel: Boolean;
Begin
try
MyExcel:=GetActiveOleObject('Excel.Application');
Result:=true;
except
Result:=false;
end;
End;

Function RExcel : Boolean;
Begin
try
Begin
MyExcel:=CreateOleObject('Excel.Application');
Result:=true;
End;
except
Result:=false;
end;
End;

Function WExcel : Boolean;
Begin
if CExcel then
Begin
MyExcel.WorkBooks.Add;
Result:=true;
End
else
Begin
RExcel;
MyExcel.WorkBooks.Add;
Result:=true;
End;
End;

Function SExcel(FileName : Tfilename; WBIndex : Integer):Boolean;
Begin
try
MyExcel.ActiveWorkBook.ActiveSheet.Columns[3].font.color:=clred;
MyExcel.Workbooks.Item[WBIndex].SaveAs(FileName);
if MyExcel.WorkBooks.Item[WBIndex].Saved then
Result:=true
else
Result:=false;
except
Result:=false;
end;
End;

function StopExcel:boolean;
begin
try
if MyExcel.Visible then MyExcel.Visible:=false;
MyExcel.Quit;
MyExcel:=Unassigned;
Result:=True;
except
Result:=false;
end;
end;

Procedure WT(StringGrid1 : TStringGrid);
var
Col, Row : Integer;
Begin
try
for Col := 0 to StringGrid1.ColCount-1 do
for Row := 0 to StringGrid1.RowCount-1 do
MyExcel.ActiveWorkBook.ActiveSheet.Cells[1+Row+1,1+Col+1]:=StringGrid1.Cells[Col,Row];

Except
raise Exception.Create('Error Message');
end;
End;
procedure TForm1.Button4Click(Sender: TObject);
begin
RExcel;
WExcel;
WT(StringGrid1);
SExcel('1.xlsx',1);
StopExcel;

end;
ДК
Дрон Кук
203