求一个快速将ListView中表格生成EXCEL的算法
最近在做一个系统,需要将ListView中的数据生成EXCEL,功能我倒是实现了,是用的COM,但是感觉速度实在是无法忍受,谁有好的办法,能够提高生成的速度啊?
先谢谢了!
下边是我写的代码,那位大大能够帮我改进一下,或者重新换个方法。
if (listView.Items.Count == 0)
{
MessageBox.Show("没有图幅可以导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
try
{
SaveFileDialog savDlg = new SaveFileDialog();
savDlg.CreatePrompt = true;
savDlg.OverwritePrompt = true;
savDlg.FileName = DateTime.Now.ToShortDateString() + "图幅查询结果表";
savDlg.DefaultExt = "xls";
savDlg.Filter = "Excel files(*.xls)|*.xls";
DialogResult res = savDlg.ShowDialog();
string filename = savDlg.FileName.ToString();
savDlg.Dispose();
if (res == DialogResult.OK)
{
File.Delete(filename);
Excel.Application app = new Excel.ApplicationClass();
System.Reflection.Missing miss = System.Reflection.Missing.Value;
if (app == null)
{
MessageBox.Show("Excel无法启动");
return;
}
Excel.Workbooks wbs = app.Workbooks;
Excel.Workbook wb = wbs.Add(miss);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
Excel.Range r = ws.get_Range("A1", "H1");
wb.SaveAs(filename, miss, miss, miss, miss, miss,
Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);
this.Refresh();
ProgressForm frm = new ProgressForm();
frm.SetInfoTxt("Excel表格生成进度:");
frm.SetProgress(0);
frm.MdiParent = this.MdiParent;
frm.Show();
frm.Refresh();
for (int i = 0; i < listView.Columns.Count; i++)
{
r.Cells[1, i + 1] = listView.Columns[i].Text;
}
frm.SetProgress(Convert.ToInt32((1 * 100) / (listView.Items.Count + 1)));
for (int i = 0; i < listView.Items.Count; i++)
{
for (int m = 0; m < listView.Columns.Count; m++)
{
r.Cells[i + 2, m + 1] = listView.Items[i].SubItems[m].Text;
}
frm.SetProgress(Convert.ToInt32(((i + 2) * 100) / (listView.Items.Count + 1)));
}
frm.Dispose();
app.Visible = true;
app = null;
}