使用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通用的,所以有些地方处理还是有点不好,这是没有办法的事.
|