简单使用delphi+Excel的方法

一直不喜欢使用delphi操作Excel,一是因为Excel本身设置复杂,又是公式又是宏的,再就是因为网上关于delphi操作的文章动辄就长篇大论,可操作性差,而我们使用excel一般不会那么负责,只不过用于存储而已,所以我偷懒只是用文本来存储,大不了用excel打开文本文件罢了。

这周单位需要,又编写了两个程序,本来以为是一次性操作,用完了就算了,谁知前台人员感觉比较方便,希望改进一下能够日常使用,但如果再用文本存储,可能麻烦了了点,所以就想简单改进一下,直接操作excel试试。

网上文章很多,但基本上都是转来转去,大差不差,找了一些文件,又总结了一下,主要参考的是http://news.ccw.com.cn/elife/htm2007/20070611_271052_2.shtmlhttp://www.cnblogs.com/LuckyJan/articles/70559.html这两篇文章。

1、首先加入uses ComObj。

2、读取excel文件的话,先定义var XL: Variant;Sheet: Variant;

XL := CreateOleObject(‘Excel.Application’);
XL.WorkBooks.add(文件名);
Sheet:=xl.workBooks[1].worksheets[1];

定义好了sheet表之后,就可以操作了 s1:=sheet.cells[i,1];读取数据。

取表中文件数是个问题,如果简易的话,可以通过判断单元格是否为空来判断,但不能直接用定义的sheet.cells来判断,我是用笨办法:

m:=1;
i:=1;
while m>0 do
begin
ss:=trim(sheet.cells[i,1]);
if ss=” then
m:=0 else
begin
s1:=sheet.cells[i,1];
s2:=sheet.cells[i,2];
memo1.Lines.Add(s1+’-‘+s2);
i:=i+1;
end;
end;

这样就可以读取excel表中的数据了。

3、将数据写入excel反而要简单一些了,定义xl,sheet同上,下面就是:

if save1.Execute then
begin
TRY
XL := CreateOleObject(‘Excel.Application’);
Sheet:=CreateOleObject(‘Excel.Sheet’);

  EXCEPT
showmessage(‘error’);
END;
S:=save1.FileName;
Sheet:=xl.workBooks.add;
  for i:=1 to memo1.Lines.Count do
begin
ss:=memo1.Lines[i-1];
m:=pos(‘ ‘,ss);
s1:=copy(ss,1,m-1);
delete(ss,1,m-1+length(‘ ‘));
m:=pos(‘ ‘,ss);
s2:=copy(ss,1,m-1);
xl.Cells[i,1]:=s1;
xl.Cells[i,2]:=s2;
end;
sheet.SaveAS(S);
sheet.close;
XL.Quit;

 end;

其中加红的那句很重要,通过这样才能激活当前表。

用了一个下午,程序已经可以运行起来了,速度虽然慢了一点,但用起来操作要简单直观一些,不用再通过文本转换了,但问题在于系统必须安装了excel,这也是我一直不愿意使用这个组合的原因。

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>