紧急求助,excel进程关不掉 ( 积分: 100 )

  • 主题发起人 主题发起人 lmk
  • 开始时间 开始时间
L

lmk

Unregistered / Unconfirmed
GUEST, unregistred user!
ex&nbsp;:=&nbsp;CreateOleObject('Excel.Application');<br>&nbsp;&nbsp;sheetName&nbsp;:=&nbsp;ex.workbooks.open(fileName).WorkSheets[1].name;<br>&nbsp;&nbsp;ADOConn&nbsp;:=&nbsp;TADOConnection.Create(nil);<br>&nbsp;&nbsp;qry&nbsp;:=&nbsp;TADOQuery.Create(nil);<br>&nbsp;&nbsp;ADOConn.ConnectionString&nbsp;:=&nbsp;'Provider=Microsoft.Jet.OLEDB.4.0;'&nbsp;+<br>&nbsp;&nbsp;&nbsp;&nbsp;'Data&nbsp;Source='+fileName+';Extended&nbsp;Properties=EXCEL&nbsp;8.0;Persist&nbsp;Security&nbsp;Info=False';//HDR=Yes';<br>&nbsp;&nbsp;ADOConn.Open;<br>&nbsp;&nbsp;if&nbsp;ADOConn.Connected&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qry.Connection&nbsp;:=&nbsp;ADOConn;<br>&nbsp;&nbsp;qry.SQL.Clear;<br>&nbsp;&nbsp;qry.SQL.Text:='select&nbsp;*&nbsp;from&nbsp;['+copy(sFileName,1,length(sFileName)-4)+'$]';<br>&nbsp;&nbsp;qry.Open;<br>&nbsp;&nbsp;...<br>&nbsp;&nbsp;qry.Close;<br>&nbsp;&nbsp;ADOConn.Close;<br>&nbsp;&nbsp;qry.Free;<br>&nbsp;&nbsp;ADOConn.Free;<br>&nbsp;&nbsp;ex.WorkBooks.Close;<br>&nbsp;&nbsp;ex.Quit;<br><br>重新贴一下,刚逐行测试的,如果不把ADO连接加上去是可以free掉的,但加了之后,进程就关不掉了。谢谢“bbscom”的方法,但如果不用这种直接杀进程的方式呢?
 
procedure&nbsp;EndProcess(AFileName:&nbsp;string);<br>const<br>&nbsp;&nbsp;PROCESS_TERMINATE&nbsp;=&nbsp;$0001;<br>var<br>&nbsp;&nbsp;ExeFileName:&nbsp;string;<br>&nbsp;&nbsp;ContinueLoop:&nbsp;BOOL;<br>&nbsp;&nbsp;FSnapshotHandle:&nbsp;THandle;<br>&nbsp;&nbsp;FProcessEntry32:&nbsp;TProcessEntry32;<br>begin<br>&nbsp;&nbsp;ExeFileName&nbsp;:=&nbsp;AFileName;<br>&nbsp;&nbsp;FSnapshotHandle&nbsp;:=&nbsp;CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,&nbsp;0);<br>&nbsp;&nbsp;FProcessEntry32.dwSize&nbsp;:=&nbsp;Sizeof(FProcessEntry32);<br>&nbsp;&nbsp;ContinueLoop&nbsp;:=&nbsp;Process32First(FSnapshotHandle,&nbsp;FProcessEntry32);<br>&nbsp;&nbsp;while&nbsp;integer(ContinueLoop)&nbsp;&lt;&gt;&nbsp;0&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))&nbsp;=&nbsp;UpperCase(ExeFileName))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;(UpperCase(FProcessEntry32.szExeFile)&nbsp;=&nbsp;UpperCase(ExeFileName)))&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TerminateProcess(OpenProcess(PROCESS_TERMINATE,&nbsp;BOOL(0),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FProcessEntry32.th32ProcessID),&nbsp;0);<br>&nbsp;&nbsp;&nbsp;&nbsp;ContinueLoop&nbsp;:=&nbsp;Process32Next(FSnapshotHandle,&nbsp;FProcessEntry32);<br>&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;EndProcess('EXCEL.EXE');<br>end;
 
ExcelApp&nbsp;:=&nbsp;CreateOleObject('Excel.Application');<br>。。。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp.ActiveWorkbook.Saveas(xlsfile);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp.ActiveWorkbook.close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp.DisplayAlerts&nbsp;:=&nbsp;False;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp.quit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp&nbsp;:=&nbsp;Unassigned;
 
Delphi操作Excel大全12007-11-24&nbsp;16:23Delphi&nbsp;控制Excel<br>(一)&nbsp;使用动态创建的方法<br>首先创建&nbsp;Excel&nbsp;对象,使用ComObj:<br>var&nbsp;ExcelApp:&nbsp;Variant;<br>ExcelApp&nbsp;:=&nbsp;CreateOleObject(&nbsp;'Excel.Application'&nbsp;);<br>1)&nbsp;显示当前窗口:<br>ExcelApp.Visible&nbsp;:=&nbsp;True;<br>2)&nbsp;更改&nbsp;Excel&nbsp;标题栏:<br>ExcelApp.Caption&nbsp;:=&nbsp;'应用程序调用&nbsp;Microsoft&nbsp;Excel';<br>3)&nbsp;添加新工作簿:<br>ExcelApp.WorkBooks.Add;<br>4)&nbsp;打开已存在的工作簿:<br>ExcelApp.WorkBooks.Open(&nbsp;'C:/Excel/Demo.xls'&nbsp;);<br>5)&nbsp;设置第2个工作表为活动工作表:<br>ExcelApp.WorkSheets[2].Activate;&nbsp;或&nbsp;ExcelApp.WorksSheets[&nbsp;'Sheet2'&nbsp;].Activate;<br>6)&nbsp;给单元格赋值:<br>ExcelApp.Cells[1,4].Value&nbsp;:=&nbsp;'第一行第四列';<br>7)&nbsp;设置指定列的宽度(单位:字符个数),以第一列为例:<br>ExcelApp.ActiveSheet.Columns[1].ColumnsWidth&nbsp;:=&nbsp;5;<br>8)&nbsp;设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:<br>ExcelApp.ActiveSheet.Rows[2].RowHeight&nbsp;:=&nbsp;1/0.035;&nbsp;//&nbsp;1厘米<br>9)&nbsp;在第8行之前插入分页符:<br>ExcelApp.WorkSheets[1].Rows.PageBreak&nbsp;:=&nbsp;1;<br>10)&nbsp;在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak&nbsp;:=&nbsp;0;<br>11)&nbsp;指定边框线宽度:<br>ExcelApp.ActiveSheet.Range[&nbsp;'B3:D4'&nbsp;].Borders[2].Weight&nbsp;:=&nbsp;3;<br>1-左&nbsp;&nbsp;&nbsp;&nbsp;2-右&nbsp;&nbsp;&nbsp;3-顶&nbsp;&nbsp;&nbsp;&nbsp;4-底&nbsp;&nbsp;&nbsp;5-斜(&nbsp;/&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6-斜(&nbsp;/&nbsp;)<br>12)&nbsp;清除第一行第四列单元格公式:<br>ExcelApp.ActiveSheet.Cells[1,4].ClearContents;<br>13)&nbsp;设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name&nbsp;:=&nbsp;'隶书';<br>ExcelApp.ActiveSheet.Rows[1].Font.Color&nbsp;:=&nbsp;clBlue;<br>ExcelApp.ActiveSheet.Rows[1].Font.Bold&nbsp;&nbsp;&nbsp;:=&nbsp;True;<br>ExcelApp.ActiveSheet.Rows[1].Font.UnderLine&nbsp;:=&nbsp;True;<br>14)&nbsp;进行页面设置:<br>a.页眉:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.CenterHeader&nbsp;:=&nbsp;'报表演示';<br>b.页脚:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.CenterFooter&nbsp;:=&nbsp;'第&amp;P页';<br>c.页眉到顶端边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.HeaderMargin&nbsp;:=&nbsp;2/0.035;<br>d.页脚到底端边距3cm:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.HeaderMargin&nbsp;:=&nbsp;3/0.035;<br>e.顶边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.TopMargin&nbsp;:=&nbsp;2/0.035;<br>f.底边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.BottomMargin&nbsp;:=&nbsp;2/0.035;<br>g.左边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.LeftMargin&nbsp;:=&nbsp;2/0.035;<br>h.右边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.RightMargin&nbsp;:=&nbsp;2/0.035;<br>i.页面水平居中:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.CenterHorizontally&nbsp;:=&nbsp;2/0.035;<br>j.页面垂直居中:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.CenterVertically&nbsp;:=&nbsp;2/0.035;<br>k.打印单元格网线:<br>&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.PageSetup.PrintGridLines&nbsp;:=&nbsp;True;<br>15)&nbsp;拷贝操作:<br>a.拷贝整个工作表:&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.Used.Range.Copy;<br>b.拷贝指定区域:&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.Range[&nbsp;'A1:E2'&nbsp;].Copy;<br>c.从A1位置开始粘贴:&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.Range.[&nbsp;'A1'&nbsp;].PasteSpecial;<br>d.从文件尾部开始粘贴:&nbsp;&nbsp;&nbsp;ExcelApp.ActiveSheet.Range.PasteSpecial;<br>16)&nbsp;插入一行或一列:<br>a.&nbsp;ExcelApp.ActiveSheet.Rows[2].Insert;<br>b.&nbsp;ExcelApp.ActiveSheet.Columns[1].Insert;<br>17)&nbsp;删除一行或一列:<br>a.&nbsp;ExcelApp.ActiveSheet.Rows[2].Delete;<br>b.&nbsp;ExcelApp.ActiveSheet.Columns[1].Delete;<br>18)&nbsp;打印预览工作表:<br>ExcelApp.ActiveSheet.PrintPreview;<br>19)&nbsp;打印输出工作表:<br>ExcelApp.ActiveSheet.PrintOut;<br>20)&nbsp;工作表保存:<br>if&nbsp;not&nbsp;ExcelApp.ActiveWorkBook.Saved&nbsp;then<br>ExcelApp.ActiveSheet.PrintPreview;<br>21)&nbsp;工作表另存为:<br>ExcelApp.SaveAs(&nbsp;'C:/Excel/Demo1.xls'&nbsp;);<br>22)&nbsp;放弃存盘:<br>ExcelApp.ActiveWorkBook.Saved&nbsp;:=&nbsp;True;<br>23)&nbsp;关闭工作簿:<br>ExcelApp.WorkBooks.Close;<br>24)&nbsp;退出&nbsp;Excel:<br>ExcelApp.Quit;<br>(二)&nbsp;使用Delphi&nbsp;控件方法<br>在Form中分别放入ExcelApplication,&nbsp;ExcelWorkbook和ExcelWorksheet。<br>正在装载数据……<br><br>1)&nbsp;打开Excel&nbsp;<br>ExcelApplication1.Connect;<br>2)&nbsp;显示当前窗口:<br>ExcelApplication1.Visible[0]:=True;<br>3)&nbsp;更改&nbsp;Excel&nbsp;标题栏:<br>ExcelApplication1.Caption&nbsp;:=&nbsp;'应用程序调用&nbsp;Microsoft&nbsp;Excel';<br>4)&nbsp;添加新工作簿:<br>ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));<br>5)&nbsp;添加新工作表:<br>var&nbsp;Temp_Worksheet:&nbsp;_WorkSheet;<br>begin<br>Temp_Worksheet:=ExcelWorkbook1.<br>WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)&nbsp;as&nbsp;_WorkSheet;<br>ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);End;<br>6)&nbsp;打开已存在的工作簿:<br>ExcelApplication1.Workbooks.Open&nbsp;(c:/a.xls<br>EmptyParam,EmptyParam,EmptyParam,EmptyParam,<br>EmptyParam,EmptyParam,EmptyParam,EmptyParam,<br>&nbsp;&nbsp;&nbsp;EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)<br>7)&nbsp;设置第2个工作表为活动工作表:<br>ExcelApplication1.WorkSheets[2].Activate;&nbsp;或<br>ExcelApplication1.WorksSheets[&nbsp;'Sheet2'&nbsp;].Activate;<br>8)&nbsp;给单元格赋值:<br>ExcelApplication1.Cells[1,4].Value&nbsp;:=&nbsp;'第一行第四列';<br>9)&nbsp;设置指定列的宽度(单位:字符个数),以第一列为例:<br>ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth&nbsp;:=&nbsp;5;<br>10)&nbsp;设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:<br>ExcelApplication1.ActiveSheet.Rows[2].RowHeight&nbsp;:=&nbsp;1/0.035;&nbsp;//&nbsp;1厘米<br>11)&nbsp;在第8行之前插入分页符:<br>ExcelApplication1.WorkSheets[1].Rows.PageBreak&nbsp;:=&nbsp;1;<br>12)&nbsp;在第8列之前删除分页符:<br>ExcelApplication1.ActiveSheet.Columns[4].PageBreak&nbsp;:=&nbsp;0;<br>13)&nbsp;指定边框线宽度:<br>ExcelApplication1.ActiveSheet.Range[&nbsp;'B3:D4'&nbsp;].Borders[2].Weight&nbsp;:=&nbsp;3;<br>1-左&nbsp;&nbsp;&nbsp;&nbsp;2-右&nbsp;&nbsp;&nbsp;3-顶&nbsp;&nbsp;&nbsp;&nbsp;4-底&nbsp;&nbsp;&nbsp;5-斜(&nbsp;/&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6-斜(&nbsp;/&nbsp;)<br>14)&nbsp;清除第一行第四列单元格公式:<br>ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;<br>15)&nbsp;设置第一行字体属性:<br>ExcelApplication1.ActiveSheet.Rows[1].Font.Name&nbsp;:=&nbsp;'隶书';<br>ExcelApplication1.ActiveSheet.Rows[1].Font.Color&nbsp;:=&nbsp;clBlue;<br>ExcelApplication1.ActiveSheet.Rows[1].Font.Bold&nbsp;&nbsp;&nbsp;:=&nbsp;True;<br>ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine&nbsp;:=&nbsp;True;<br>16)&nbsp;进行页面设置:<br>a.页眉:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.CenterHeader&nbsp;:=&nbsp;'报表演示';<br>b.页脚:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.CenterFooter&nbsp;:=&nbsp;'第&amp;P页';<br>c.页眉到顶端边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin&nbsp;:=&nbsp;2/0.035;<br>d.页脚到底端边距3cm:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin&nbsp;:=&nbsp;3/0.035;<br>e.顶边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.TopMargin&nbsp;:=&nbsp;2/0.035;<br>f.底边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.BottomMargin&nbsp;:=&nbsp;2/0.035;<br>g.左边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.LeftMargin&nbsp;:=&nbsp;2/0.035;<br>h.右边距2cm:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.RightMargin&nbsp;:=&nbsp;2/0.035;<br>i.页面水平居中:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally&nbsp;:=&nbsp;2/0.035;<br>j.页面垂直居中:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.CenterVertically&nbsp;:=&nbsp;2/0.035;<br>k.打印单元格网线:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines&nbsp;:=&nbsp;True;<br>17)&nbsp;拷贝操作:<br>a.拷贝整个工作表:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.Used.Range.Copy;<br>b.拷贝指定区域:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.Range[&nbsp;'A1:E2'&nbsp;].Copy;<br>c.从A1位置开始粘贴:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.Range.[&nbsp;'A1'&nbsp;].PasteSpecial;<br>d.从文件尾部开始粘贴:<br>&nbsp;&nbsp;&nbsp;ExcelApplication1.ActiveSheet.Range.PasteSpecial;<br>18)&nbsp;插入一行或一列:<br>a.&nbsp;ExcelApplication1.ActiveSheet.Rows[2].Insert;<br>b.&nbsp;ExcelApplication1.ActiveSheet.Columns[1].Insert;<br>19)&nbsp;删除一行或一列:<br>a.&nbsp;ExcelApplication1.ActiveSheet.Rows[2].Delete;<br>b.&nbsp;ExcelApplication1.ActiveSheet.Columns[1].Delete;<br>20)&nbsp;打印预览工作表:<br>ExcelApplication1.ActiveSheet.PrintPreview;<br>21)&nbsp;打印输出工作表:<br>ExcelApplication1.ActiveSheet.PrintOut;<br>22)&nbsp;工作表保存:<br>if&nbsp;not&nbsp;ExcelApplication1.ActiveWorkBook.Saved&nbsp;then<br>ExcelApplication1.ActiveSheet.PrintPreview;<br>23)&nbsp;工作表另存为:<br>ExcelApplication1.SaveAs(&nbsp;'C:/Excel/Demo1.xls'&nbsp;);<br>24)&nbsp;放弃存盘:<br>ExcelApplication1.ActiveWorkBook.Saved&nbsp;:=&nbsp;True;<br>25)&nbsp;关闭工作簿:<br>ExcelApplication1.WorkBooks.Close;<br>26)&nbsp;退出&nbsp;Excel:<br>ExcelApplication1.Quit;<br>ExcelApplication1.Disconnect;<br>本人&nbsp;收藏<br><br>对不起我还需要一个锁定功能啊,就是输出到EXCEL后只能看,不能进行手工修改<br><br>Xl.Cells.Select;//Select&nbsp;All&nbsp;Cells<br>Xl.Selection.Locked&nbsp;=&nbsp;True;//&nbsp;Lock&nbsp;Selected&nbsp;Cells<br>//Xl:=CreateOleObject('Excel.Application');<br>________________________________________<br><br>procedure&nbsp;TForm1.BitBtn4Click(Sender:&nbsp;TObject);<br>var<br>ExcelApp,&nbsp;Sheet:&nbsp;Variant;<br>begin<br>if&nbsp;OpenDialog1.Execute&nbsp;then<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp&nbsp;:=&nbsp;CreateOleObject(&nbsp;'Excel.Application'&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp.Workbooks.Open(OpenDialog1.FileName);<br>&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;ExcelApp.ActiveSheet;<br>&nbsp;&nbsp;&nbsp;&nbsp;Caption&nbsp;:=&nbsp;'Row&nbsp;Count:&nbsp;'&nbsp;+&nbsp;IntToStr(Sheet.UsedRange.Rows.Count);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp.Quit;<br>&nbsp;&nbsp;&nbsp;&nbsp;Sheet&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;Unassigned;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApp&nbsp;:=&nbsp;Unassigned;<br>end;<br>end;<br>________________________________________<br><br>procedure&nbsp;CopyDbDataToExcel(Target:&nbsp;TDbgrid);<br>var<br>iCount,&nbsp;jCount:&nbsp;Integer;<br>XLApp:&nbsp;Variant;<br>Sheet:&nbsp;Variant;<br>begin<br>Screen.Cursor&nbsp;:=&nbsp;crHourGlass;<br>if&nbsp;not&nbsp;VarIsEmpty(XLApp)&nbsp;then<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;XLApp.DisplayAlerts&nbsp;:=&nbsp;False;<br>&nbsp;&nbsp;&nbsp;&nbsp;XLApp.Quit;<br>&nbsp;&nbsp;&nbsp;&nbsp;VarClear(XLApp);<br>end;<br>//通过ole创建Excel对象<br>try<br>&nbsp;&nbsp;&nbsp;&nbsp;XLApp&nbsp;:=&nbsp;CreateOleObject('Excel.Application');<br>except<br>&nbsp;&nbsp;&nbsp;&nbsp;Screen.Cursor&nbsp;:=&nbsp;crDefault;<br>&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>end;<br>XLApp.WorkBooks.Add[XLWBatWorksheet];<br>XLApp.WorkBooks[1].WorkSheets[1].Name&nbsp;:=&nbsp;'测试工作薄';<br>Sheet&nbsp;:=&nbsp;XLApp.Workbooks[1].WorkSheets['测试工作薄'];<br>if&nbsp;not&nbsp;Target.DataSource.DataSet.Active&nbsp;then<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Screen.Cursor&nbsp;:=&nbsp;crDefault;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br>end;<br>Target.DataSource.DataSet.first;<br>for&nbsp;iCount&nbsp;:=&nbsp;0&nbsp;to&nbsp;Target.Columns.Count&nbsp;-&nbsp;1&nbsp;do<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet.cells[1,&nbsp;iCount&nbsp;+&nbsp;1]&nbsp;:=&nbsp;Target.Columns.Items[iCount].Title.Caption;<br>end;<br>jCount&nbsp;:=&nbsp;1;<br>while&nbsp;not&nbsp;Target.DataSource.DataSet.Eof&nbsp;do<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;iCount&nbsp;:=&nbsp;0&nbsp;to&nbsp;Target.Columns.Count&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sheet.cells[jCount&nbsp;+&nbsp;1,&nbsp;iCount&nbsp;+&nbsp;1]&nbsp;:=&nbsp;Target.Columns.Items[iCount].Field.AsString;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(jCount);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Target.DataSource.DataSet.Next;<br>end;<br>XlApp.Visible&nbsp;:=&nbsp;True;<br>Screen.Cursor&nbsp;:=&nbsp;crDefault;<br>end;<br><br>看看我的函数<br>function&nbsp;ExportToExcel(Header:&nbsp;String;<br>vDataSet:&nbsp;TDataSet):&nbsp;Boolean;<br>var<br>I,VL_I,j:&nbsp;integer;<br>S,SysPath:&nbsp;string;<br>MsExcel:Variant;<br>begin<br>Result:=true;<br>if&nbsp;Application.MessageBox('您确信将数据导入到Excel吗?','提示!',MB_OKCANCEL&nbsp;+&nbsp;MB_DEFBUTTON1)&nbsp;=&nbsp;IDOK&nbsp;then<br>begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SysPath:=ExtractFilePath(application.exename);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;TStringList.Create&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vDataSet.First&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:=S+Header;<br>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;system.Delete(s,1,1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s:=';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;I:=0&nbsp;to&nbsp;vDataSet.fieldcount-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;vDataSet.fields.visible=true&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:=S+#9+vDataSet.fields.displaylabel;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system.Delete(s,1,1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;vDataSet.Eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;:=&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;I&nbsp;:=&nbsp;0&nbsp;to&nbsp;vDataSet.FieldCount&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;vDataSet.fields.visible=true&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;:=&nbsp;S&nbsp;+&nbsp;#9&nbsp;+&nbsp;vDataSet.Fields.AsString;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Delete(S,&nbsp;1,&nbsp;1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add(S);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vDataSet.Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveToFile(SysPath+'/Tem.xls');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('写文件时发生保护性错误,Excel&nbsp;如在运行,请先关闭!');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Free;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel:=CreateOleObject('Excel.Application');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('Excel&nbsp;没有安装,请先安装!');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.workbooks.open(SysPath+'/Tem.xls');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage('打开临时文件时出错,请检查'+SysPath+'/Tem.xls');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.visible:=True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;VL_I&nbsp;:=1&nbsp;to&nbsp;4&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Selection.Borders[VL_I].LineStyle&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.cells.select;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Selection.HorizontalAlignment&nbsp;:=3;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Selection.Borders[1].LineStyle&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Range['A1'].Select;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Selection.Font.Size&nbsp;:=24;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;J:=0&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;vdataset.fieldcount-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;vDataSet.fields.visible&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;J:=J+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VL_I&nbsp;:=J;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Range['A1:'+F_ColumnName(VL_I)+'1'].Select;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSExcel.Range['A1:'+F_ColumnName(VL_I)+'1'].Merge;<br>end<br>else<br>&nbsp;&nbsp;&nbsp;&nbsp;Result:=false;<br>end;<br><br>转别人的组件<br>unit&nbsp;OleExcel;<br>interface<br>uses<br>Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,&nbsp;Dialogs,<br>comobj,&nbsp;DBTables,&nbsp;Grids;<br>type<br>TOLEExcel&nbsp;=&nbsp;class(TComponent)<br>private<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcelCreated:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;FVisible:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcel:&nbsp;Variant;<br>&nbsp;&nbsp;&nbsp;&nbsp;FWorkBook:&nbsp;Variant;<br>&nbsp;&nbsp;&nbsp;&nbsp;FWorkSheet:&nbsp;Variant;<br>&nbsp;&nbsp;&nbsp;&nbsp;FCellFont:&nbsp;TFont;<br>&nbsp;&nbsp;&nbsp;&nbsp;FTitleFont:&nbsp;TFont;<br>&nbsp;&nbsp;&nbsp;&nbsp;FFontChanged:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;FIgnoreFont:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;FFileName:&nbsp;TFileName;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetExcelCellFont(var&nbsp;Cell:&nbsp;Variant);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetExcelTitleFont(var&nbsp;Cell:&nbsp;Variant);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetTableColumnName(const&nbsp;Table:&nbsp;TTable;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetQueryColumnName(const&nbsp;Query:&nbsp;TQuery;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetFixedCols(const&nbsp;StringGrid:&nbsp;TStringGrid;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetFixedRows(const&nbsp;StringGrid:&nbsp;TStringGrid;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetStringGridBody(const&nbsp;StringGrid:&nbsp;TStringGrid;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>protected<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetCellFont(NewFont:&nbsp;TFont);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetTitleFont(NewFont:&nbsp;TFont);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetVisible(DoShow:&nbsp;Boolean);<br>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetCell(ACol,&nbsp;ARow:&nbsp;Integer):&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetCell(ACol,&nbsp;ARow:&nbsp;Integer;&nbsp;const&nbsp;Value:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetDateCell(ACol,&nbsp;ARow:&nbsp;Integer):&nbsp;TDateTime;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetDateCell(ACol,&nbsp;ARow:&nbsp;Integer;&nbsp;const&nbsp;Value:&nbsp;TDateTime);<br>public<br>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;Create(AOwner:&nbsp;TComponent);&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;Destroy;&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;CreateExcelInstance;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Cell[ACol,&nbsp;ARow:&nbsp;Integer]:&nbsp;string&nbsp;read&nbsp;GetCell&nbsp;write&nbsp;SetCell;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;DateCell[ACol,&nbsp;ARow:&nbsp;Integer]:&nbsp;TDateTime&nbsp;read&nbsp;GetDateCell&nbsp;write&nbsp;SetDateCell;<br>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;IsCreated:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;TableToExcel(const&nbsp;Table:&nbsp;TTable);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;QueryToExcel(const&nbsp;Query:&nbsp;TQuery);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;StringGridToExcel(const&nbsp;StringGrid:&nbsp;TStringGrid);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SaveToExcel(const&nbsp;FileName:&nbsp;string);<br>published<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;TitleFont:&nbsp;TFont&nbsp;read&nbsp;FTitleFont&nbsp;write&nbsp;SetTitleFont;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;CellFont:&nbsp;TFont&nbsp;read&nbsp;FCellFont&nbsp;write&nbsp;SetCellFont;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Visible:&nbsp;Boolean&nbsp;read&nbsp;FVisible&nbsp;write&nbsp;SetVisible;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;IgnoreFont:&nbsp;Boolean&nbsp;read&nbsp;FIgnoreFont&nbsp;write&nbsp;FIgnoreFont;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;FileName:&nbsp;TFileName&nbsp;read&nbsp;FFileName&nbsp;write&nbsp;FFileName;<br>end;<br>procedure&nbsp;Register;<br>implementation<br>constructor&nbsp;TOLEExcel.Create(AOwner:&nbsp;TComponent);<br>begin<br>inherited&nbsp;Create(AOwner);<br>FIgnoreFont&nbsp;:=&nbsp;True;<br>FCellFont&nbsp;:=&nbsp;TFont.Create;<br>FTitleFont&nbsp;:=&nbsp;TFont.Create;<br>FExcelCreated&nbsp;:=&nbsp;False;<br>FVisible&nbsp;:=&nbsp;False;<br>FFontChanged&nbsp;:=&nbsp;False;<br>end;<br>destructor&nbsp;TOLEExcel.Destroy;<br>begin<br>FCellFont.Free;<br>FTitleFont.Free;<br>inherited&nbsp;Destroy;<br>end;<br>procedure&nbsp;TOLEExcel.SetExcelCellFont(var&nbsp;Cell:&nbsp;Variant);<br>begin<br>if&nbsp;FIgnoreFont&nbsp;then&nbsp;exit;<br>with&nbsp;FCellFont&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Name&nbsp;:=&nbsp;Name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Size&nbsp;:=&nbsp;Size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Color&nbsp;:=&nbsp;Color;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Bold&nbsp;:=&nbsp;fsBold&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Italic&nbsp;:=&nbsp;fsItalic&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.UnderLine&nbsp;:=&nbsp;fsUnderline&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Strikethrough&nbsp;:=&nbsp;fsStrikeout&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TOLEExcel.SetExcelTitleFont(var&nbsp;Cell:&nbsp;Variant);<br>begin<br>if&nbsp;FIgnoreFont&nbsp;then&nbsp;exit;<br>with&nbsp;FTitleFont&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Name&nbsp;:=&nbsp;Name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Size&nbsp;:=&nbsp;Size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Color&nbsp;:=&nbsp;Color;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Bold&nbsp;:=&nbsp;fsBold&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Italic&nbsp;:=&nbsp;fsItalic&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.UnderLine&nbsp;:=&nbsp;fsUnderline&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Font.Strikethrough&nbsp;:=&nbsp;fsStrikeout&nbsp;in&nbsp;Style;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TOLEExcel.SetVisible(DoShow:&nbsp;Boolean);<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>if&nbsp;DoShow&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcel.Visible&nbsp;:=&nbsp;True<br>else<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcel.Visible&nbsp;:=&nbsp;False;<br>end;<br>function&nbsp;TOLEExcel.GetCell(ACol,&nbsp;ARow:&nbsp;Integer):&nbsp;string;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>result&nbsp;:=&nbsp;FWorkSheet.Cells[ARow,&nbsp;ACol];<br>end;<br>procedure&nbsp;TOLEExcel.SetCell(ACol,&nbsp;ARow:&nbsp;Integer;&nbsp;const&nbsp;Value:&nbsp;string);<br>var<br>Cell:&nbsp;Variant;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>Cell&nbsp;:=&nbsp;FWorkSheet.Cells[ARow,&nbsp;ACol];<br>SetExcelCellFont(Cell);<br>Cell.Value&nbsp;:=&nbsp;Value;<br>end;<br><br>function&nbsp;TOLEExcel.GetDateCell(ACol,&nbsp;ARow:&nbsp;Integer):&nbsp;TDateTime;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>result&nbsp;:=&nbsp;StrToDateTime(FWorkSheet.Cells[ARow,&nbsp;ACol]);<br>end;<br>procedure&nbsp;TOLEExcel.SetDateCell(ACol,&nbsp;ARow:&nbsp;Integer;&nbsp;const&nbsp;Value:&nbsp;TDateTime);<br>var<br>Cell:&nbsp;Variant;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>Cell&nbsp;:=&nbsp;FWorkSheet.Cells[ARow,&nbsp;ACol];<br>SetExcelCellFont(Cell);<br>Cell.Value&nbsp;:=&nbsp;''&nbsp;+&nbsp;DateTimeToStr(Value);<br>end;<br>procedure&nbsp;TOLEExcel.CreateExcelInstance;<br>begin<br>try<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcel&nbsp;:=&nbsp;CreateOLEObject('Excel.Application');<br>&nbsp;&nbsp;&nbsp;&nbsp;FWorkBook&nbsp;:=&nbsp;FExcel.WorkBooks.Add;<br>&nbsp;&nbsp;&nbsp;&nbsp;FWorkSheet&nbsp;:=&nbsp;FWorkBook.WorkSheets.Add;<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcelCreated&nbsp;:=&nbsp;True;<br>except<br>&nbsp;&nbsp;&nbsp;&nbsp;FExcelCreated&nbsp;:=&nbsp;False;<br>end;<br>end;<br>function&nbsp;TOLEExcel.IsCreated:&nbsp;Boolean;<br>begin<br>result&nbsp;:=&nbsp;FExcelCreated;<br>end;<br>procedure&nbsp;TOLEExcel.SetTitleFont(NewFont:&nbsp;TFont);<br>begin<br>if&nbsp;NewFont&nbsp;&lt;&gt;&nbsp;FTitleFont&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;FTitleFont.Assign(NewFont);<br>end;<br>procedure&nbsp;TOLEExcel.SetCellFont(NewFont:&nbsp;TFont);<br>begin<br>if&nbsp;NewFont&nbsp;&lt;&gt;&nbsp;FCellFont&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;FCellFont.Assign(NewFont);<br>end;<br>procedure&nbsp;TOLEExcel.GetTableColumnName(const&nbsp;Table:&nbsp;TTable;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>var<br>Col:&nbsp;integer;<br>begin<br>for&nbsp;Col&nbsp;:=&nbsp;0&nbsp;to&nbsp;Table.FieldCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[1,&nbsp;Col&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelTitleFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;Table.Fields[Col].FieldName;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TOLEExcel.TableToExcel(const&nbsp;Table:&nbsp;TTable);<br>var<br>Col,&nbsp;Row:&nbsp;LongInt;<br>Cell:&nbsp;Variant;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>if&nbsp;Table.Active&nbsp;=&nbsp;False&nbsp;then&nbsp;exit;<br>GetTableColumnName(Table,&nbsp;Cell);<br>Row&nbsp;:=&nbsp;2;<br>with&nbsp;Table&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;EOF&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;Col&nbsp;:=&nbsp;0&nbsp;to&nbsp;FieldCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[Row,&nbsp;Col&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelCellFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;Fields[Col].AsString;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(Row);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TOLEExcel.GetQueryColumnName(const&nbsp;Query:&nbsp;TQuery;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>var<br>Col:&nbsp;integer;<br>begin<br>for&nbsp;Col&nbsp;:=&nbsp;0&nbsp;to&nbsp;Query.FieldCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[1,&nbsp;Col&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelTitleFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;Query.Fields[Col].FieldName;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TOLEExcel.QueryToExcel(const&nbsp;Query:&nbsp;TQuery);<br>var<br>Col,&nbsp;Row:&nbsp;LongInt;<br>Cell:&nbsp;Variant;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>if&nbsp;Query.Active&nbsp;=&nbsp;False&nbsp;then&nbsp;exit;<br>GetQueryColumnName(Query,&nbsp;Cell);<br>Row&nbsp;:=&nbsp;2;<br>with&nbsp;Query&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;EOF&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;Col&nbsp;:=&nbsp;0&nbsp;to&nbsp;FieldCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[Row,&nbsp;Col&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelCellFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;Fields[Col].AsString;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(Row);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TOLEExcel.GetFixedCols(const&nbsp;StringGrid:&nbsp;TStringGrid;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>var<br>Col,&nbsp;Row:&nbsp;LongInt;<br>begin<br>for&nbsp;Col&nbsp;:=&nbsp;0&nbsp;to&nbsp;StringGrid.FixedCols&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;Row&nbsp;:=&nbsp;0&nbsp;to&nbsp;StringGrid.RowCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[Row&nbsp;+&nbsp;1,&nbsp;Col&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelTitleFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;StringGrid.Cells[Col,&nbsp;Row];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TOLEExcel.GetFixedRows(const&nbsp;StringGrid:&nbsp;TStringGrid;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>var<br>Col,&nbsp;Row:&nbsp;LongInt;<br>begin<br>for&nbsp;Row&nbsp;:=&nbsp;0&nbsp;to&nbsp;StringGrid.FixedRows&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;Col&nbsp;:=&nbsp;0&nbsp;to&nbsp;StringGrid.ColCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[Row&nbsp;+&nbsp;1,&nbsp;Col&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelTitleFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;StringGrid.Cells[Col,&nbsp;Row];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TOLEExcel.GetStringGridBody(const&nbsp;StringGrid:&nbsp;TStringGrid;&nbsp;var&nbsp;Cell:&nbsp;Variant);<br>var<br>Col,&nbsp;Row,&nbsp;x,&nbsp;y:&nbsp;LongInt;<br>begin<br>Col&nbsp;:=&nbsp;StringGrid.FixedCols;<br>Row&nbsp;:=&nbsp;StringGrid.FixedRows;<br>for&nbsp;x&nbsp;:=&nbsp;Row&nbsp;to&nbsp;StringGrid.RowCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;y&nbsp;:=&nbsp;Col&nbsp;to&nbsp;StringGrid.ColCount&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell&nbsp;:=&nbsp;FWorkSheet.Cells[x&nbsp;+&nbsp;1,&nbsp;y&nbsp;+&nbsp;1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetExcelCellFont(Cell);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cell.Value&nbsp;:=&nbsp;StringGrid.Cells[y,&nbsp;x];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br>procedure&nbsp;TOLEExcel.StringGridToExcel(const&nbsp;StringGrid:&nbsp;TStringGrid);<br>var<br>Cell:&nbsp;Variant;<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>GetFixedCols(StringGrid,&nbsp;Cell);<br>GetFixedRows(StringGrid,&nbsp;Cell);<br>GetStringGridBody(StringGrid,&nbsp;Cell);<br>end;<br>procedure&nbsp;TOLEExcel.SaveToExcel(const&nbsp;FileName:&nbsp;string);<br>begin<br>if&nbsp;not&nbsp;FExcelCreated&nbsp;then&nbsp;exit;<br>FWorkSheet.SaveAs(FileName);<br>end;<br>procedure&nbsp;Register;<br>begin<br>RegisterComponents('Tanglu',&nbsp;[TOLEExcel]);<br>end;<br>end.<br>----------------------------------------------
 
我想知道lz为什么要打开以后用ado读<br><br>不过你可以试试把ado的代码全部放在一个函数A里。然后打开excelapp后调用这个函数<br><br>注意,我说的是全部
 
ex.Quit;<br>ex&nbsp;:=&nbsp;Unassigned;
 
樓上正解
 
to&nbsp;firstrose:是修改别人以前的代码,尽量不想做大的改动。如果是我写,干脆把ADO去掉,直接写坐标了。<br>to&nbsp;Avalon:已经改好了,用的好象就是ex&nbsp;:=&nbsp;Unassigned;,不过进程还是没杀掉,但不增加新的进程了,多次打开会不会出现问题,要看测试了。非常感谢各位,现在散分。
 
多人接受答案了。
 
后退
顶部