1. 
2. [size=3](一) 使用动态创建的方法
3. 首先创建 Excel 对象,使用ComObj:
4. var ExcelApp: Variant;
5. ExcelApp := CreateOleObject( 'Excel.Application' );
6. 1) 显示当前窗口:
7. ExcelApp.Visible := True;
8. 2) 更改 Excel 标题栏:
9. ExcelApp.Caption := '应用程序调用 Microsoft Excel';
10. 3) 添加新工作簿:
11. ExcelApp.WorkBooks.Add;
12. 4) 打开已存在的工作簿:
13. ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );
14. 5) 设置第2个工作表为活动工作表:
15. ExcelApp.WorkSheets[2].Activate;   或 ExcelApp.WorksSheets[ 'Sheet2' ].Activate;
16. 6) 给单元格赋值:
17. ExcelApp.Cells[1,4].Value := '第一行第四列';
18. 7) 设置指定列的宽度(单位:字符个数),以第一列为例:
19. ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;
20. 8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
21. ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
22. 9) 在第8行之前插入分页符:
23. ExcelApp.WorkSheets[1].Rows.PageBreak := 1;
24. 10) 在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;
25. 11) 指定边框线宽度:
26. ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
27. 1-左     2-右    3-顶     4-底    5-斜( \ )      6-斜( / )
28. 12) 清除第一行第四列单元格公式:
29. ExcelApp.ActiveSheet.Cells[1,4].ClearContents;
30. 13) 设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
31. ExcelApp.ActiveSheet.Rows[1].Font.Color   := clBlue;
32. ExcelApp.ActiveSheet.Rows[1].Font.Bold    := True;
33. ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;
34. 14) 进行页面设置:
35. a.页眉:
36.     ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
37. b.页脚:
38.     ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页';
39. c.页眉到顶端边距2cm:
40.     ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
41. d.页脚到底端边距3cm:
42.     ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
43. e.顶边距2cm:
44.     ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
45. f.底边距2cm:
46.     ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
47. g.左边距2cm:
48.     ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
49. h.右边距2cm:
50.     ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
51. i.页面水平居中:
52.     ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
53. j.页面垂直居中:
54.     ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
55. k.打印单元格网线:
56.     ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;
57. 15) 拷贝操作:
58. a.拷贝整个工作表:    ExcelApp.ActiveSheet.Used.Range.Copy;
59. b.拷贝指定区域:    ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
60. c.从A1位置开始粘贴:    ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
61. d.从文件尾部开始粘贴:    ExcelApp.ActiveSheet.Range.PasteSpecial;
62. 16) 插入一行或一列:
63. a. ExcelApp.ActiveSheet.Rows[2].Insert;
64. b. ExcelApp.ActiveSheet.Columns[1].Insert;
65. 17) 删除一行或一列:
66. a. ExcelApp.ActiveSheet.Rows[2].Delete;
67. b. ExcelApp.ActiveSheet.Columns[1].Delete;
68. 18) 打印预览工作表:
69. ExcelApp.ActiveSheet.PrintPreview;
70. 19) 打印输出工作表:
71. ExcelApp.ActiveSheet.PrintOut;
72. 20) 工作表保存:
73. if not ExcelApp.ActiveWorkBook.Saved then
74.    ExcelApp.ActiveSheet.PrintPreview;
75. 21) 工作表另存为:
76. ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );
77. 22) 放弃存盘:
78. ExcelApp.ActiveWorkBook.Saved := True;
79. 23) 关闭工作簿:
80. ExcelApp.WorkBooks.Close;
81. 24) 退出 Excel:
82. ExcelApp.Quit;
83. (二) 使用Delphi 控件方法
84. 在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。
85. 1)   打开Excel
86. ExcelApplication1.Connect;
87. 2) 显示当前窗口:
88. ExcelApplication1.Visible[0]:=True;
89. 3) 更改 Excel 标题栏:
90. ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';
91. 4) 添加新工作簿:
92. ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
93. 5) 添加新工作表:
94. var Temp_Worksheet: _WorkSheet;
95. begin
96. Temp_Worksheet:=ExcelWorkbook1.
97. WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
98. ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);End;
99. 6) 打开已存在的工作簿:
100. ExcelApplication1.Workbooks.Open (c:\a.xls
101. EmptyParam,EmptyParam,EmptyParam,EmptyParam,
102. EmptyParam,EmptyParam,EmptyParam,EmptyParam,
103.     EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)
104. 7) 设置第2个工作表为活动工作表:
105. ExcelApplication1.WorkSheets[2].Activate;   或
106. ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;
107. 8) 给单元格赋值:
108. ExcelApplication1.Cells[1,4].Value := '第一行第四列';
109. 9) 设置指定列的宽度(单位:字符个数),以第一列为例:
110. ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;
111. 10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
112. ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
113. 11) 在第8行之前插入分页符:
114. ExcelApplication1.WorkSheets[1].Rows.PageBreak := 1;
115. 12) 在第8列之前删除分页符:
116. ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;
117. 13) 指定边框线宽度:
118. ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
119. 1-左     2-右    3-顶     4-底    5-斜( \ )      6-斜( / )
120. 14) 清除第一行第四列单元格公式:
121. ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;
122. 15) 设置第一行字体属性:
123. ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';
124. ExcelApplication1.ActiveSheet.Rows[1].Font.Color   := clBlue;
125. ExcelApplication1.ActiveSheet.Rows[1].Font.Bold    := True;
126. ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;
127. 16) 进行页面设置:
128. a.页眉:
129.     ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';
130. b.页脚:
131.     ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';
132. c.页眉到顶端边距2cm:
133.     ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
134. d.页脚到底端边距3cm:
135.     ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
136. e.顶边距2cm:
137.     ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
138. f.底边距2cm:
139.     ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
140. g.左边距2cm:
141.     ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
142. h.右边距2cm:
143.     ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
144. i.页面水平居中:
145.     ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
146. j.页面垂直居中:
147.     ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
148. k.打印单元格网线:
149.     ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;
150. 17) 拷贝操作:
151. a.拷贝整个工作表:
152.     ExcelApplication1.ActiveSheet.Used.Range.Copy;
153. b.拷贝指定区域:
154.     ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;
155. c.从A1位置开始粘贴:
156.     ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
157. d.从文件尾部开始粘贴:
158.     ExcelApplication1.ActiveSheet.Range.PasteSpecial;
159. 18) 插入一行或一列:
160. a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
161. b. ExcelApplication1.ActiveSheet.Columns[1].Insert;
162. 19) 删除一行或一列:
163. a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
164. b. ExcelApplication1.ActiveSheet.Columns[1].Delete;
165. 20) 打印预览工作表:
166. ExcelApplication1.ActiveSheet.PrintPreview;
167. 21) 打印输出工作表:
168. ExcelApplication1.ActiveSheet.PrintOut;
169. 22) 工作表保存:
170. if not ExcelApplication1.ActiveWorkBook.Saved then
171.    ExcelApplication1.ActiveSheet.PrintPreview;
172. 23) 工作表另存为:
173. ExcelApplication1.SaveAs( 'C:\Excel\Demo1.xls' );
174. 24) 放弃存盘:
175. ExcelApplication1.ActiveWorkBook.Saved := True;
176. 25) 关闭工作簿:
177. ExcelApplication1.WorkBooks.Close;
178. 26) 退出 Excel:
179. ExcelApplication1.Quit;
180. ExcelApplication1.Disconnect;
181. 本人 收藏[/size]
182. 
183. [size=3]对不起我还需要一个锁定功能啊,就是输出到EXCEL后只能看,不能进行手工修改[/size]
184. 
185. [size=3]Xl.Cells.Select;//Select All Cells
186. Xl.Selection.Locked = True;// Lock Selected Cells[/size]
187. [size=3]//Xl:=CreateOleObject('Excel.Application');[/size]
188. 
189. [size=3][hr][/size]
190. [size=3]procedure TForm1.BitBtn4Click(Sender: TObject);
191. var
192.    ExcelApp, Sheet: Variant;
193. begin
194.    if OpenDialog1.Execute then
195.    begin
196.      ExcelApp := CreateOleObject( 'Excel.Application' );
197.      ExcelApp.Workbooks.Open(OpenDialog1.FileName);
198.      Sheet     := ExcelApp.ActiveSheet;
199.      Caption   := 'Row Count: ' + IntToStr(Sheet.UsedRange.Rows.Count);
200.      ExcelApp.Quit;
201.      Sheet     := Unassigned;
202.      ExcelApp := Unassigned;
203.    end;
204. end;
205. [/size]
206. [size=3][hr][/size]
207. [size=3]procedure CopyDbDataToExcel(Target: TDbgrid);
208. var
209.    iCount, jCount: Integer;
210.    XLApp: Variant;
211.    Sheet: Variant;
212. begin
213.    Screen.Cursor := crHourGlass;
214.    if not VarIsEmpty(XLApp) then
215.    begin
216.      XLApp.DisplayAlerts := False;
217.      XLApp.Quit;
218.      VarClear(XLApp);
219.    end;
220.    //通过ole创建Excel对象
221.    try
222.      XLApp := CreateOleObject('Excel.Application');
223.    except
224.      Screen.Cursor := crDefault;
225.      Exit;
226.    end;
227.    XLApp.WorkBooks.Add[XLWBatWorksheet];
228.    XLApp.WorkBooks[1].WorkSheets[1].Name := '测试工作薄';
229.    Sheet := XLApp.Workbooks[1].WorkSheets['测试工作薄'];
230.    if not Target.DataSource.DataSet.Active then
231.    begin
232.       Screen.Cursor := crDefault;
233.       Exit;
234.    end;
235.    Target.DataSource.DataSet.first;[/size]
236. [size=3]   for iCount := 0 to Target.Columns.Count - 1 do
237.    begin
238.       Sheet.cells[1, iCount + 1] := Target.Columns.Items[iCount].Title.Caption;
239.    end;
240.    jCount := 1;
241.    while not Target.DataSource.DataSet.Eof do
242.    begin
243.       for iCount := 0 to Target.Columns.Count - 1 do
244.       begin
245.         Sheet.cells[jCount + 1, iCount + 1] := Target.Columns.Items[iCount].Field.AsString;
246.       end;
247.       Inc(jCount);
248.       Target.DataSource.DataSet.Next;
249.    end;
250.    XlApp.Visible := True;
251.    Screen.Cursor := crDefault;
252. end;[/size]
253. 
254. 
255. [size=3]看看我的函数
256. function ExportToExcel(Header: String;
257.    vDataSet: TDataSet): Boolean;
258. var
259.    I,VL_I,j: integer;
260.    S,SysPath: string;
261.    MsExcel:Variant;
262. begin
263.    Result:=true;
264.    if Application.MessageBox('您确信将数据导入到Excel吗?','提示!',MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
265.    begin
266.        SysPath:=ExtractFilePath(application.exename);
267.        with TStringList.Create do
268.        try
269.          vDataSet.First ;
270.          S:=S+Header;
271.      //     system.Delete(s,1,1);
272.          add(s);
273.          s:=';
274.          For I:=0 to vDataSet.fieldcount-1 do
275.            begin
276.              If vDataSet.fields[I].visible=true then
277.                 S:=S+#9+vDataSet.fields[I].displaylabel;
278.            end;
279.          system.Delete(s,1,1);
280.          add(s);
281.          while not vDataSet.Eof do
282.          begin
283.            S := ';
284.            for I := 0 to vDataSet.FieldCount -1 do
285.              begin
286.                If vDataSet.fields[I].visible=true then
287.                   S := S + #9 + vDataSet.Fields[I].AsString;
288.              end;
289.            System.Delete(S, 1, 1);
290.            Add(S);
291.            vDataSet.Next;
292.          end;
293.          Try
294.            SaveToFile(SysPath+'\Tem.xls');
295.          Except
296.            ShowMessage('写文件时发生保护性错误,Excel 如在运行,请先关闭!');
297.            Result:=false;
298.            exit;
299.          end;
300.        finally
301.          Free;
302.        end;
303.        Try
304.          MSExcel:=CreateOleObject('Excel.Application');
305.        Except
306.          ShowMessage('Excel 没有安装,请先安装!');
307.          Result:=false;
308.          exit;
309.        end;
310.        Try
311.          MSExcel.workbooks.open(SysPath+'\Tem.xls');
312.        Except
313.          ShowMessage('打开临时文件时出错,请检查'+SysPath+'\Tem.xls');
314.          Result:=false;
315.          exit;
316.        end;
317.          MSExcel.visible:=True;
318.          for VL_I :=1 to 4 do
319.          MSExcel.Selection.Borders[VL_I].LineStyle := 0;
320.          MSExcel.cells.select;
321.          MSExcel.Selection.HorizontalAlignment :=3;
322.          MSExcel.Selection.Borders[1].LineStyle := 0;[/size]
323. [size=3]       MSExcel.Range['A1'].Select;
324.        MSExcel.Selection.Font.Size :=24;[/size]
325. [size=3]       J:=0 ;
326.        for i:=0 to vdataset.fieldcount-1 do
327.            if vDataSet.fields[I].visible   then
328.               J:=J+1;[/size]
329. [size=3]       VL_I :=J;
330.        MSExcel.Range['A1:'+F_ColumnName(VL_I)+'1'].Select;
331.        MSExcel.Range['A1:'+F_ColumnName(VL_I)+'1'].Merge;
332.    end
333.    else
334.      Result:=false;
335. end;[/size]