首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

快速将ListView中表格生成EXCEL的算法

2012-01-23 
求一个快速将ListView中表格生成EXCEL的算法最近在做一个系统,需要将ListView中的数据生成EXCEL,功能我倒

求一个快速将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;

                                }

[解决办法]
沙发沙发,帮忙顶
[解决办法]
主要是用OLE操作EXCEL慢.C#的话,你在本版搜一下,很多现成的操作EXCEL算法.

在下试过将其改了后,导出行5000,列20的数据表,不用2秒.

热点排行