Delphi导出表格

作者: 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

 

上一篇:Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)


下一篇:vba对单元格的操作