ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Delphi导出表格

2020-02-23 19:04:39  阅读:286  来源: 互联网

标签:ExcelApp end 表格 导出 Delphi ExcelApplication1 ActiveSheet Excel Cells


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

 

标签:ExcelApp,end,表格,导出,Delphi,ExcelApplication1,ActiveSheet,Excel,Cells
来源: https://www.cnblogs.com/jijm123/p/12353270.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有