Есть таблица с 5 столбцами и 0 строками. Данные заполняются в режиме редактирования таблицы. Возникает вопрос, как правильно их сохранить у файл и потом открыть из него. Если можно пример. Так, что бы в каждую колонку погрузились свои данные. Нужен только один файл для сохранения данных.
//Delphi code
//Если бы одна колонка (столбец) то можно так
StringGrid1.Cols[0].SaveToFile('c:\test.txt');
StringGrid1.Cols[0].LoadFromFile('c:\test.txt');
// а когда пять колонок?
Другие языки программирования и технологии
Сохранение из StringGrid в файл и загрузка из файла - Delphi
вот так можно:
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.
результат работы программы

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.
результат работы программы

Есть пример на Lazarus со StringGrid, как сохранить данные в XML, включая раскраску ячеек..
http://visual-t.ru/files/StringGridTest.zip
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;
Ну вот код (часть моей проги)
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;
Похожие вопросы
- Как на PHP получать пути к файлам из массива names в теге input при загрузке некольких файлов?
- Delphi, работа с файлами
- Вопрос по StringGrid Delphi
- Delphi 2010 + LAN + передача файлов = ???
- Delphi. Создать автоматически 100 текстовых файлов в папке. с именем от 0 до 99
- C++ Файлы. помогите чем можете . за хороший ответ подарю денюжку
- Помогите написать bat файлы, срочно надо, сам изучить уже не успеваю
- помогите написать bat-файл.
- фотошоп: как пользоваться правильно пакетной обработкой файлов?
- Как определить что файл имеет зеркальное расширение? Особенно полезно будет для школьников и пожилых людей