如何用DELPHI来读取EXCEL表部分内容并打印?(100分)

  • 主题发起人 主题发起人 changleqy
  • 开始时间 开始时间
C

changleqy

Unregistered / Unconfirmed
GUEST, unregistred user!
所在单位用EXCEL表统计工资。
现在有一要求需要将工资表中每个人的明细表提取出来,并实现打印。
请各位高人指点该如何实现从EXCEL表中去提取数据。
该用到什么控件呢?我想设计成MDI窗口。
 
[求助]:盼望你的指点,我现在不知道能不能有一个控件,可以将EXCEL文件作为
子窗口打开来进行操作。谢谢,--你的帮助!
 
顶一顶!
 
turbopower's officepartner
 
在DELPHI中使用ADO直接访问Excel数据文件
李战
摘 要:在DELPHI中使用ADO直接访问Excel数据文件
关键字:ADO Excel
类 别:数据库

  承蒙各位大鱼大虾的支持,终于顿悟。现在将心经写下来,让后来者提高修成正果的效率,早日成为大鱼大虾。
  要用DELPHI中的ADO系列控件访问Excel数据文件,首先应该建立一些基本概念。你需要将一个Excel数据文件想
象为一个关系数据库,Excel文件中的每个工作表就对应该数据库中的一个表,而工作表中的每一列当然就是表
的列了。然后,按照下列面的秘诀进行就可以。
  
  1.设置ADOConnection的ConnectionString
构造ConnectionString时,OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider作为ADO的驱动程序。
这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。
连接的数据库名称当然就是你要打开的Excel文件,注意扩展名是*.xls,而不是*.mdb。
最关键的一点是,还要设置扩展属性Extended Properties为“Excel 8.0”,否则,测试连接时会报告无法
识别数据格式的错误。Extended Properties的属性值在“所有”参数页中输入。
最后,设置完成后的ConnectionString中的各项参数为:
Provider=Microsoft.Jet.OLEDB.4.0
Data Source=MyExcelFile.xls
Extended Properties=Excel 8.0
Persist Security Info=False
  2.设置ADODataSet或ADOTable
将ADODataSet或ADOTable连接到刚才的ADOConnection。如果不用ADOConnection,也可以参照上面的方法
直接设置ADODataSet或ADOTable的ConnectionString属性。对于ADODataSet,需要将CommandType属性设置
为cmdTableDirect,而对于ADOTable,则将TableDirect属性设置为True。因为,访问Excel文件是直接的
数据文件访问,不是通过SQL语句来操作游标访问的。如果不设置直接访问,则系统会报告SQL语句格式错
误等信息。
然后,当你下拉ADODataSet中的CommandText属性或ADOTable的TableName属性时,就可以选择到要打开的工
作表了。注意,表名后面多了加一个$符号。
3.打开ADODataSet或ADOTable
投稿人:李战 投稿日期:2002-3-8 21:23:00
摘录自DFW已答记录中
 
知道OLE吧?
在DELPHI5.0以上版本的VCL组件中有OFFICE系列的,你可以选一个ExcelApplication组件到
Form上,另外还必须拖放一个OLEContainer组件(System页上)到Form上,用来放置Excel
文件。下面范例是利用EXCEL表做一个统计图形,数据是从TABEL表上转入EXCEL表的,运行
后可得到同Excel表一样的操作界面-------相信看了这个程序或许对您有很大的启发:unit Unit7_16;
interface
uses Windows, Classes, Graphics, Forms, Controls, DB, DBGrids,
DBTables, Grids, StdCtrls, ExtCtrls, ComCtrls, Dialogs, OleCtrls,
OleCtnrs, OleServer, Excel2000;
type
TOLE_Form1 = class(TForm)
Panel1: TPanel;
InsertBtn: TButton;
Table1: TTable;
Table1NAME: TStringField;
Table1SIZE: TSmallintField;
Table1WEIGHT: TSmallintField;
Table1AREA: TStringField;
Table1BMP: TBlobField;
ExcelApplication1: TExcelApplication;
OleContainer1: TOleContainer;
procedure InsertBtnClick(Sender: TObject);
end;

var
OLE_Form1: TOLE_Form1;
implementation
uses ComObj;
{$R *.DFM}
procedure TOLE_Form1.InsertBtnClick(Sender: TObject);
var
aSheet, aChart, series: Variant;
i: integer;
begin
// 显示MS-Excel的运行过程
ExcelApplication1.Visible[0] := True;
// 创建一个 WorkBook
ExcelApplication1.WorkBooks.Add(xlWBATWorksheet,0);
// 获取 WorkBook 中的一页 WorkSheet
aSheet:=ExcelApplication1.Worksheets.Item[1];
// 将Animals.dbf的数据填入Sheet的Cells二维数组内
aSheet.Cells[1,1].Value:='大小';
aSheet.Cells[3,1].Value:='体重';
i := 2;
with Table1do
begin
Open;
First;
while not eofdo
begin
aSheet.Cells[1, i].Value:=FieldByName('Name').AsString;
aSheet.cells[2, i].Value:=FieldByName('Size').AsString;
aSheet.cells[3, i].Value:=FieldByName('Weight').AsString;
i:=i+1;
Next;
end;
end;

// 在Sheet上加入一块空的统计图形
aChart := aSheet.ChartObjects.Add(100, 50, 200, 150);
series := aChart.chart.SeriesCollection;
// 将Sheet上某段范围的数据画出对应的统计图表
series.Add('Sheet1!R1C1:R2C7', TRUE);
series.Add('Sheet1!R3C1:R3C7', TRUE);
// 将数据存成Excel格式的文件
aSheet.SaveAs('C:/a.xls');
// 把 Excel 文件 Insert 到 OleContainer
OleContainer1.CreateObjectFromFile('C:/a.xls',False);
// 结束MS-Excel的运行
aSheet.Application.Quit;
end;

end.
 
另外我可能有你需要的那个控件,需要的话给我通知:rjzsoft@hotmail.com
OK?
 
谢谢QuickSilver、zhtx、小乙三位大虾的鼎力帮助。
我先按你们提供的方法试一试~~~~
 
引用:
[
1.设置ADOConnection的ConnectionString
构造ConnectionString时,OLE DB的提供者要选择Microsoft Jet 4.0 OLE DB Provider作为ADO的驱动程序。
这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件。
连接的数据库名称当然就是你要打开的Excel文件,注意扩展名是*.xls,而不是*.mdb。
最关键的一点是,还要设置扩展属性Extended Properties为“Excel 8.0”,否则,测试连接时会报告无法
识别数据格式的错误。Extended Properties的属性值在“所有”参数页中输入。
最后,设置完成后的ConnectionString中的各项参数为:
Provider=Microsoft.Jet.OLEDB.4.0
Data Source=MyExcelFile.xls
Extended Properties=Excel 8.0
Persist Security Info=False
]
请问我在设置上面的参数时,无法找到Data Source=MyExcelFile.xls
Extended Properties=Excel 8.0
Persist Security Info=False
这些属性。
我用的是DELPHI 6,是否和DELPHI 5不同的缘故啊?
 

Similar threads

回复
0
查看
978
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部