作者: nansha 标题: 用Delphi将数据导入到Excel并控制Excel 关键字: 办公系统,数据导入,控制 分类: 开发经验 密级: 公开 (评分: , 回复: 3, 阅读: 2252) ?? 在日常办公中,用得最多的是Word和Excel,而Excel对数据报表的处理尤为方便(操作公式、打印格式等),如果我们将数据导入到Excel中后,再靠我们平时对Excel熟练的操作很快编辑好我们有用的数据(如领导报表等),通过对Excel的控制,我们可以自动编缉好我们想要的格式和外观。 一、调用Excel的方法:一般情况下有两种方法调用Excel: 1、 直接使用Delphi自带的组件:在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。 2、动态创建Excel文件:首先创建 Excel 对象,使用ComObj,Excel2000: var ExcelApp: Variant; ExcelApp := CreateOleObject( 'Excel.Application' ); 二、导入数据:在程序中,我们可以将查询到的数据(SQL、Access、)导入到Excel中。例如:用Adoquery查询Access中的数据: 1、先查到所需的数据; 2、导入:i:=1; Adoquery.First; while not Adoquery.Eof do Begin ExcelApp.WorkSheets[1].Cells[i,1].Value := i;//添加序号的值 ExcelApp.WorkSheets[1].Cells[i,2].Value := Adoquery.FieldByName('cp_name').AsString; …… Inc(i); Adoquery.Next; End; 当然也可以把Adotable、Adoquery、Table、Query等组件的数据导入到Excel中。 三、Excel的处理:如果在你已知Excel格式的情况下,可以控制Excel,如下: 1、 显示当前窗口:ExcelApp.Visible := True; 2、 更改 Excel 标题栏:ExcelApp.Caption := '标题内容'; 3、 添加新工作簿:ExcelApp.WorkBooks.Add; 4、 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate; 5、 给单元格赋值:ExcelApp.Cells[1,1].Value := '第一行第一列'; 6、 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5; 7、 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米 8、文字水平居中:Excelid.worksheets[1].Rows[1].HorizontalAlignment := $FFFFEFF4; 文字垂直居中:Excelid.worksheets[1].Rows[1].VerticalAlignment := $FFFFEFF4; 9、 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert; b. ExcelApp.ActiveSheet.Columns[1].Insert; 10、 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete; b. ExcelApp.ActiveSheet.Columns[1].Delete; 11、合并单元格:ExcelApp.worksheets[1].range[A1:F8'].Merge(abc);注:要声明变量abc: Variant; 12、竖行显示文字:ExcelApp.worksheets[1].Cells.Item[1,1].Orientation:= xlVertical; 13、单元格加边线:ExcelApp.worksheets[1].Range[A1:F8].Borders.LineStyle := 1; 14、在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1; 15、在第4列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0; 16、指定边框线宽度:ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3; 1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / ) 17、拷贝操作:a.拷贝整个工作表:ExcelApplication1.ActiveSheet.Used.Range.Copy; b.拷贝指定区域:ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy; c.从A1位置开始粘贴:ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial; d.从文件尾部开始粘贴:ExcelApplication1.ActiveSheet.Range.PasteSpecial; 18、清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents; 19、工作表保存:if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveSheet.PrintPreview; 20、工作表另存为:ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' ); 21、放弃存盘:ExcelApp.ActiveWorkBook.Saved := True; 22、关闭工作簿:ExcelApp.WorkBooks.Close; 23、退出 Excel:ExcelApp.Quit; 下面是有关打印页面控制的语句: 24、设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书'; ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue; ExcelApp.ActiveSheet.Rows[1].Font.Bold := True; ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True; ExcelApp.ActiveSheet.Rows[1].Font.size:=10; 25、进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示'; b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '共&N页 第&P页'; c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035; d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035; e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035; f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035; g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035; h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035; i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035; j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035; k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True; 26、打印预览工作表:ExcelApp.ActiveSheet.PrintPreview; 27、打印输出工作表:ExcelApp.ActiveSheet.PrintOut; 对Excel的其他控制: 28、excel的多单元格合计功能:ExcelApp..Cells[ARow, ACol].Formula := '= SUM($+IntToStr(BeginRow) +:$ + IntToStr(EndRow) +'); 注:声明变量ARow, ACol: Integer; 29、打开已经存在的Excel文件: ExcelApplication1.Workbooks.Open (c:\a.xls EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); 在实际当中还有很多的控制分类,如(Excle二维图等,这里不讲了),这里是一些常用的分类,在这希望同行们没给于指正、补充! 注:在数据倒入Excel时不要边倒入边修改,这样会使倒入到Excel的时间加长,一般最好是在倒入完数据后再调Excel的格式(例如页边距、单元个属性、文字属性)。 我有一个例子,源程序可到http://www.playicq.com/dispdocnew.php?id=12946去下载。 Delphi操作Excel大全http://www.diybl.com/ 2008-5-13 网络 点击: [ 评论 ] 文章搜索: 【点击打包该文章】 DELPHI操作excel(转) (一) 使用动态创建的方法 首先创建 Excel 对象,使用ComObj: var ExcelApp: Variant; ExcelApp := CreateOleObject( ''Excel.Application'' ); 1) 显示当前窗口: ExcelApp.Visible := True; 2) 更改 Excel 标题栏: ExcelApp.Caption := ''应用程序调用 Microsoft Excel''; 3) 添加新工作簿: ExcelApp.WorkBooks.Add; 4) 打开已存在的工作簿: ExcelApp.WorkBooks.Open( ''C:\Excel\Demo.xls'' ); 5) 设置第2个工作表为活动工作表: ExcelApp.WorkSheets[2].Activate; 或 ExcelApp.WorksSheets[ ''Sheet2'' ].Activate; 6) 给单元格赋值: ExcelApp.Cells[1,4].Value := ''第一行第四列''; 7) 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5; 8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米 9) 在第8行之前插入分页符: ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1; 10) 在第8列之前删除分页符: ExcelApp.ActiveSheet.Columns[4].PageBreak := 0; 11) 指定边框线宽度: ExcelApp.ActiveSheet.Range[ ''B3:D4'' ].Borders[2].Weight := 3; 1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / ) 12) 清除第一行第四列单元格公式: ExcelApp.ActiveSheet.Cells[1,4].ClearContents; 13) 设置第一行字体属性: ExcelApp.ActiveSheet.Rows[1].Font.Name := ''隶书''; ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue; ExcelApp.ActiveSheet.Rows[1].Font.Bold := True; ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True; 14) 进行页面设置: a.页眉: ExcelApp.ActiveSheet.PageSetup.CenterHeader := ''报表演示''; b.页脚: ExcelApp.ActiveSheet.PageSetup.CenterFooter := ''第&P页''; c.页眉到顶端边距2cm: ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035; d.页脚到底端边距3cm: ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035; e.顶边距2cm: ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035; f.底边距2cm: ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035; g.左边距2cm: ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035; h.右边距2cm: ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035; i.页面水平居中: ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035; j.页面垂直居中: ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035; k.打印单元格网线: ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True; 15) 拷贝操作: a.拷贝整个工作表: ExcelApp.ActiveSheet.Used.Range.Copy; b.拷贝指定区域: ExcelApp.ActiveSheet.Range[ ''A1:E2'' ].Copy; c.从A1位置开始粘贴: ExcelApp.ActiveSheet.Range.[ ''A1'' ].PasteSpecial; d.从文件尾部开始粘贴: ExcelApp.ActiveSheet.Range.PasteSpecial; 16) 插入一行或一列: a. ExcelApp.ActiveSheet.Rows[2].Insert; b. ExcelApp.ActiveSheet.Columns[1].Insert; 17) 删除一行或一列: a. ExcelApp.ActiveSheet.Rows[2].Delete; b. ExcelApp.ActiveSheet.Columns[1].Delete; 18) 打印预览工作表: ExcelApp.ActiveSheet.PrintPreview; 19) 打印输出工作表: ExcelApp.ActiveSheet.PrintOut; 20) 工作表保存: if not ExcelApp.ActiveWorkBook.Saved then ExcelApp.ActiveSheet.PrintPreview; 21) 工作表另存为: ExcelApp.SaveAs( ''C:\Excel\Demo1.xls'' ); 22) 放弃存盘: ExcelApp.ActiveWorkBook.Saved := True; 23) 关闭工作簿: ExcelApp.WorkBooks.Close; 24) 退出 Excel: ExcelApp.Quit; (二) 使用Delphi 控件方法 在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。 1) 打开Excel ExcelApplication1.Connect; 2) 显示当前窗口: ExcelApplication1.Visible[0]:=True; 3) 更改 Excel 标题栏: ExcelApplication1.Caption := ''应用程序调用 Microsoft Excel''; 4) 添加新工作簿: ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0)); 5) 添加新工作表: var Temp_Worksheet: _WorkSheet; begin Temp_Worksheet:=ExcelWorkbook1. WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet; ExcelWorkSheet1.ConnectTo(Temp_WorkSheet); End; 6) 打开已存在的工作簿: ExcelApplication1.Workbooks.Open (c:\a.xls EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) 7) 设置第2个工作表为活动工作表: ExcelApplication1.WorkSheets[2].Activate; 或 ExcelApplication1.WorksSheets[ ''Sheet2'' ].Activate; 8) 给单元格赋值: ExcelApplication1.Cells[1,4].Value := ''第一行第四列''; 9) 设置指定列的宽度(单位:字符个数),以第一列为例: ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5; 10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例: ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米 11) 在第8行之前插入分页符: ExcelApplication1.WorkSheets[1].Rows[8].PageBreak := 1; 12) 在第8列之前删除分页符: ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0; 13) 指定边框线宽度: ExcelApplication1.ActiveSheet.Range[ ''B3:D4'' ].Borders[2].Weight := 3; 1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / ) 14) 清除第一行第四列单元格公式: ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents; 15) 设置第一行字体属性: ExcelApplication1.ActiveSheet.Rows[1].Font.Name := ''隶书''; ExcelApplication1.ActiveSheet.Rows[1].Font.Color := clBlue; ExcelApplication1.ActiveSheet.Rows[1].Font.Bold := True; ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True; 16) 进行页面设置: a.页眉: ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := ''报表演示''; b.页脚: ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := ''第&P页''; c.页眉到顶端边距2cm: ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035; d.页脚到底端边距3cm: ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035; e.顶边距2cm: ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035; f.底边距2cm: ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035; g.左边距2cm: ExcelAppli cation1.ActiveSheet.PageSetup.LeftMargin := 2/0.035; h.右边距2cm: ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035; i.页面水平居中: ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035; j.页面垂直居中: ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035; k.打印单元格网线: ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True; 17) 拷贝操作: a.拷贝整个工作表: ExcelApplication1.ActiveSheet.Used.Range.Copy; b.拷贝指定区域: ExcelApplication1.ActiveSheet.Range[ ''A1:E2'' ].Copy; c.从A1位置开始粘贴: ExcelApplication1.ActiveSheet.Range.[ ''A1'' ].PasteSpecial; d.从文件尾部开始粘贴: ExcelApplication1.ActiveSheet.Range.PasteSpecial; 18) 插入一行或一列: a. ExcelApplication1.ActiveSheet.Rows[2].Insert; b. ExcelApplication1.ActiveSheet.Columns[1].Insert; 19) 删除一行或一列: a. ExcelApplication1.ActiveSheet.Rows[2].Delete; b. ExcelApplication1.ActiveSheet.Columns[1].Delete; 20) 打印预览工作表: ExcelApplication1.ActiveSheet.PrintPreview; 21) 打印输出工作表: ExcelApplication1.ActiveSheet.PrintOut; 22) 工作表保存: if not ExcelApplication1.ActiveWorkBook.Saved then ExcelApplication1.ActiveSheet.PrintPreview; 23) 工作表另存为: ExcelApplication1.SaveAs( ''C:\Excel\Demo1.xls'' ); 24) 放弃存盘: ExcelApplication1.ActiveWorkBook.Saved := True; 25) 关闭工作簿: ExcelApplication1.WorkBooks.Close; 26) 退出 Excel: ExcelApplication1.Quit; ExcelApplication1.Disconnect; (三) 使用Delphi 控制Excle二维图 在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet var asheet1,achart, range:variant; 1)选择当第一个工作薄第一个工作表 asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1]; 2)增加一个二维图 achart:=asheet1.chartobjects.add(100,100,200,200); 3)选择二维图的形态 achart.chart.charttype:=4; 4)给二维图赋值 series:=achart.chart.seriescollection; range:=sheet1!r2c3:r3c9; series.add(range,true); 5)加上二维图的标题 achart.Chart.HasTitle:=True; achart.Chart.ChartTitle.Characters.Text:=’ Excle二维图’ 6)改变二维图的标题字体大小 achart.Chart.ChartTitle.Font.size:=6; 7)给二维图加下标说明 achart.Chart.Axes(xlCategory, xlPrimary).HasTitle := True; achart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text := ''下标说明''; 8)给二维图加左标说明 achart.Chart.Axes(xlValue, xlPrimary).HasTitle := True; achart.Chart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text := ''左标说明''; 9)给二维图加右标说明 achart.Chart.Axes(xlValue, xlSecondary).HasTitle := True; achart.Chart.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text := ''右标说明''; 10)改变二维图的显示区大小 achart.Chart.PlotArea.Left := 5; achart.Chart.PlotArea.Width := 223; achart.Chart.PlotArea.Height := 108; 11)给二维图坐标轴加上说明 achart.chart.seriescollection[1].NAME:=''坐标轴说明''; 文章出处:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008513/115828_2.html 关于如何将QUERY结果输出到EXCEL表格中的最简单实现问题。楼主huangrx(一水寒)2002-12-09 19:38:54 在 Delphi / VCL组件开发及应用 提问 各位大虾:这是我参照某参考书更改的,可是实现不了,COMPILE时,出现如下错误:[Error] Unit1.pas(45): Undeclared identifier: 'createoleobject' procedure Tform1.EXCEL1Click(Sender: TObject); var ExcelApp,MyWorkBook:Variant; i:integer; begin ExcelApp:=createoleobject('Excel.Application'); MyWorkBook:=CreateOleObject('Excel.Sheet'); MyWorkBook:=ExcelApp.workbooks.add; query1.First; i:=0; while not query1.Eof do begin i:=i+1; MyWorkBook.WorkSheets[1].Cells[i,1].Value:=query1.FieldByName('deptno').asstring; MyWorkBook.WorkSheets[1].Cells[i,2].Value:=query1.MainTable.FieldByName('dept_name').asstring; query1.Next; end; end; 为什么?是不是要添加什么控件呀?望详复,谢谢啦! 问题点数:100、回复次数:6 Top 1 楼neilwq(啄木鸟)回复于 2002-12-09 20:01:35 得分 50uses comobj; Top 2 楼kkk123(11)回复于 2002-12-09 20:01:39 得分 0 提供使用ADO之方式供你參考, 不須open Excel, 不須Runtime Create ODBC DesignTime加入一TADOQuery (用來連.mdb) 連Excel之ADOQuery Runtime create ...var form1:TForm1; ExcelConnectStr : string; //用來連Excel檔之字串implementation{$R *.DFM}//輸入Excel之檔, Create一ADOQueryfunction OpenXlsAsADO(owner:TComponent;fname:string;sheetname:string='sheet1'):TAdoQUery;var s,sht:string;begin Result:=TAdoQuery.Create(owner); try s:=AnsiReplaceStr(ExcelConnectstr, 'xxx.xls', fname); Result.ConnectionString:=s; sht:='['+SheetName+'$'+']'; Result.sql.text:='select * from '+sht; Result.open; except result.Free; end;end;procedure TForm1.Button1Click(Sender: TObject);var sql:string; ADOQ:TADOQuery;begin if OpenDia1.execute then begin ADOQ:=OpenXlsAsADO(self,OpenDia1.filename); //open .xls檔成ado// adoquery1連向 .mdb AdoQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+ 'Data Source=D:\bbb\dream.mdb;Persist Security Info=False'; ADOQ.first; while not ADOQ.eof do begin sql:='Insert INTO file(DirId,FileId,File,KeyWord,Script,Fav) Values'; sql:=sql+'('''+adoq.Fields[0].asstring; sql:=sql+''','''+adoq.Fields[0].asstring; sql:=sql+''','''+adoq.Fields[0].asstring; sql:=sql+''','''+adoq.Fields[0].asstring; sql:=sql+''','''+adoq.Fields[0].asstring; sql:=sql+''','''+adoq.Fields[0].asstring+''')'; AdoQuery1.SQL.Text:=sql; AdoQuery1.ExecSQL; AdoQ.Next; end; adoq.free; end;end;initialization //連Excel之樣板字串 ExcelConnectstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+ 'Data Source=xxx.xls;'+ 'Mode=Share Deny None;Extended Properties=Excel 8.0;'+ 'Persist Security Info=False;Jet OLEDB:System database="";'+ 'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";'+ 'Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;'+ 'Jet OLEDB:Global Partial Bulk Ops=2;'+ 'Jet OLEDB:Global Bulk Transactions=1;'+ 'Jet OLEDB:New Database Password="";'+ 'Jet OLEDB:Create System Database=False;'+ 'Jet OLEDB:Encrypt Database=False;'+ 'Jet OLEDB:Don''t Copy Locale on Compact=False;'+ 'Jet OLEDB:Compact Without Replica Repair=False;'+ 'Jet OLEDB:SFP=False';end. Top 3 楼huangrx(一水寒)回复于 2002-12-09 20:14:42 得分 0 谢谢州木鸟大哥,编译可以通过了。 再问一下,在我这个程序中,要让结果以EXCEL显示出来,还要什么控件呢? 另:KKK123大虾,你写的东东,菜鸟我实在是看不懂,多谢了。 Top 4 楼tangyong_delphi()回复于 2002-12-09 20:39:26 得分 50unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, Db, DBTables, Excel97, OleServer; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Edit1: TEdit; DataSource1: TDataSource; Query1: TQuery; DBGrid1: TDBGrid; ExcelWorksheet1: TExcelWorksheet; ExcelWorkbook1: TExcelWorkbook; ExcelApplication1: TExcelApplication; Label1: TLabel; procedure Button5Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button5Click(Sender: TObject); begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Text :=Edit1.Text ; Query1.Open; end; procedure TForm1.Button1Click(Sender: TObject); var i,row,column:integer; begin Try ExcelApplication1.Connect; Except MessageDlg('Excel may not be installed', mtError, [mbOk], 0); Abort; End; ExcelApplication1.Visible[0]:=True; ExcelApplication1.Caption:='Excel Application'; ExcelApplication1.Workbooks.Add(Null,0); ExcelWorkbook1.ConnectTo (ExcelApplication1.Workbooks[1]); ExcelWorksheet1.ConnectTo (ExcelWorkbook1.Worksheets[1] as _Worksheet); Query1.Open; row:=1; column:=1; for i:=0 to query1.FieldCount -1 do //列标题 begin ExcelWorksheet1.Cells.Item[row,column]:=dbgrid1.Fields[i].DisplayLabel ; column:=column+1; end; row:=row+1; While Not(Query1.Eof) do //表内容 begin column:=1; for i:=1 to Query1.FieldCount do begin ExcelWorksheet1.Cells.Item[row,column]:=Query1.fields[i-1].AsString; column:=column+1; end; Query1.Next; row:=row+1; end; end; procedure TForm1.Button2Click(Sender: TObject); begin ExcelWorksheet1.PrintPreview; end; procedure TForm1.Button3Click(Sender: TObject); begin ExcelWorksheet1.PrintOut; end; procedure TForm1.Button4Click(Sender: TObject); begin ExcelApplication1.Disconnect; ExcelApplication1.Quit; end; end. Top 5 楼huangrx(一水寒)回复于 2002-12-09 20:47:46 得分 0 tangyong_delphi: 谢谢你! 不过,你用的是EXCEL97,用EXCEL2000代替可以吗? Top 6 楼tangyong_delphi()回复于 2002-12-13 19:23:08 得分 0 我用的也是EXCEL2000,书上的代码是Excel97。Delphi5用EXCEL2000好像要下载补丁。 DELPHI导出EXCEL问题 悬赏分:200 - 解决时间:2007-7-15 15:50 我用DELPHI编了一个人事程序,加了个导出EXCEL的功能,但是导出人事资料的时候,在EXCEL中看的时候出现以下问题:十五位数的可以正确,十八位的后面三位全部变成了三个零,但是如果某人的身份证后面带个字母X的话又可以完全正确的显示出来。请问这是什么问题导致的。如何解决? 问题补充:忘记说了。我用的数据库是SQL的。 提问者: riiyt - 经理 四级 最佳答案 list控件显示的数据好像不能直接导出到excel,你可以做一个查询,然后直接导出到Excel(好像是用‘另存为’),如果你要保存在已有的Excel文档,用复制粘贴好了,也挺方便的。 回答者: 孤骛一色 - 助理 二级 7-10 12:09 我来评论>> 评价已经被关闭 目前有 0 个人评价 好 50% (0) 不好 50% (0) 相关内容 ? delphi dbgrid导出EXCEL问题 ? delphi导出数据到Excel ? delphi 如何将stringgrid中数据导出到excel中? ? 请问delphi中的listview表中的数据怎么导出到excel.... ? 求救!怎样在delphi中将SQL数据导出到excel!!! 更多关于delphi 导出excel的问题>> 查看同主题问题:delphi excel 其他回答 共 4 条 如果你只是为了导数据可以使用sqlserver中的“导入导出数据”功能,非常方便的。 如果是为了编写程序,要使用ODBC连结两端数据,通过程序一条条记录导入 回答者: 错王 - 助理 三级 7-5 13:40 因为你的问题描述不很清楚,无法在电脑上还原你现在的问题.所以只能建议你使用第三方cxGrid控件,导出Excel一句话就搞定,或者使用SMExport控件可以导出多种格式包括Excel... 以上控件在Delphi盒子 www.2ccc.com 上有下载,免费的 回答者: 用户名默默 - 助理 三级 7-5 14:20 导出EXCEL时注意一下,在所有的身份证号码前面加上一个英文的单引号就可以了,就是这个符号“'”,这样所有的身份证都为左对齐,并且不会变为科学计数发,不管多少位都没问题。 试试看吧,不会有问题的,那个单引号不会显示出来。 200分好爽哦:) 回答者: 阳光上的桥 - 大魔法师 九级 7-5 14:26 procedure saveToExcel(); var Eclapp,workbook:variant; i,n:integer; begin if not adoquery1.Active then exit; if adoquery1.RecordCount<=0 then exit; if application.MessageBox('确认导出excel表吗?','提示',mb_okcancel+mb_iconinformation)=idcancel then exit; Eclapp := createoleobject('Excel.Application'); Eclapp.workbooks.add; for i:=0 to dbgrid2.FieldCount-1 do begin Eclapp.cells[1,i+1]:=dbgrid2.Columns[i].Title.Caption; end; Eclapp.cells[1,5]:='签字'; adoquery1.First; n:=2; while not adoquery1.Eof do begin eclapp.cells[n,1] := adoquery1.Fields[0].AsString; eclapp.cells[n,2] := adoquery1.Fields[1].AsString; eclapp.cells[n,3] := adoquery1.Fields[2].AsString; eclapp.cells[n,4] := adoquery1.Fields[4].AsString; eclapp.cells[n,6] :=' '; inc(n); adoquery1.Next; end; eclapp.cells[n,1] := '满足条件记录的总数为:'+inttostr(adoquery1.RecordCount)+'条'; application.MessageBox('数据导出完成!','提示',mb_ok+mb_iconinformation); eclapp.visible := true; end; delphi导出数据到Excel 悬赏分:50 - 解决时间:2008-4-29 10:24 是一个list页,要把页面中的数据导出来。 代码写全啊 !!!! 谢谢! 提问者: zsy850621 - 初学弟子 一级 最佳答案 //excel导出//////////////////////////////////////////////////////////////开始 procedure TForm6.Button5Click(Sender: TObject); var i,j,row,nall:integer; ExcelApplication1: TExcelApplication; ExcelWorksheet1: TExcelWorksheet; ExcelWorkbook1: TExcelWorkbook; begin //查询是不是有数据 if (ADOQuery1.State=dsInactive) then exit; if (adoquery1.RecordCount <=0) then exit; //生成excel相关控件,并检测是否安装了excel try ExcelApplication1 := TExcelApplication.Create(Application); ExcelWorksheet1 := TExcelWorksheet.Create(Application); ExcelWorkbook1 := TExcelWorkbook.Create(Application); except Application.Messagebox('电脑未安装Office中的Excel,必须安装才能使用Excel导出数据功能!', '提示', MB_ICONERROR + mb_Ok); exit; end; if SaveDialog1.Execute then // 打开保存窗口,让用户选择保存的文件名 begin //inintial excel 初始化EXCEL ExcelApplication1.Connect; ExcelApplication1.Workbooks.Add(Null,0); ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]); ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet); begin nall:=Adoquery1.RecordCount; //保存记录的数量 row:=0; //初始化行,定位在第一 行 for j:=0 to Adoquery1.Fields.Count-1 do // column name,统计共有的列数目,把列名逐列导出到EXCEL第一行 begin ExcelWorksheet1.Cells.item[1, j+1] := Adoquery1.Fields[j].DisplayName //.DisplayLabel; end; for i:=0 to nall-1 do // total rows 正规记录,从第一条记录一直到最后循环 while not Adoquery1.Eof do //只要记录没到最后就执行以下动作 begin for j:=0 to Adoquery1.Fields.Count-1 do // column逐列导出动作 begin ExcelWorkSheet1.Cells.Item[row+2,j+1]:=Adoquery1.Fields[j].AsString; //〔行,列〕 end; row:=row+1; //行进行增量 Adoquery1.Next; //到下一条记录 end; end; //以下是导出完毕后的动作, ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName+'.xls'); //加后缀名,确保最后是EXCEL文件 ExcelWorkBook1.Close(false); ExcelApplication1.Disconnect; //断开与EXCEL的连接 Screen.Cursor:=crDefault; //指针随记录而动 Application.Messagebox('查询的数据成功导出到Excel文件中!', '提示', MB_ICONINFORMATION + mb_Ok); end; //excel导出//////////////////////////////////////////////////////////////结束 如何在delphi中导入导出Excel表? 谢谢大家:-) 请大家帮忙一个问题,如何在delphi中导入导出Excel表? 谢谢大家:-) 回复人:fhbandsyg 回复时间:2004-8-19 21:52:00 下面一段代码是将EXCEL表格导入DBF数据库的实例 uses comobj; procedure Texcelfrm.Button1Click(Sender: TObject); var oe:variant; n1:string; i,j:integer; begin oe:=CreateOleObject('Excel.Application'); oe.visible:=true; oe.workbooks.open(FileListBox1.FileName); j:=2; //假定标题在第一行 try with adoQuery1 do begin n1:='insert into tablename(fieldslist) values(:fieldslist)'; close; sql.Clear; sql.Add(n); while oe.worksheets[sheetname].cells[j,1].text<>'' do begin for i:=1 to 列数 do Parameters.Items[i-1].Value:=oe.worksheets[sheetname].cells[j,i].text; execsql; j:=j+1; end; oe.visible:=false; showmessage('导入完毕'); end; except oe.visible:=false; showmessage('数据库错误或有重复编号,请检查'); end; end; 回复人:gg1335 回复时间:2004-8-20 9:05:00 下面的代码是导出为EXCEL unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, Db, DBTables, StdCtrls, Excel97, OleServer, ComObj, ActiveX; type TForm1 = class(TForm) Button1: TButton; Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; ExcelApplication1: TExcelApplication; ExcelWorkbook1 如何在DELPHI中操作EXCEL电子表格 EXCEL电子表格作为办公软件OFFICE中的重要组成部份,是日常办公系统的主要助手,因此许多日常所需的业务方面的数据通常是通过电子表格存取。有时我们需要从日常工作中创建的EXCEL中取得数据进行操作、打印、查询,统计等工作。在这里我将介绍如何利用delphi完成EXCEL电子表格中数据的操作。 一、新建一项目,从控件栏servers中分别选取控件:excelapplication、excelworkbook1、excelworksheet,放到主窗体from1中,并加入stringgrid、三个按钮、五个显示字段内容的EDIT、二个操作显示记录的label、一个用于打开EXCEL电子表格的控件opendialog等,如下图所示: 二、选择excel表'按钮,用于打开EXCEL文件,其代码如下: procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; begin opendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径 opendialog1.Execute; Try ExcelApplication1.Connect;//EXCEL应用程序 Except MessageDlg('Excel may not be installed',mtError, [mbOk], 0); Abort; End; ExcelApplication1.Visible[0]:=True; ExcelApplication1.Caption:='Excel Application'; try excelapplication1.Workbooks.Open(opendialog1.FileName, null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定的EXCEL 文件 except begin ExcelApplication1.Disconnect;//出现异常情况时关闭 ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!'); exit; end; end; ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接 ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接 //开始从EXCEL中取数,放到stringgrid1中,取完数后关闭EXCEL for i:=1 to 1000 do//最大取值1000 for j:=1 to 6 do begin if trim(excelworksheet1.cells.item[i+1,1])<>'' then begin stringgrid1.rowCount:=i+1; stringgrid1.Cells[j,i]:=ExcelWorksheet1.Cells.Item[i+1,j]; end else begin label3.caption:=inttostr(i-1); ExcelApplication1.Disconnect; ExcelApplication1.Quit; //将第一条数据赋给编辑框 edit2.text:=stringgrid1.Cells[1,1]; edit1.text:=stringgrid1.Cells[2,1]; edit3.text:=stringgrid1.Cells[3,1]; edit4.text:=stringgrid1.Cells[4,1]; edit5.text:=stringgrid1.Cells[5,1]; exit; end; end; end; 三、'下一条记录'按钮,完成记录向下移动,代码如下: procedure TForm1.Button2Click(Sender: TObject); var x:integer; begin x:=stringgrid1.row+1; if x<> stringgrid1.RowCount then begin stringgrid1.row:=stringgrid1.row+1; label1.caption:=inttostr(x); edit2.text:=stringgrid1.Cells[1,x]; edit1.text:=stringgrid1.Cells[2,x]; edit3.text:=stringgrid1.Cells[3,x]; edit4.text:=stringgrid1.Cells[4,x]; edit5.text:=stringgrid1.Cells[5,x]; exit; end else showmessage('已到第一条记录!'); end; 四、'上一条记录',完成记录上移,代码如下: var x:integer; begin x:=stringgrid1.row-1; if x<>0 then begin stringgrid1.row:=stringgrid1.row-1; label1.caption:=inttostr(x); edit2.text:=stringgrid1.Cells[1,x]; edit1.text:=stringgrid1.Cells[2,x]; edit3.text:=stringgrid1.Cells[3,x]; edit4.text:=stringgrid1.Cells[4,x]; edit5.text:=stringgrid1.Cells[5,x]; exit; end else showmessage('已到最后一条记录!'); end; 五、stringgrid中上下移动时代码: procedure TForm1.StringGrid1Click(Sender: TObject); var i:integer; begin i:=stringgrid1.Row; label1.caption:=inttostr(i); edit1.text:=stringgrid1.Cells[2,i]; edit2.text:=stringgrid1.Cells[1,i]; edit3.text:=stringgrid1.Cells[3,i]; edit4.text:=stringgrid1.Cells[4,i]; edit5.text:=stringgrid1.Cells[5,i]; end; 六、运行程序,点击按钮1打开excel表格。程序将启动EXCEL,并打开了选择的电子表格,这时请不要关闭EXCEL,当程序从EXCEL取数完毕将自动关闭EXCEL程序,应用程序取出了EXCEL数据,显示在stringgrid中,并将第一笔数据各字段的值赋给了左边的对应的edit字段。点击按钮2、按钮3可以查看下一条或上一条记录。也可以使用光标在stringgrid1上移动。 同时我们也可以对stringgrid中的记录进行查询、定位。相反,也可以将数据库中的数据输入到EXCEL中。总之,只要我们从EXCEL提取出数据,并保存到stringgrid中,我们就可以进行相应操作,如统计、查询、重新输出,使平进的EXCEL电子表格中的数据在应用程序中得到利用。 select WeijieData T_Goods