LISTVIEW导出到EXCEL的通用函数

LISTVIEW导出到EXCEL的通用函数
2011-08-25         作者:李海彬   阅读:470

    使用Delphi开发数据库系统软件时,经常会使用Listview控件作为数据库的容器,而将数据导出到Excel中,也经常要用到.
    首先在FROM中添加一个BUTTON控件,一个LISTVIEW控件(设成vsReport),一个SaveDialog控件.
    下面给出将Listview控件直接导出到Excel表格中的通用代码:

use comobj;
//直接将LISTVIEWR控件作为入参.
procedure TForm1.Excel_lv(lvpt:tlistview);
var XL,SHEET:variant;
    SfileName:string;
    j,i:integer;
BEGIN
try
  if not  savedialog1.Execute then exit;
  sfilename:=savedialog1.FileName ;
  //创建一个EXCEL
  XL:=CreateOleObject('Excel.Application');
  XL.WorkBooks.add;
  //设SHEETS1为活动页
  SHEET:=XL.WORKBOOKS[XL.WorkBooks.Count].SHEETS[1];
  //设置列宽,这个可以根据实际情况修改
  XL.rANGE['A1','A1'].cOLUMNwIDTH:=10;
  XL.rANGE['B1','B1'].cOLUMNwIDTH:=10;
  XL.rANGE['C1','C1'].cOLUMNwIDTH:=10;
  XL.rANGE['D1','D1'].cOLUMNwIDTH:=10;
  XL.rANGE['E1','E1'].cOLUMNwIDTH:=10;
  XL.rANGE['F1','F1'].cOLUMNwIDTH:=10;
  XL.rANGE['G1','G1'].cOLUMNwIDTH:=10;
  XL.rANGE['H1','H1'].cOLUMNwIDTH:=10;
  XL.rANGE['I1','I1'].cOLUMNwIDTH:=10;
  XL.rANGE['J1','J1'].cOLUMNwIDTH:=10;
  XL.rANGE['K1','K1'].cOLUMNwIDTH:=10;
  XL.rANGE['L1','L1'].cOLUMNwIDTH:=10;
  //第一行,将LISTVIEW的标题先导出到EXCEL
  for i:=1 to lvpt.Columns.Count  do
     sheet.cells[1,i]:=lvpt.Columns[i-1].Caption ;
  //将LISTVEW里各行列的内容导出
  for j:=0 to lvpt.Items.Count -1 do
    for i:=1 to lvpt.Columns.Count do
     begin   //由于将数字字符串如00011导出到EXCEL时,它会自动转成数值11,
             //所以要在前面加'号,定义为字符串.
      if i=1 then sheet.cells[j+2,i]:=''''+lvpt.Items[j].Caption
             else sheet.cells[j+2,i]:=''''+lvpt.Items[j].SubItems [i-2];
     end;
  //写入EXCEL文件
  XL.WORKBOOKS[XL.WorkBooks.Count].SHEETS[1].SaveAs(SFilename);
  XL.Quit;
except
  messagebox(handle,'对不起,您可能没有安装Excel或文件目录错误!','错误',MB_OK+MB_ICONSTOP);
  XL.WORKBOOKS[XL.WorkBooks.Count].SHEETS[1].SaveAs(SFilename);
  XL.Quit;
end;
end;
//执行
procedure TForm1.Button1Click(Sender: TObject);
begin
  excel_lv(listview1);
end;

  以上代码由于是对所有的LISTVIEW通用的,所以有些地方处理还是有点不好,这是没有办法的事.

posted on 2012-06-03 20:53  为人民服务  阅读(666)  评论(0编辑  收藏  举报