将 ListView 内容导入 M$ Excel
2009-10-21 11:09
246 查看
工作中处理报表,弃 dxDBGrid 或 cxGrid,直接以 ListView 显示数据结果,而后需将报表数据保存为 Excel(或 Word)文件,本窃喜 TMS 套件里的 AdvListView 有 SavetoXLS(filename: string; SaveWithHTML: boolean = true) 等方法,但试后却较失望…如此方法,将数据存入 Excel 时只保存 ListView 内容,却没将 ListView 列头写入 Excel――有躯干没脑袋,不完整的说…
索性参考其源码,自己动手…
uses
ComObj, Variant;
procedure SaveLVToXLS(LV: TListView; FileName: string);
var
aExcel: Variant;
aWorkBook: Variant;
aWorkSheet: Variant;
Ary: Variant;
i, j: Integer;
RangeStr: string[12];
aLstItem: TListItem;
cells: string;
begin
try
aExcel:= CreateOleObject('Excel.Application');
except
on E: Exception do
begin
MessageBox(
Handle,
PChar('导出报表失败!' + #13 + '失败原因:' + E.Message + ' '),
'错误',
MB_OK + MB_ICONERROR
);
Exit;
end;
end;
aWorkBook:= aExcel.WorkBooks.Add;
aWorkSheet:= aWorkBook.WorkSheets.Add;
Ary:= VarArrayCreate([0, LV.Items.Count, 0, LV.Columns.Count], varVariant);
for j:= 0 to LV.Columns.Count - 1 do //暂存 ListView 之列头
begin
cells:= LV.Columns[j].Caption;
Ary[0, j]:= cells;
end;
for i:= 1 to LV.Items.Count do //暂存 ListView 之内容
begin
aLstItem:= LV.Items;
for j:= 0 to LV.Columns.Count - 1 do
begin
if j = 0 then
cells:= aLstItem.Caption
else
begin
if j - 1 >= aLstItem.SubItems.Count then
cells:= ''
else
cells:= aLstItem.SubItems[j - 1];
end;
Ary:= cells;
end;
end;
RangeStr:= 'A1:';
if (LV.Columns.Count > 26) then
begin
RangeStr:= RangeStr + Chr(Ord('A') - 1 + (LV.Columns.Count div 26));
RangeStr:= RangeStr + Chr(Ord('A') - 1 + (LV.Columns.Count mod 26));
end
else
RangeStr:= RangeStr + Chr(Ord('A') - 1 + LV.Columns.Count);
RangeStr:= RangeStr + IntToStr(LV.Items.Count + 1);
aWorkSheet.Range[RangeStr].Value:= Ary;
aWorkbook.SaveAs(FileName);
aExcel.Quit;
aExcel:= UnAssigned;
end;
参数说明:
LV:要导出数据的 ListView 名;FileName:目标文件名(如 MyRpt.XLS)。
可完善之如,设定 Excel Cell 的宽度;也可再封装一个带数据导出功能的 TListView,若有必要或感兴趣。
P.S: TMS 怎就不能将其方法稍加改造,让用户选择是否导出 ListView 的列头呢?不过多一个参数而已... 本文出自 “ADelphiCoder” 博客,请务必保留此出处http://adelphicoder.blog.51cto.com/983561/214640
索性参考其源码,自己动手…
uses
ComObj, Variant;
procedure SaveLVToXLS(LV: TListView; FileName: string);
var
aExcel: Variant;
aWorkBook: Variant;
aWorkSheet: Variant;
Ary: Variant;
i, j: Integer;
RangeStr: string[12];
aLstItem: TListItem;
cells: string;
begin
try
aExcel:= CreateOleObject('Excel.Application');
except
on E: Exception do
begin
MessageBox(
Handle,
PChar('导出报表失败!' + #13 + '失败原因:' + E.Message + ' '),
'错误',
MB_OK + MB_ICONERROR
);
Exit;
end;
end;
aWorkBook:= aExcel.WorkBooks.Add;
aWorkSheet:= aWorkBook.WorkSheets.Add;
Ary:= VarArrayCreate([0, LV.Items.Count, 0, LV.Columns.Count], varVariant);
for j:= 0 to LV.Columns.Count - 1 do //暂存 ListView 之列头
begin
cells:= LV.Columns[j].Caption;
Ary[0, j]:= cells;
end;
for i:= 1 to LV.Items.Count do //暂存 ListView 之内容
begin
aLstItem:= LV.Items;
for j:= 0 to LV.Columns.Count - 1 do
begin
if j = 0 then
cells:= aLstItem.Caption
else
begin
if j - 1 >= aLstItem.SubItems.Count then
cells:= ''
else
cells:= aLstItem.SubItems[j - 1];
end;
Ary:= cells;
end;
end;
RangeStr:= 'A1:';
if (LV.Columns.Count > 26) then
begin
RangeStr:= RangeStr + Chr(Ord('A') - 1 + (LV.Columns.Count div 26));
RangeStr:= RangeStr + Chr(Ord('A') - 1 + (LV.Columns.Count mod 26));
end
else
RangeStr:= RangeStr + Chr(Ord('A') - 1 + LV.Columns.Count);
RangeStr:= RangeStr + IntToStr(LV.Items.Count + 1);
aWorkSheet.Range[RangeStr].Value:= Ary;
aWorkbook.SaveAs(FileName);
aExcel.Quit;
aExcel:= UnAssigned;
end;
参数说明:
LV:要导出数据的 ListView 名;FileName:目标文件名(如 MyRpt.XLS)。
可完善之如,设定 Excel Cell 的宽度;也可再封装一个带数据导出功能的 TListView,若有必要或感兴趣。
P.S: TMS 怎就不能将其方法稍加改造,让用户选择是否导出 ListView 的列头呢?不过多一个参数而已... 本文出自 “ADelphiCoder” 博客,请务必保留此出处http://adelphicoder.blog.51cto.com/983561/214640
相关文章推荐
- Excel——将内容导入
- Javascript实现把网页中table的内容导入到excel中的几种方法
- 从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)
- 如何将EXCEL内容导入mysql
- 如何将EXCEL内容导入mysql
- 从phpMyAdmin批量导入Excel内容到MySQL
- 将数据库中的内容导入到excel
- asp.net导入EXCEL内容文件到数据库
- 能否改良Datagrid_DataSet将excel内容导入SQL Server
- asp.net OleDb导入Excel,并显示导入内容
- Javascript实现把网页中table的内容导入到excel中的几种方法
- 导入excel时合并单元格的处理(全部保存为合并的内容)
- 使用Python3和BeautifulSoup爬取笑话网站内容,并导入Excel
- 将excel文件的内容导入sql server数据库的方法
- 在jxl.jar包下把excel内容导入到数据库
- java导入excel数据内容存入数据库
- Javascript + xsl 实现把网页中 翻页的 Table 标签内容导入到excel
- Java 将excel中的内容导入数据库中
- 怎么把上传的excel表内容导入到数据库
- Excel表格内容导入数据库