如何通过DELPHI,在SQL和EXECL之间相互导入导出数据并加密 ( 积分: 200 )

  • 主题发起人 主题发起人 mybabyben
  • 开始时间 开始时间
M

mybabyben

Unregistered / Unconfirmed
GUEST, unregistred user!
如何通过DELPHI,从数据库SQL中导出数据到EXECL中同时对EXECL加密,<br>反之用加密EXECL通过DELHPI界面操作导入到SQL数据库表中.
 
同问~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
这样的话估计只能用笨方法吧.直接每条数据取出来然后加密,然后再转存到excel里.
 
首先实现数据导入:<br>在sql&nbsp;server的查询分析器里执行:<br>SELECT&nbsp;*&nbsp;into&nbsp;mytable<br>FROM&nbsp;OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data&nbsp;Source=&quot;d:/a.xls&quot;;Extended&nbsp;Properties=&quot;Excel&nbsp;5.0;HDR=Yes;&quot;;Persist&nbsp;Security&nbsp;Info=False')...sheet1$<br>这个sql语句可以放到AdoQuery里去执行,没有问题吧?<br>-------------------------------------------------------------------<br>然后实现数据导出:<br>procedure&nbsp;TFrmMain.WriteExcel(AdsData:&nbsp;TADODataSet;&nbsp;sName,&nbsp;Title:&nbsp;string);<br>var<br>&nbsp;&nbsp;ExcelApplication1:&nbsp;TExcelApplication;<br>&nbsp;&nbsp;ExcelWorksheet1:&nbsp;TExcelWorksheet;<br>&nbsp;&nbsp;ExcelWorkbook1:&nbsp;TExcelWorkbook;<br>&nbsp;&nbsp;i,&nbsp;j:&nbsp;integer;<br>&nbsp;&nbsp;filename:&nbsp;string;<br>begin<br>&nbsp;&nbsp;filename&nbsp;:=&nbsp;concat(extractfilepath(application.exename),&nbsp;sName,&nbsp;’.xls’);<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApplication1&nbsp;:=&nbsp;TExcelApplication.Create(Application);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1&nbsp;:=&nbsp;TExcelWorksheet.Create(Application);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorkbook1&nbsp;:=&nbsp;TExcelWorkbook.Create(Application);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApplication1.Connect;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.Messagebox(’Excel&nbsp;没有安装!’,&nbsp;’Hello’,&nbsp;MB_ICONERROR&nbsp;+&nbsp;mb_Ok);<br>&nbsp;&nbsp;&nbsp;&nbsp;Abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApplication1.Workbooks.Add(EmptyParam,&nbsp;0);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1]&nbsp;as&nbsp;_worksheet);<br>&nbsp;&nbsp;&nbsp;&nbsp;AdsData.First;<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;j&nbsp;:=&nbsp;0&nbsp;to&nbsp;AdsData.Fields.Count&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Cells.item[3,&nbsp;j&nbsp;+&nbsp;1]&nbsp;:=&nbsp;AdsData.Fields[j].DisplayLabel;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Cells.item[3,&nbsp;j&nbsp;+&nbsp;1].font.size&nbsp;:=&nbsp;’10’;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;:=&nbsp;4&nbsp;to&nbsp;AdsData.RecordCount&nbsp;+&nbsp;3&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;j&nbsp;:=&nbsp;0&nbsp;to&nbsp;AdsData.Fields.Count&nbsp;-&nbsp;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;ExcelWorksheet1.Cells.item[i,&nbsp;j&nbsp;+&nbsp;1]&nbsp;:=<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdsData.Fields[j].Asstring;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Cells.item[i,&nbsp;j&nbsp;+&nbsp;1].font.size&nbsp;:=&nbsp;’10’;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdsData.Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Columns.AutoFit;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Cells.item[1,&nbsp;2]&nbsp;:=&nbsp;Title;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Cells.Item[1,&nbsp;2].font.size&nbsp;:=&nbsp;’14’;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.SaveAs(filename);<br>&nbsp;&nbsp;&nbsp;&nbsp;Application.Messagebox(pchar(’数据成功导出’&nbsp;+&nbsp;filename),&nbsp;’Hello’,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mb_Ok);<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApplication1.Disconnect;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApplication1.Quit;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelApplication1.Free;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorksheet1.Free;<br>&nbsp;&nbsp;&nbsp;&nbsp;ExcelWorkbook1.Free;<br>&nbsp;&nbsp;end;<br>end;<br>其中参数AdsData可以是一个ADOQuery或者ADOTable<br>---------------------------------------------------------------------<br>我就写到这一步,这两种是比较快速的方法了。<br>加密再看另外哪位来接招。
 
to&nbsp;icic_icic&nbsp;谢谢你,能否把execl导入SQL中放在DELPHI中的过程写一个完整的给我呢,首先在查询分析器中我执行是没办法通过,报错有如下信息<br>&quot;OLE&nbsp;DB&nbsp;提供程序&nbsp;'Microsoft.Jet.OLEDB.4.0'&nbsp;报错。&nbsp;<br>[OLE/DB&nbsp;provider&nbsp;returned&nbsp;message:&nbsp;找不到可安装的&nbsp;ISAM。]<br>OLE&nbsp;DB&nbsp;错误跟踪[OLE/DB&nbsp;Provider&nbsp;'Microsoft.Jet.OLEDB.4.0'&nbsp;IDBInitialize::Initialize&nbsp;returned&nbsp;0x80004005:&nbsp;&nbsp;&nbsp;]。&quot;<br>针对你提供的语句,有几个小问题,第一路径能否写成动态的?是否名字只能固定一个,因为我每次导入的文件名都会不一样的,但用户是不知道的,这些都要在后台处理,第二,我们所装的OFFICE中的EXECL&nbsp;版本有多种,可能不同用户版本不一样,但程序要通用,此处是否只写EXECL5.就可.第三能否解释一下OpenDataSource()的每一个意思.第四,最后一点...sheet1$写这是起什么作用,我里面没有取这名字的,是根据导也的文件名字会不一样,是否此处只写这就行?<br>至于第二个,SQL导出到EXECL,我用EXECL中的VB宏可以实现导出功能,但却没办法用程序实现修改导出文件名及加密码功能.不知道你上面的能否实现此功能.且是否可以直接放上去就能用还是要根据不同的环境再作修改?<br><br><br>再详细一下题目要求:<br>1.通过DELPHI界面增加一导出,导出按钮,<br>2.用户点导出按钮时,要实现如下几点.<br>&nbsp;1)根据不同的内容同时从SQL数据库中取数生成三个不同的表(此用存储过程已实现),<br>&nbsp;2)导出到一EXECL文件名中三页内容,其中EXECL文件名要随着导出内容不同而动态生成,EXECL中三页内容的名字是中文名字且是固定的.<br>&nbsp;3)导出的EXECL需要加密,同时生成的内容需要固定放于一文件夹中,且用户不能修改<br><br>3.用户点导入按钮时,要实现如下几点<br>&nbsp;1)通过导出的固定文件夹中的EXECL,后台自动导入到SQL数据表中.(SQL数据中针对每个不同的EXECL都有三页内容,且这三页内容有三个共同的表,每次都导入这三个表中)<br>&nbsp;2)检查三个表中数据,若以前导入过此数据,则不再导入,没有导入再插入.<br>&nbsp;3)在导入前此文件还是加密状态,用户只能执行导入操作,<br><br>另:针对第三点导入,不知道以上方法能否实现,因为每次导入的文件名字是不一样的,后台能否实现自动去找,还是要通过用户自己找开文件夹点对应的文件才行.还是第次导入的文件名必须要相同才可以用程序来实现.<br><br>希望各位会的给一点参考意见.网上虽然查到好多这方面的资料,但至今都无法看懂,或者很难适合以上要求.
 
1.肯定没有问题<br>2.<br>&nbsp;2).文件名动态生成,你有相应算法动态吗?不知道你指的是什么动态.但这个是可以自己设的,也就是说可以在程序里随便改.<br>&nbsp;3).是对excel文件里的单元格内容进行加密还是对整个excel文件进行加密?如果是仅对内容,看你需要什么加密算法了.常用的md5,des,base6等算法,或者你自己写一个.如果是对整个excel文件进行加密,可考虑导出后再调用一个加密算法对excel文件进行加密,如果是针对单元格的内容,可以先读出表的数据,然后逐一对每个数据进行加密后再存成excel文件.<br>3.<br>&nbsp;1)没什么说的<br>&nbsp;2)如果要实现逐一检查每一行数据,则不能用先前那位哥们的方法统一导入,因为那样不能检查是否有重复数据,此时只能一行一行的导入,导入前先针对主键进行检查,是否数据库里已经有此行数据,若没有则导入,若有则跳过.<br>&nbsp;3)如果有加密,则需要按相应的解密算法进行解密后再导.<br>文件名不一样,那是否有规律?按日期?或者则文件夹里只有这一个文件?
 
to&nbsp;erqie,谢谢<br><br>2<br>&nbsp;&nbsp;2)文件名为:客户名称+流水号,这个可以组合出来,但不知道如何把组合出来的名字替换掉导出来生成的BOOK1.XLS文件,用户只要导出就直接取上名字了.<br>&nbsp;&nbsp;3)加密是针对整个EXECL文档,目的是防止用户更改其中的数据<br>3<br>&nbsp;&nbsp;2)是每一行数据都要检查,关键是一个EXECL有三个表格要同时导入到SQL中同时检查,不知道如何下手<br><br>若能提供代码的万分感谢,在线等待中....
 
别人教我用这种办法导入,但还是行不通,调试不来,不知道问题错在哪里,<br><br>//&nbsp;FN&nbsp;是要导入的&nbsp;Excel&nbsp;文件名,HN&nbsp;是工作表名<br>//&nbsp;SN,DN,UN,PW,TN&nbsp;分别是&nbsp;SQL服务器名,数据库名,SQL帐号,SQL密码,SQL表名<br>Procedure&nbsp;TfrmSalDeliMD.InputData(FN,HN:String;SN,DN,UN,PW,TN:String);<br>var<br>&nbsp;&nbsp;adocSQL:TAdoConnection;<br>&nbsp;&nbsp;adocExcel:TAdoConnection;<br><br>&nbsp;&nbsp;dtssql:TAdoTable;<br>&nbsp;&nbsp;dtsExcel:TAdoDataSet;<br>&nbsp;&nbsp;DSN:String;<br>&nbsp;&nbsp;SF:string;//是个文件名变量,存的是Excel文件名,包括路径<br>Begin<br>&nbsp;&nbsp;DSN:='Provider=SQLOLEDB.1;';<br>&nbsp;&nbsp;DSN:=DSN+'Password='+PW+';';<br>&nbsp;&nbsp;DSN:=DSN+'Persist&nbsp;Security&nbsp;Info=True;';<br>&nbsp;&nbsp;DSN:=DSN+'User&nbsp;ID='+UN+';';<br>&nbsp;&nbsp;DSN:=DSN+'Initial&nbsp;Catalog='+DN+';';<br>&nbsp;&nbsp;DSN:=DSN+'Data&nbsp;Source='+SN;<br>&nbsp;&nbsp;&nbsp;adocSql:=TAdoConnection.Create(Application);<br>&nbsp;&nbsp;&nbsp;adocSql.LoginPrompt:=False;<br>&nbsp;&nbsp;Try<br> If&nbsp;adocSQL.Connected&nbsp;then&nbsp;adocSQL.Connected:=False;<br> adocSql.ConnectionString:=DSN;<br>&nbsp;&nbsp;&nbsp;&nbsp;adocSql.Connected:=True;<br>&nbsp;&nbsp;except<br> showbox('连接SQL服务器失败!');<br> Abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;DNS:='Provider=Microsoft.Jet.OLEDB.4.0;'+<br>&nbsp;&nbsp;'Data&nbsp;Source='+SF+';Extended&nbsp;Properties=Excel&nbsp;8.0;Persist&nbsp;Security&nbsp;Info=False';<br>&nbsp;&nbsp;adocExcel:=TAdoConnection.Create(Application);<br>&nbsp;&nbsp;adocExcel.LoginPrompt:=False;<br>&nbsp;&nbsp;Try<br> If&nbsp;adocExcel.Connected&nbsp;then&nbsp;adocExcel.Connected:=False;<br> adocExcel.ConnectionString:=DSN;<br>&nbsp;&nbsp;&nbsp;&nbsp;adocExcel.Connected:=True;<br>&nbsp;&nbsp;except<br> showbox('连接Excel文件失败!');<br> Abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;dtsSql:=TAdoTable.Create(Application);<br>&nbsp;&nbsp;dtsSql.CONNECTION:=adocSql;<br>&nbsp;&nbsp;dtsSql.COMMANDTYPE:=CMDTABLEDIRECT;<br>&nbsp;&nbsp;dtsSql.COMMANDTEXT:=TN; //&nbsp;SQL&nbsp;&nbsp;表名<br>&nbsp;&nbsp;//&nbsp;dtssql.con<br>&nbsp;&nbsp;Try<br> dtsSql.Active:=True;<br>&nbsp;&nbsp;Except<br> showbox('打开SQL表失败!');<br> abort;<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;dtsExcel:=TAdoTable.Create(Application);<br>&nbsp;&nbsp;dtsExcel.CONNECTION:=adocSql;<br>&nbsp;&nbsp;dtsExcel.COMMANDTYPE:=CMDTABLEDIRECT;<br>&nbsp;&nbsp;dtsExcel.COMMANDTEXT:=HN; //&nbsp;Excel工作表名&nbsp;比如&nbsp;Sheet1<br>&nbsp;&nbsp;Try<br> dtsExcel.Active:=True;<br>&nbsp;&nbsp;Except<br> showbox('打开Excel工作表失败!');<br> abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;dtsExcel.First;<br>&nbsp;&nbsp;While&nbsp;Not&nbsp;DtsExcel.Eof&nbsp;Do<br>&nbsp;&nbsp;Begin<br> If&nbsp;Not&nbsp;dtsSql.Locate('SQL表KeyFields',dtsExcel.Fields[0].AsString,[loCaseInsensitive])&nbsp;Then<br> Begin<br> //&nbsp;未找到<br> &nbsp;&nbsp;dtsSql.Append;<br> &nbsp;&nbsp;dtsSql.Edit;<br> &nbsp;&nbsp;//&nbsp;这时把&nbsp;DTSExcel行内容付给&nbsp;DTSSQL表记录<br> &nbsp;&nbsp;dtsSql.Post;<br> end<br> else&nbsp;Begin<br> &nbsp;&nbsp;//&nbsp;这里直接更新&nbsp;DTSSql记录<br> end;<br> DtsExcel.Next;<br>&nbsp;&nbsp;End;&nbsp;&nbsp;<br>end;
 
以上问题导出已全部自己解决,但导入至今没办法通过,请各位帮帮心忙<br>如果用SQL来实现如下:<br>SELECT&nbsp;*&nbsp;into&nbsp;erpadm.at_from_sh_heat_chems_temp<br>FROM&nbsp;OpenDataSource(&nbsp;'Microsoft.Jet.OLEDB.4.0','Data&nbsp;Source=&quot;D:/导出/钢-电-200710550.xls&quot;;Password=ERP;Extended&nbsp;properties=Excel&nbsp;8.0')...[sheet1$]<br>则其报错没办法调试通过,也不知道是什么原因,其报错如下:<br>服务器:&nbsp;消息&nbsp;7399,级别&nbsp;16,状态&nbsp;1,行&nbsp;1<br>OLE&nbsp;DB&nbsp;提供程序&nbsp;'Microsoft.Jet.OLEDB.4.0'&nbsp;报错提供程序未给出有关错误的任何信息。<br>OLE&nbsp;DB&nbsp;错误跟踪[OLE/DB&nbsp;Provider&nbsp;'Microsoft.Jet.OLEDB.4.0'&nbsp;IDBInitialize::Initialize&nbsp;returned&nbsp;0x80004005提供程序未给出有关错误的任何信息]<br>或报如下错:<br>&quot;OLE&nbsp;DB&nbsp;提供程序&nbsp;'Microsoft.Jet.OLEDB.4.0'&nbsp;报错。<br>[OLE/DB&nbsp;provider&nbsp;returned&nbsp;message:&nbsp;找不到可安装的&nbsp;ISAM。]<br>OLE&nbsp;DB&nbsp;错误跟踪[OLE/DB&nbsp;Provider&nbsp;'Microsoft.Jet.OLEDB.4.0'&nbsp;IDBInitialize::Initialize&nbsp;returned&nbsp;0x80004005:&nbsp;&nbsp;&nbsp;]。&quot;<br>如果在DELPHI中直接实现导入,上面也有朋友写过,在我这里就是没办法运行成功.而且导入的是一个EXECL文件中有多个SHEET,只导其中几个SHEET.且导入前需要先解密EXECL才可导入.有谁懂的帮帮忙.谢谢.在线急等
 
这些代码都是现有软件的,没问题,你自己也改一下!不要老想着别人!<br>//-----------------------------------------//<br>//功能:利用EhGrid打印、导出报表。<br>//作者:zhengjp<br>//时间:2002.10.20<br>//修改:2003.01.20<br>//-----------------------------------------//<br>unit&nbsp;pFam_prnDBGridEh;<br><br>interface<br><br>uses<br>&nbsp;&nbsp;Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,&nbsp;Dialogs,<br>&nbsp;&nbsp;PrnDbgeh,DB,Variants,shellapi,&nbsp;<br>&nbsp;&nbsp;OleServer,&nbsp;Excel2000,ComOBJ,DBGridEh,&nbsp;Menus;<br><br>type<br>&nbsp;&nbsp;TDataSetNotifyEvent&nbsp;=&nbsp;procedure(DataSet:&nbsp;TDataSet)&nbsp;of&nbsp;object;<br>&nbsp;&nbsp;TFam_prnDBGridEh&nbsp;=&nbsp;class(TFrame)<br>&nbsp;&nbsp;&nbsp;&nbsp;PrnDBGrdEh:&nbsp;TPrintDBGridEh;<br>&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu_20040729print:&nbsp;TPopupMenu;<br>&nbsp;&nbsp;&nbsp;&nbsp;menuitem_20040729print:&nbsp;TMenuItem;<br>&nbsp;&nbsp;&nbsp;&nbsp;menuitem_20040729excel:&nbsp;TMenuItem;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;menuitem_20040729printClick(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;menuitem_20040729excelClick(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;FQDYRepTitl:&nbsp;String;<br>&nbsp;&nbsp;&nbsp;&nbsp;FXLApp:&nbsp;Variant;<br>&nbsp;&nbsp;&nbsp;&nbsp;FxlBook:&nbsp;Variant;<br>&nbsp;&nbsp;&nbsp;&nbsp;FOnDoExcel:TNotifyEvent;<br>&nbsp;&nbsp;&nbsp;&nbsp;FQDYPrgBar:&nbsp;String;<br>&nbsp;&nbsp;&nbsp;&nbsp;FQTitil:&nbsp;String;<br>&nbsp;&nbsp;&nbsp;&nbsp;FqAfterScroll:&nbsp;TDataSetNotifyEvent;<br>&nbsp;&nbsp;&nbsp;&nbsp;FqBeforeScroll:&nbsp;TDataSetNotifyEvent;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetQDYRepTitl(const&nbsp;Value:&nbsp;String);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetQDYPrgBar(const&nbsp;Value:&nbsp;String);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;DoDoExecl;dynamic;<br>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;Create(Owner:&nbsp;TComponent);override;<br>&nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;Destroy;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;XLApp:Variant&nbsp;read&nbsp;FXLApp&nbsp;write&nbsp;FXLApp;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;xlBook:Variant&nbsp;read&nbsp;FxlBook&nbsp;write&nbsp;FxlBook;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;QDYPrgBar:String&nbsp;read&nbsp;FQDYPrgBar&nbsp;write&nbsp;SetQDYPrgBar;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;QDYRepTitl:String&nbsp;read&nbsp;FQDYRepTitl&nbsp;write&nbsp;SetQDYRepTitl;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;QTitil:String&nbsp;read&nbsp;FQTitil&nbsp;write&nbsp;FqTitil;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;doDBGridEhPrv(DBGridEhQdy:TDBGridEh);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;doDBGridEhPrn(DBGridEhQdy:TDBGridEh);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;doHtml(DBGridEhQdy:TDBGridEh;RptTitl:string;BeferStr,afterStr:TStrings;ShowXLapp:boolean);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;DoExcel(DBGridEhQdy:TDBGridEh;RptTitl:string;BeferStr,afterStr:TStrings;ShowXLapp:boolean);<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;OnDoExcel:TNotifyEvent&nbsp;read&nbsp;FOnDoExcel&nbsp;write&nbsp;FOnDoExcel;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;QSetSubstitutes(RepTitil:String;grdtitil:String);<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;qAfterScroll:TDataSetNotifyEvent&nbsp;read&nbsp;FqAfterScroll&nbsp;write&nbsp;FqAfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;qBeforeScroll:TDataSetNotifyEvent&nbsp;read&nbsp;FqBeforeScroll&nbsp;write&nbsp;FqBeforeScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetPrvPara(frmname:string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetPrvPara(frmname:string);<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;end;<br><br>implementation<br><br>{$R&nbsp;*.dfm}<br><br>uses&nbsp;pub_Dm;<br>{&nbsp;TFam_prnDBGridEh&nbsp;}<br><br>constructor&nbsp;TFam_prnDBGridEh.Create(Owner:&nbsp;TComponent);<br>begin<br>&nbsp;&nbsp;inherited&nbsp;Create(Owner);<br>&nbsp;&nbsp;FQDYPrgBar:='';<br>&nbsp;&nbsp;FQTitil:='';<br>end;<br><br>destructor&nbsp;TFam_prnDBGridEh.Destroy;<br>begin;<br>&nbsp;&nbsp;if&nbsp;not&nbsp;VarIsEmpty(XLApp)&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XLApp.quit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XLApp:=Unassigned;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook:=Unassigned;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;inherited&nbsp;Destroy;<br>end;<br>procedure&nbsp;TFam_prnDBGridEh.DoDoExecl;<br>begin<br>&nbsp;&nbsp;if&nbsp;assigned(FOnDoExcel)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOnDoExcel(self);<br>end;<br><br>procedure&nbsp;TFam_prnDBGridEh.SetQDYPrgBar(const&nbsp;Value:&nbsp;String);<br>begin<br>&nbsp;&nbsp;FQDYPrgBar&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;DoDoExecl;<br>end;<br><br>//打印<br>procedure&nbsp;TFam_prnDBGridEh.doDBGridEhPrn(DBGridEhQdy:&nbsp;TDBGridEh);<br>begin<br>&nbsp;&nbsp;if&nbsp;not&nbsp;dm.q18pw_prv&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showmessage('对不起!你没有打印权力');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;screen.Cursor&nbsp;:=crHourGlass&nbsp;;<br>&nbsp;&nbsp;with&nbsp;PrnDBGrdEh&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;DBGridEhQdy&lt;&gt;nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh&nbsp;:=DBGridEhQdy;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FqAfterScroll:=DBGridEh.DataSource.DataSet.AfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.AfterScroll:=nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FqBeforeScroll:=DBGridEh.DataSource.DataSet.BeforeScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.BeforeScroll:=nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.AfterScroll:=FqAfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.BeforeScroll:=FqBeforeScroll;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;screen.Cursor&nbsp;:=crDefault&nbsp;;<br>end;<br><br>//打印预览<br>procedure&nbsp;TFam_prnDBGridEh.doDBGridEhPrv(DBGridEhQdy:&nbsp;TDBGridEh);<br>begin<br>&nbsp;&nbsp;if&nbsp;not&nbsp;dm.q18pw_prv&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showmessage('对不起!你没有打印权力');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;screen.Cursor&nbsp;:=crHourGlass&nbsp;;<br>&nbsp;&nbsp;with&nbsp;PrnDBGrdEh&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;DBGridEhQdy&lt;&gt;nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh&nbsp;:=DBGridEhQdy;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FqAfterScroll:=DBGridEh.DataSource.DataSet.AfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.AfterScroll:=nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FqBeforeScroll:=DBGridEh.DataSource.DataSet.BeforeScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.BeforeScroll:=nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Preview&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.AfterScroll:=FqAfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBGridEh.DataSource.DataSet.BeforeScroll:=FqBeforeScroll;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;screen.Cursor&nbsp;:=crDefault&nbsp;;<br>end;<br><br>//导入EXCEL.&nbsp;BeferStr&nbsp;从1行开始,而不是从0行开始<br>procedure&nbsp;TFam_prnDBGridEh.DoExcel(DBGridEhQdy:&nbsp;TDBGridEh;&nbsp;RptTitl:&nbsp;string;<br>&nbsp;&nbsp;BeferStr,&nbsp;afterStr:&nbsp;TStrings;&nbsp;ShowXLapp:&nbsp;boolean);<br>var<br>&nbsp;&nbsp;&nbsp;MaxTitCount,i,j,k,Cnt,y,jj:integer;<br>&nbsp;&nbsp;&nbsp;Titl,CelVale:string;<br>&nbsp;&nbsp;&nbsp;cValue,oldValue:String;<br>&nbsp;&nbsp;&nbsp;saveBK:TBookmark;&nbsp;&nbsp;{&nbsp;Save&nbsp;current&nbsp;record&nbsp;position&nbsp;}<br>begin<br>&nbsp;&nbsp;if&nbsp;not&nbsp;dm.q18pw_exp&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showmessage('对不起!你没有导出权力');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;with&nbsp;DBGridEhQdy&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FqAfterScroll:=DataSource.DataSet.AfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.AfterScroll:=nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FqBeforeScroll:=DataSource.DataSet.BeforeScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.BeforeScroll:=nil;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;VarIsEmpty(XLApp)&nbsp;then<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XLApp.quit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XLApp:=Unassigned;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook:=Unassigned;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;Screen.Cursor&nbsp;:=crHourGlass&nbsp;;<br>&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在打开&nbsp;Excel&nbsp;&nbsp;...';<br>&nbsp;&nbsp;&nbsp;XLApp:=CreateOleObject('Excel.application');<br>&nbsp;&nbsp;&nbsp;if&nbsp;VarIsEmpty(XLApp)&nbsp;then<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showmessage('没有安装&nbsp;Excel&nbsp;电子表格,不能导入!');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abort;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在建立工作表...';<br>&nbsp;&nbsp;&nbsp;XLApp.workbooks.add(xlWBatWorkSheet);<br>&nbsp;&nbsp;&nbsp;XLApp.workbooks[1].workSheets[1].name:='qdy';<br>&nbsp;&nbsp;&nbsp;xlBook:=XLApp.workbooks[1].workSheets['qdy'];<br><br>&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在处理表头...';<br>&nbsp;&nbsp;&nbsp;//表头处理<br>&nbsp;&nbsp;&nbsp;oldValue:='';<br>&nbsp;&nbsp;&nbsp;MaxTitCount:=0;<br>&nbsp;&nbsp;&nbsp;with&nbsp;DBGridEhqdy&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;Columns.Count&nbsp;-1&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Titl:=Columns.Title.Caption+'|';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;K:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;Pos('|',&nbsp;Titl)&nbsp;&gt;&nbsp;0&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cValue:=copy(Titl,j+1,Pos('|',&nbsp;Titl)-1-j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j:=Pos('|',&nbsp;Titl);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Titl[Pos('|',&nbsp;Titl)]:='/';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[k,i+1]:=cValue&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k:=k+1;<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;&nbsp;&nbsp;if&nbsp;k&gt;MaxTitCount&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxTitCount:=k-1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//纵向合并<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在处理表头...纵向合并';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=1&nbsp;to&nbsp;Columns.Count&nbsp;&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldValue:=xlBook.Cells[1,i]&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k:=2&nbsp;to&nbsp;MaxTitCount&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cValue:=xlBook.Cells[k,i]&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(oldValue&nbsp;=&nbsp;cValue)&nbsp;or&nbsp;(cValue='')&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[k,i]:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[k-1,i],xlBook.Cells[k,i]].Merge&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldValue:=cValue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;MaxTitCount&lt;2&nbsp;then&nbsp;MaxTitCount:=2;//2003.01.20&nbsp;qdy<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//横合并<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在处理表头...横向合并';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k:=1&nbsp;to&nbsp;MaxTitCount&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Rows[inttostr(k)+':1'].HorizontalAlignment&nbsp;:=&nbsp;xlCenter&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Rows[inttostr(k)+':1'].VerticalAlignment&nbsp;:=&nbsp;xlCenter&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldValue:=xlBook.Cells[k,1]&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=2&nbsp;to&nbsp;Columns.Count&nbsp;&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cValue:=xlBook.Cells[k,i]&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(oldValue&nbsp;=&nbsp;cValue)&nbsp;and&nbsp;(cValue&lt;&gt;'')&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[k,i]:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[k,i-1],xlBook.Cells[k,i]].Merge&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oldValue:=cValue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据部分处理<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cnt:=Columns.Count;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Cnt&lt;2&nbsp;then&nbsp;Cnt:=2&nbsp;;//2003.01.20要至少导入2列<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;DataSource.DataSet&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveBK&nbsp;:=&nbsp;GetBookmark;&nbsp;&nbsp;{&nbsp;Save&nbsp;current&nbsp;record&nbsp;position&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisableControls;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{2004-03-03&nbsp;qdy}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;Columns.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;columns.Visible&nbsp;then<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;&nbsp;&nbsp;if&nbsp;Columns.Field.DataType&nbsp;in&nbsp;[ftInteger]&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[MaxTitCount+1,i+1],xlBook.Cells[RecordCount+8,i+1]].NumberFormatLocal:=&nbsp;'0'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Columns.Field.DataType&nbsp;in&nbsp;[ftUnknown,ftString]&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[MaxTitCount+1,i+1],xlBook.Cells[RecordCount+8,i+1]].NumberFormatLocal:=&nbsp;'@'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Columns.Field.DataType&nbsp;in&nbsp;[ftCurrency,ftFloat,ftBCD]&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[MaxTitCount+1,i+1],xlBook.Cells[RecordCount+8,i+1]].HorizontalAlignment&nbsp;:=&nbsp;xlRight&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[MaxTitCount+1,i+1],xlBook.Cells[RecordCount+8,i+1]].VerticalAlignment&nbsp;:=&nbsp;xlCenter&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[MaxTitCount+1,i+1],xlBook.Cells[RecordCount+8,i+1]].NumberFormatLocal&nbsp;:=&nbsp;'¥#,##0.00;¥-#,##0.00';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;eof&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;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;Columns.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;columns.Visible&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CelVale:=Columns.DisplayText;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;uppercase(celVale)&nbsp;=&nbsp;'FALSE'&nbsp;then&nbsp;celVale:='否';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;uppercase(celVale)&nbsp;=&nbsp;'TRUE'&nbsp;then&nbsp;celVale:='是';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[y+MaxTitCount,i+1]:=celVale;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='数据导入...'+inttostr(RecNo-RecordCount);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y:=Y+1;<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;&nbsp;&nbsp;GotoBookmark(saveBK);&nbsp;&nbsp;{&nbsp;Restore&nbsp;original&nbsp;record&nbsp;position}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Freebookmark(saveBK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnableControls;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//2004-02-04&nbsp;qdy&nbsp;加合计<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jj:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(DBGridEhQdy.FooterRowCount&nbsp;&gt;0)&nbsp;and&nbsp;(DBGridEhQdy.SumList.SumCollection.Count&gt;0)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;DBGridEhQdy.Columns.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;DBGridEhQdy.Columns.Footer.ValueType&nbsp;=&nbsp;fvtStaticText&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[y+1+MaxTitCount,i+1]:=DBGridEhQdy.Columns.Footer.value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jj:=jj+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;trim(DBGridEhQdy.Columns.Footer.FieldName)&nbsp;&lt;&gt;''&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[y+1+MaxTitCount,i+1]:=DBGridEhQdy.SumList.SumCollection.Items[jj].SumValue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jj:=jj+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y:=Y+1;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在制表...';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//制表<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k:=y+MaxTitCount;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlDiagonalDown].LineStyle&nbsp;:=&nbsp;xlNone;//.select;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlDiagonalUp].LineStyle&nbsp;:=&nbsp;xlNone;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlEdgeLeft].LineStyle&nbsp;:=&nbsp;xlContinuous;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlEdgeTop].LineStyle&nbsp;:=&nbsp;xlContinuous;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlEdgeBottom].LineStyle&nbsp;:=&nbsp;xlContinuous;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlEdgeRight].LineStyle&nbsp;:=&nbsp;xlContinuous;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlInsideVertical].LineStyle&nbsp;:=&nbsp;xlContinuous;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Borders[xlInsideHorizontal].LineStyle&nbsp;:=&nbsp;xlContinuous;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Rows.AutoFit&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[k-2,Cnt]].Columns.AutoFit;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表未<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;afterstr&lt;&gt;nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;afterstr.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[k+i+1,1].EntireRow.Insert;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[k+i+1,1],xlBook.Cells[k+i+1,cnt]].Merge&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[k+i+1,1]:=afterstr.Strings;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表头<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='请稍候,正在制表...表头';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;BeferStr&lt;&gt;nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=1&nbsp;to&nbsp;BeferStr.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[1,1].EntireRow.Insert;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[1,cnt]].Merge&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[1,1]:=beferstr.Strings;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表头标题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[1,1].EntireRow.Insert;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Rows['1:1'].HorizontalAlignment&nbsp;:=&nbsp;xlCenter&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Rows['1:1'].VerticalAlignment&nbsp;:=&nbsp;xlCenter&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[1,cnt]].Merge&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Cells[1,1]:=RptTitl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[1,cnt]].Font.Name:='宋体';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[1,cnt]].Font.FontStyle&nbsp;:='加粗';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xlBook.Range[xlBook.Cells[1,1],xlBook.Cells[1,cnt]].Font.Size&nbsp;:=18;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Screen.Cursor&nbsp;:=crDefault&nbsp;;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XLApp.Visible&nbsp;:=ShowXLapp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;DBGridEhQdy&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.AfterScroll:=FqAfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.BeforeScroll:=FqBeforeScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>end;<br><br>procedure&nbsp;TFam_prnDBGridEh.SetQDYRepTitl(const&nbsp;Value:&nbsp;String);<br>begin<br>&nbsp;&nbsp;FQDYRepTitl&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;QSetSubstitutes(FQDYRepTitl,FQTitil);<br>end;<br><br>procedure&nbsp;TFam_prnDBGridEh.QSetSubstitutes(RepTitil:&nbsp;String;grdtitil:String);<br>begin<br>&nbsp;&nbsp;with&nbsp;&nbsp;PrnDBGrdEh&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;&nbsp;PageHeader&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LeftText.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LeftText.Add(DM.QDYCompany);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CenterText.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CenterText.Add(FQDYRepTitl);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RightText.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RightText.Add('&amp;[LongDate]');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;PageFooter&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RightText.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RightText.Add('第&amp;[page]页&nbsp;共&amp;[Pages]页');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LeftText.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LeftText.Add('志华软件');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AfterGridText.Clear&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AfterGridText.Add('&amp;[LongDate]');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetSubstitutes(['%[qdate]',grdtitil,'%[QDYRepTitl]',RepTitil]);<br>&nbsp;&nbsp;end;<br>end;<br><br>{----------------------------------------------------------------------------<br>功能说明:&nbsp;把DBGridEh中的数据到出成为html文件<br>参数说明:DBGridEhQdy:数据所在的网格<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RptTitl:&nbsp;报表题头,在这里没有用,为了和其他保持一致<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeferStr,&nbsp;afterStr:传送文件的表头和表末文字<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowXLapp:是否显示,在这里没有,为了和其他保持一致<br>返回值的说明:(无)<br>Bug的List以及修补的日期、时间、人称、说明:<br>其他注释:<br>----------------------------------------------------------------------------}<br><br>procedure&nbsp;TFam_prnDBGridEh.doHtml(DBGridEhQdy:TDBGridEh;RptTitl:string;BeferStr,afterStr:TStrings;ShowXLapp:boolean);<br>var<br>&nbsp;&nbsp;&nbsp;i,j,k:integer;<br>&nbsp;&nbsp;&nbsp;CValue,OldValue,SValue:string;<br>&nbsp;&nbsp;&nbsp;SaveBK:TBookmark;&nbsp;&nbsp;{&nbsp;Save&nbsp;current&nbsp;record&nbsp;position&nbsp;}<br>&nbsp;&nbsp;&nbsp;Titl:string;<br>&nbsp;&nbsp;&nbsp;SaveFileName:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;TableContent:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;CommonRol:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;StyleRol:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;FormatString:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;ContentString:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;SumString:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;FooterCursor:&nbsp;integer;<br>&nbsp;&nbsp;&nbsp;FileHandle:&nbsp;integer;<br>&nbsp;&nbsp;&nbsp;StringLen:&nbsp;integer;<br>begin<br>&nbsp;&nbsp;with&nbsp;DBGridEhQdy&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;FqAfterScroll:=DataSource.DataSet.AfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.AfterScroll:=nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;FqBeforeScroll:=DataSource.DataSet.BeforeScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.BeforeScroll:=nil;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;QDYPrgBar:='请稍候,请选择保存为文件&nbsp;...';<br>&nbsp;&nbsp;//SaveHtmlDlg.Title:='请选择保存为';<br>&nbsp;&nbsp;//if&nbsp;SaveHtmlDlg.Execute&nbsp;then<br>&nbsp;&nbsp;//&nbsp;&nbsp;SaveFileName:=SaveHtmlDlg.FileName<br>&nbsp;&nbsp;//else<br>&nbsp;&nbsp;//&nbsp;&nbsp;abort;<br>&nbsp;&nbsp;SaveFileName:='./export.html';<br>&nbsp;&nbsp;FileHandle:=FileCreate(SaveFileName);<br>&nbsp;&nbsp;if&nbsp;FileHandle=-1&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;showmessage('不能创建文件,请重试');<br>&nbsp;&nbsp;&nbsp;&nbsp;abort;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TableContent:='&lt;html&gt;&lt;head&gt;&lt;meta&nbsp;http-equiv=&quot;Content-Type&quot;&nbsp;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'content=&quot;text/html;charset=windows-936&quot;&gt;&lt;title&gt;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RptTitl+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/title&gt;&lt;/head&gt;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;SCRIPT&nbsp;language=JavaScript&gt;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'var&nbsp;msge&nbsp;=&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RptTitl+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'var&nbsp;pos&nbsp;=&nbsp;0;'+<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'function&nbsp;Scrollit(){'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'window.status&nbsp;=&nbsp;msge.substring(pos,msge.length)&nbsp;+&nbsp;msge.substring(0,pos);'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'pos++;'+<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'if(pos&nbsp;==&nbsp;msge.length&nbsp;+&nbsp;5)&nbsp;pos&nbsp;=&nbsp;0;'+<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'window.setTimeout(&quot;Scrollit()&quot;,180);'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'}'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/SCRIPT&gt;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;SCRIPT&nbsp;language=JavaScript&gt;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Scrollit();'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;/SCRIPT&gt;'+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;body&gt;';<br>&nbsp;&nbsp;QDYPrgBar:='请稍候,正在处理...';<br>&nbsp;&nbsp;//标题处理<br>&nbsp;&nbsp;TableContent:=TableContent+'&lt;p&nbsp;align=&quot;center&quot;&gt;&lt;font&nbsp;size=5&gt;'+RptTitl+'&lt;/font&gt;&lt;/p&gt;';<br>&nbsp;&nbsp;TableContent:=TableContent+'&lt;p&nbsp;align=&quot;left&quot;&gt;';<br>&nbsp;&nbsp;if&nbsp;BeferStr&lt;&gt;nil&nbsp;then<br>&nbsp;&nbsp;for&nbsp;i:=2&nbsp;to&nbsp;BeferStr.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+Beferstr.Strings+'&lt;br&gt;';<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TableContent:=TableContent+'&lt;/p&gt;';<br>&nbsp;&nbsp;TableContent:=TableContent+'&lt;table&nbsp;align=&quot;center&quot;&nbsp;border=&quot;1&quot;&nbsp;cellspacing=&quot;0&quot;&nbsp;cellpadding=&quot;0&quot;&gt;';<br>&nbsp;&nbsp;with&nbsp;DBGridEhqdy&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;tr&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;OldValue:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;Columns.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Titl:=Columns.Title.Caption+'|';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormatString:='bgcolor=&quot;#00FFFF&quot;&nbsp;align=&quot;center&quot;&nbsp;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Pos('|',Columns.Title.Caption)&gt;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CValue:=copy(Titl,j+1,Pos('|',&nbsp;Titl)-1-j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j:=Pos('|',&nbsp;Columns.Title.Caption&nbsp;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SValue:=copy(Titl,j+1,length(Titl)-1-j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(OldValue&nbsp;=&nbsp;'')&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldValue:=CValue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StyleRol:='&lt;td&nbsp;'+formatString+'&gt;'+SValue+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(OldValue&nbsp;=&nbsp;CValue)&nbsp;then<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;StyleRol:=StyleRol+'&lt;td&nbsp;'+FormatString+'&gt;'+SValue+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k:=k+1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;'+FormatString+'&nbsp;colspan='+inttostr(k)+'&gt;'+OldValue+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldValue:=CValue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StyleRol:=StyleRol+'&lt;td&nbsp;&nbsp;'+FormatString+'&gt;'+SValue+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k:=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;OldValue&lt;&gt;''&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;&nbsp;'+FormatString+'&nbsp;colspan='+inttostr(k)+'&gt;'+OldValue+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldValue:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;&nbsp;'+FormatString+'&nbsp;rowspan=2&nbsp;&gt;'+Columns.Title.Caption+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;OldValue&lt;&gt;''&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;&nbsp;'+FormatString+'&nbsp;colspan='+inttostr(k)+'&gt;'+OldValue+'&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldValue:='';<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;/tr&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;tr&gt;'+StyleRol+'&lt;/tr&gt;';<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;//导出表格内容<br>&nbsp;&nbsp;with&nbsp;DBGridEhqdy&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;DataSource.DataSet&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not(Eof&nbsp;and&nbsp;Bof)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveBK&nbsp;:=&nbsp;GetBookmark;&nbsp;&nbsp;{&nbsp;Save&nbsp;current&nbsp;record&nbsp;position&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisableControls;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First;<br>&nbsp;&nbsp;&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;TableContent:=TableContent+'&lt;tr&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;Columns.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;columns.Visible&nbsp;then<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;Columns.DisplayText=''&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentString:='&amp;nbsp;'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentString:=Columns.DisplayText;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;uppercase(ContentString)&nbsp;=&nbsp;'FALSE'&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentString:='否';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;uppercase(ContentString)&nbsp;=&nbsp;'TRUE'&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ContentString:='是';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;width=&quot;'+inttostr(Columns.Width+20)+'&quot;nowrap&nbsp;align=&quot;center&quot;&gt;&lt;font&nbsp;size=&quot;2&quot;&gt;&amp;nbsp;'+ContentString+'&amp;nbsp;&lt;/font&gt;&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QDYPrgBar:='数据导出中...';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;/tr&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GotoBookmark(saveBK);&nbsp;&nbsp;{&nbsp;Restore&nbsp;original&nbsp;record&nbsp;position}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Freebookmark(saveBK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnableControls;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;//表末处理<br>&nbsp;&nbsp;with&nbsp;DBGridEhqdy&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;FooterRowCount=1&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;tr&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FooterCursor:=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;Columns.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Columns.Footer.ValueType=fvtStaticText&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;nowrap&nbsp;align=&quot;center&quot;&gt;&lt;font&nbsp;size=&quot;2&quot;&gt;'+Columns.Footer.Value+'&lt;/font&gt;&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(Columns.Footer.ValueType=fvtSum)&nbsp;and&nbsp;(sumlist.SumCollection.Items[footerCursor].FieldName=Columns.FieldName)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SumString:=floattostr(sumlist.SumCollection.Items[footerCursor].SumValue);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&nbsp;nowrap&nbsp;align=&quot;center&quot;&gt;&lt;font&nbsp;size=&quot;2&quot;&gt;'+SumString+'&lt;/font&gt;&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Inc(FooterCursor);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;td&gt;&amp;nbsp;&lt;/td&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;/tr&gt;';<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TableContent:=TableContent+'&lt;/table&gt;';<br>&nbsp;&nbsp;if&nbsp;AfterStr&lt;&gt;nil&nbsp;then<br>&nbsp;&nbsp;for&nbsp;i:=0&nbsp;to&nbsp;AfterStr.Count&nbsp;-1&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;TableContent:=TableContent+'&lt;p&nbsp;align=&quot;left&quot;&gt;'+afterstr.Strings+'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;';<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;TableContent:=TableContent+'&lt;/body&gt;&lt;/html&gt;';<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;FileWrite(FileHandle,TableContent[1],&nbsp;length(TableContent));<br>&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;FileClose(FileHandle);<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;with&nbsp;DBGridEhQdy&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.AfterScroll:=FqAfterScroll;<br>&nbsp;&nbsp;&nbsp;&nbsp;DataSource.DataSet.BeforeScroll:=FqBeforeScroll;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;ShellExecute(Handle,'open','./export.html',nil,nil,&nbsp;SW_SHOWNORMAL);<br>end;<br><br><br><br>procedure&nbsp;TFam_prnDBGridEh.GetPrvPara(frmname:&nbsp;string);<br>begin<br>&nbsp;&nbsp;with&nbsp;PrnDBGrdEh&nbsp;&nbsp;&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dm.ReadIniFileBool(frmname,'e1',true)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;+&nbsp;[pghFitGridToPageWidth]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;-&nbsp;[pghFitGridToPageWidth];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dm.ReadIniFileBool(frmname,'e2',true)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;+&nbsp;[pghRowAutoStretch]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;-&nbsp;[pghRowAutoStretch];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dm.ReadIniFileBool(frmname,'e3',true)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;+&nbsp;[pghColored]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;-&nbsp;[pghColored];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dm.ReadIniFileBool(frmname,'e5',false)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;+&nbsp;[pghOptimalColWidths]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;-&nbsp;[pghOptimalColWidths];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dm.ReadIniFileBool(frmname,'e6',false)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;+&nbsp;[pghFitingByColWidths]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;Options&nbsp;:=&nbsp;Options&nbsp;-&nbsp;[pghFitingByColWidths];<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page.TopMargin:=StrToFloat(dm.ReadIniFileString(frmname,'s1','2'));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page.BottomMargin:=StrToFloat(dm.ReadIniFileString(frmname,'s2','2'));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page.LeftMargin:=StrToFloat(dm.ReadIniFileString(frmname,'s3','2'));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Page.RightMargin:=StrToFloat(dm.ReadIniFileString(frmname,'s4','2'));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintFontName:=dm.ReadIniFileString(frmname,'s5','');<br>&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TFam_prnDBGridEh.SetPrvPara(frmname:&nbsp;string);<br>begin<br>&nbsp;&nbsp;with&nbsp;PrnDBGrdEh&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileBool(frmname,'e1',pghFitGridToPageWidth&nbsp;in&nbsp;Options);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileBool(frmname,'e2',pghRowAutoStretch&nbsp;in&nbsp;Options);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileBool(frmname,'e3',pghColored&nbsp;in&nbsp;Options);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileBool(frmname,'e5',pghOptimalColWidths&nbsp;in&nbsp;Options);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileBool(frmname,'e6',pghFitingByColWidths&nbsp;in&nbsp;Options);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileString(frmname,'s1',FloatToStr(Page.TopMargin));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileString(frmname,'s2',FloatToStr(Page.BottomMargin));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileString(frmname,'s3',FloatToStr(Page.LeftMargin));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileString(frmname,'s4',FloatToStr(Page.RightMargin));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dm.WriteIniFileString(frmname,'s5',PrintFontName);<br>&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;TFam_prnDBGridEh.menuitem_20040729printClick(Sender:&nbsp;TObject);<br>begin<br>&nbsp;&nbsp;doDBGridEhPrv(PrnDBGrdEh.DBGridEh);&nbsp;&nbsp;<br>end;<br><br>procedure&nbsp;TFam_prnDBGridEh.menuitem_20040729excelClick(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;bs:TStringList;<br>begin<br>&nbsp;&nbsp;inherited;<br>&nbsp;&nbsp;bs:=TStringList.Create&nbsp;;<br>&nbsp;&nbsp;bs.Add('');<br>&nbsp;&nbsp;bs.Add(QTitil);<br>&nbsp;&nbsp;DoExcel(PrnDBGrdEh.DBGridEh,QDYRepTitl,bs,nil,true);<br>&nbsp;&nbsp;bs.Free&nbsp;;<br>end;<br><br>end.
 
研究了好久<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966<br>还是存在密码和远程服务器访问的问题,<br>在本地数据库,且导没有加密码的EXECL到SQL是没问题,在查询分析器中,自己写了一个如下<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>declare&nbsp;@execl_name&nbsp;varchar(200),--本地客户机上的EXECL文件名及路径<br>&nbsp;&nbsp;&nbsp;@sql_heat&nbsp;varchar(1000),@sql_steel&nbsp;varchar(1000)<br>set&nbsp;@sql_heat='&nbsp;insert&nbsp;into&nbsp;&nbsp;erpadm.at_from_sh_heat_chems(element,heat_no,result)&nbsp;&nbsp;SELECT&nbsp;*&nbsp;&nbsp;'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+'&nbsp;FROM&nbsp;OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data&nbsp;Source=&quot;'+@execl_name<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+'&quot;;Extended&nbsp;properties=Excel&nbsp;5.0;&nbsp;Persist&nbsp;Security&nbsp;Info=False'')...[炉号$]&nbsp;'<br>exec&nbsp;(@sql_heat)<br>以上在本地和EXECL不用解密的情况下,执行没问题,放到DELPHI中执行就没反应,给EXECL加上密码则查询分析器也不能行动成功.不知道何原因,请指教
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部