Delphi操作Excel(2) ---Stringgrid导出到Excel

最近编了一个小软件,需要将Stringgrid中的内容导出到Excel中。

由于使用的是Delphi2010 + Office2010,中间有点小曲折,现把代码贴出来,供参考。

代码
procedure TFormMain.btn3Click(Sender: TObject);
var
ExcelApp,workbook,sheet:Variant;
begin
dlgSavedlg1.Filter :
= 'Excel2007格式文件|*.xlsx|Excel2003格式文件|*.xls';
ExcelApp:
=UnAssigned();
ExcelApp :
= CreateOleObject('Excel.application'); (* 创建一个Excel的OLE对象,使用OLE去创建Excel文件时,需要uses ComObj *)
workbook :
= ExcelApp.WorkBooks.Add; (* 创建一个WorkBook *)
Sheet :
= ExcelApp.Sheets[1]; (* 创建一个Sheet变量 *)
for i := 0 to 21 do
begin
Sheet.cells[i
+1,1].value := strngrd1.Cells[1,i]; (* 将Delphi的Stringgrid中的内容保存到Excel的Sheet中去 *)
Sheet.cells[i
+1,2].value := strngrd1.Cells[2,i];
Sheet.cells[i
+1,3].value := strngrd1.Cells[3,i];
end;

(*ExcelApp.Visible := True;*) (* 将这句话取消注释,就会弹出Excel *)


(*ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035;*) (* 这就话可以设置行高 *)
ExcelApp.ActiveSheet.Columns[
1].Columnwidth := 20; (* 设置列宽,网上的很多资料都把Columnwidth 写成了 ColumnsWidth,多写了一个s,误导了很多人 *)
ExcelApp.ActiveSheet.Columns[
2].Columnwidth := 20;
ExcelApp.ActiveSheet.Columns[
3].Columnwidth := 20;

if dlgSavedlg1.Execute then (* 如果点击了保存对话框的"保存"按键的话,将当前活动的Workbook保存到SaveDialog指定的位置 *)
begin
ExcelApp.ActiveWorkbook.saveas(dlgSavedlg1.FileName);
end
else (* 如果点击了保存对话框的"取消"按键的话,放弃存盘,这句话一定要加上,否则,在点击"取消"按键时,会出现问题 *)
ExcelApp.ActiveWorkBook.Saved :
= True;

workbook.Close;
(* 最后,将WorkSheet关闭 *)
ExcelApp.quit;
(* 退出ExcelApp *)
ExcelApp :
= unassigned; (* 使用unassigned时,要uses Variants *)
end;

(* 由于使用创建OLE对象的方法去创建Excel时,是使用的您电脑上安装的Excel,因此,生成的文件的格式和您电脑上安装的Excel的版本有关系。
比如:我的电脑上安装的是office2010,如果将Excel文件保存为xls格式,在打开时就会出错。(血的教训啊...害的俺浪费了好几个小时...)
*)

posted @ 2010-07-30 21:03  Delcpp  阅读(5745)  评论(2编辑  收藏  举报