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
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];
Result :=
False
;
XLApp := CreateOleObject(
'Excel.Application'
);
try
XLApp
.
Visible :=
False
;
XLApp
.
Workbooks
.
Add(xlWBatWorkSheet);
Sheet := XLApp
.
Workbooks[
1
].WorkSheets[
1
];
Sheet
.
Name := ASheetName;
Sheet
.
Range[RefToCell(
1
,
1
), RefToCell(AGrid
.
RowCount,
AGrid
.
ColCount)].Value := Data;
try
XLApp
.
Workbooks[
1
].SaveAs(AFileName);
Result :=
True
;
except
end
;
finally
if
not
VarIsEmpty(XLApp)
then
begin
XLApp
.
DisplayAlerts :=
False
;
XLApp
.
Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
end
;
end
;
end
;
procedure
TForm1
.
Button1Click(Sender: TObject);
begin
if
SaveAsExcelFile(stringGrid1,
'My Stringgrid Data'
,
'c:\MyExcelFile.xls'
)
then
ShowMessage(
'StringGrid saved!'
);
end
;