Delphi使用server组件控制excel的一点经验
2005-06-03 13:46
671 查看
近来的项目报表全部做成excel文件,方便很多。可惜的是delphi中的server组件没有帮助,只能靠网上的资料和自己的摸索。经过一段时间,积累了一点经验,写出来希望对大家有所帮助。近来在网上搜索到TXLSRead and TXLSWrite两个组件操作excel更加方便,但是还没研究过,大家有兴趣可以研究一下。
1、 Connect问题
对微软真实又爱又恨,爱的是很多东西很方便易用,恨的是慢和老是出现莫名其妙的错误。不明白为什么ExcelApplication1.Connect连接那么慢,而且会影响窗口的显示。所以在执行ExcelApplication1.Connect之前最好加一句Application.ProcessMessages。
2、 ExcelWorksheet1.ConnectTo的问题
要连接上一个worksheet,需要三个步骤:
ExcelApplication1.Connect
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _worksheet);
第一个步骤是连接到Excel。
第二个步骤是创建新的excel,并将ExcelWorkbook1组件连接到这个新的excel,如果是打开一个已存在的excel文件请用:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(excel文件名及路径,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
第三个步骤就是ExcelWorksheet1组件连接到要读写的工作表,比较容易忽略的就是红色字部分(as _worksheet),如果没有,编译时是肯定通不过的。
3、 保存文件
保存文件根据网上的资料测试过不少,可惜有些不行,老编译不过。可能是自己没仔细研究,代码写得不对。现在只用以下这句:
ExcelApplication1.ActiveWorkBook.Close(True,CurrentPath+CurrentFile,EmptyParam, 0);
4、 设置单元格格式为文本
Excel的一个问题就是将000001这些文本也当成数字了,最后显示为1,所以要设置单元格的格式为文本才行。在大富翁论坛找到了答案,就是:
Cells.Item[行号,列号].NumberFormatLocal:='@';
还有一种办法就是:ells.Item[行号,列号].style:='';
后面那个关键词找不到,用Normal不行,用Text也不行,找不到资料,也就没深究下去。
5、 获取工作簿中所有工作表
for i:=1 to ExcelWorkbook1.Sheets.Count do
begin
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[i] as _WorkSheet);
cbList.Items.Add(ExcelWorksheet1.Name);
ExcelWorksheet1.Disconnect;
end;
6、 获取工作表中已经使用的行数和列数
获取列数并取得列标题(如果有标题行且是第一行)
ColCount:=ExcelWorksheet1.UsedRange[0].Columns.Count;
if ColCount>0 then
begin
for I:=1 to ColCount do
begin
ListString:=ExcelWorksheet1.UsedRange[0].Cells.Item[1,I];
ListString:='列'+IntToStr(I)+':'+ListString;
end;
end;
在这里要注意的地方就是一定要用变量保存信息,如果直接在循环中使用ExcelWorksheet1.UsedRange[0].Columns.Count,编译通过不了,下面获取标题行的值也是,直接使用也是不行。
获取行数:
RowCount:=ExcelWorksheet1.UsedRange[0].Rows.Count;
如果有标题行,别忘记将行数减1。循环时也要从第二行开始。
7、 参考文档
Delphi与Excel的亲密接触 [王安鹏(anpengwang@263.net) 2002/4/14]
链接:http://www.zahui.com/html/2/4846.htm
Delphi控制Excel2000心得 [tiexinliu (铁心刘) 2003-10-15 10:45:11]
链接:http://search.csdn.net/Expert/topic/2357/2357198.xml?temp=.6645929
1、 Connect问题
对微软真实又爱又恨,爱的是很多东西很方便易用,恨的是慢和老是出现莫名其妙的错误。不明白为什么ExcelApplication1.Connect连接那么慢,而且会影响窗口的显示。所以在执行ExcelApplication1.Connect之前最好加一句Application.ProcessMessages。
2、 ExcelWorksheet1.ConnectTo的问题
要连接上一个worksheet,需要三个步骤:
ExcelApplication1.Connect
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _worksheet);
第一个步骤是连接到Excel。
第二个步骤是创建新的excel,并将ExcelWorkbook1组件连接到这个新的excel,如果是打开一个已存在的excel文件请用:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(excel文件名及路径,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
第三个步骤就是ExcelWorksheet1组件连接到要读写的工作表,比较容易忽略的就是红色字部分(as _worksheet),如果没有,编译时是肯定通不过的。
3、 保存文件
保存文件根据网上的资料测试过不少,可惜有些不行,老编译不过。可能是自己没仔细研究,代码写得不对。现在只用以下这句:
ExcelApplication1.ActiveWorkBook.Close(True,CurrentPath+CurrentFile,EmptyParam, 0);
4、 设置单元格格式为文本
Excel的一个问题就是将000001这些文本也当成数字了,最后显示为1,所以要设置单元格的格式为文本才行。在大富翁论坛找到了答案,就是:
Cells.Item[行号,列号].NumberFormatLocal:='@';
还有一种办法就是:ells.Item[行号,列号].style:='';
后面那个关键词找不到,用Normal不行,用Text也不行,找不到资料,也就没深究下去。
5、 获取工作簿中所有工作表
for i:=1 to ExcelWorkbook1.Sheets.Count do
begin
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[i] as _WorkSheet);
cbList.Items.Add(ExcelWorksheet1.Name);
ExcelWorksheet1.Disconnect;
end;
6、 获取工作表中已经使用的行数和列数
获取列数并取得列标题(如果有标题行且是第一行)
ColCount:=ExcelWorksheet1.UsedRange[0].Columns.Count;
if ColCount>0 then
begin
for I:=1 to ColCount do
begin
ListString:=ExcelWorksheet1.UsedRange[0].Cells.Item[1,I];
ListString:='列'+IntToStr(I)+':'+ListString;
end;
end;
在这里要注意的地方就是一定要用变量保存信息,如果直接在循环中使用ExcelWorksheet1.UsedRange[0].Columns.Count,编译通过不了,下面获取标题行的值也是,直接使用也是不行。
获取行数:
RowCount:=ExcelWorksheet1.UsedRange[0].Rows.Count;
如果有标题行,别忘记将行数减1。循环时也要从第二行开始。
7、 参考文档
Delphi与Excel的亲密接触 [王安鹏(anpengwang@263.net) 2002/4/14]
链接:http://www.zahui.com/html/2/4846.htm
Delphi控制Excel2000心得 [tiexinliu (铁心刘) 2003-10-15 10:45:11]
链接:http://search.csdn.net/Expert/topic/2357/2357198.xml?temp=.6645929
相关文章推荐
- Delphi使用server组件控制excel的一点经验
- Delphi使用server组件控制excel的一点经验
- Delphi使用server组件控制excel的一点经验
- Delphi使用server组件控制excel的一点经验
- Delphi组件indy 10中IdTCPServer修正及SSL使用心得
- Delphi控制Excel的经验(二) 分享
- Delphi控制Excel的经验(一)
- Delphi组件indy 10中IdTCPServer修正及SSL使用心得
- Delphi组件indy 10中IdTCPServer修正及SSL使用心得
- DELPHI中EXCEL组件的使用方法
- 使用COM或者OLE的方法调用来控制Excel或者其他Office组件
- DELPHI中EXCEL组件的使用方法
- Asp.net开发经验-利用Aspose.Words按模板导出Word(注:Excel可以使用Aspose.Excel)
- 用Delphi开发的的组件如何使用自己设置的图标
- Fastreport使用经验(转)在Delphi程序中访问报表对象
- VS2005中BackgroundWorker组件的使用经验
- 我的使用createremotethread控制excel右键的源程序
- 关于使用SQLDMO.Backup和SQLDMO.Restore的一点经验
- Delphi组件开发-在窗体标题栏添加按钮(使用MakeObjectInstance(NewWndProc),并处理好多消息)
- xmlhttp组件使用中遇到的一点问题