苏飞论坛

标题: 请问一下,为什么我把listview数据导出excel会非常慢的啊? [打印本页]

作者: 站长苏飞    时间: 2013-11-20 10:25
标题: 请问一下,为什么我把listview数据导出excel会非常慢的啊?
♂changlei() 10:22:43
请问一下,为什么我把listview数据导出excel会非常慢的啊?



漫游消



作者: 站长苏飞    时间: 2013-11-20 10:29
♂站长苏飞() 10:25:24
多少数据,怎么导的

♂小海哥 [北京]() 10:26:22
估计有个几亿条吧

♂changlei() 10:27:24
数据也不是太多,一共八列,行数只有一千行内,当然行数越少肯定会越快,现在感觉代码上处理的不好。

♂changlei() 10:27:37
稍等贴代码



作者: 站长苏飞    时间: 2013-11-20 10:33
♂changlei() 10:30:26
也是之前网上抄来的一段代码,如下:
  
[C#] 纯文本查看 复制代码
 /// <summary>
        /// 从ListView到Excel具体方法
        /// </summary>
        /// <param name=”lv”></param>
        /// <param name=”filename”></param>
        public static void LvtoExcel(ListView lv, string filename)                                        //listview导入EXCEL方法                     
        {
            int rownum = lv.Items.Count;                            //取总行数
            if (rownum == 0 || string.IsNullOrEmpty(filename))
            {
                MessageBox.Show("没有记录");
                return;
            }
            int columnnum = lv.Items[0].SubItems.Count;             //列数
            int rowindex = 1;                                       //定义excel行索引从1开始,       excel都是从1开始
            int columnindex = 0;                                    //定义excel列索引
            if (rownum > 0)
            {
                Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();     //初始化一个excel实例

                if (excelapp == null)
                {
                    MessageBox.Show("无法创建EXCEL对象,可能你的系统没有安装EXCEL,将转成保存成WPSExcel格式!");
                    // LvtoWpsExcel(lv, filename);
                    return;
                }
                //因为使用COM库,因此有许多变量用Nothing代替
                Object Nothing = Missing.Value;
                Microsoft.Office.Interop.Excel.Workbook wb = excelapp.Workbooks.Add(Nothing);                              //创建excel工作薄对象
                Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets[1];      // 指定excel第一页为工作表
                //将ListView的列名导入Excel第一行
                foreach (ColumnHeader lc in lv.Columns)             //遍历listview列头
                {
                    columnindex++;
                    ws.Cells[rowindex, columnindex] = lc.Text;      //向excel表格填列名数据
                }
                //将ListView的值导入Excel
                for (int i = 0; i < rownum; i++)                    //遍历listview行
                {
                    rowindex++;
                    columnindex = 0;
                    for (int j = 0; j < columnnum; j++)             //遍历listview列
                    {
                        columnindex++;
                        //注意这个在导出是加”\t”的目的是避免导出的数据显示为科学计数法
                        //if (columnindex == 8)  //本程序中第八列为时间 加上/t显示为正常的时间格式
                        //{
                        //    ws.Cells[rowindex, columnindex] = Convert.ToString(lv.Items.SubItems[j].Text.Trim(). + "\t");     //向excel表格填数据
                        //}
                        //else
                        //{
                        ws.Cells[rowindex, columnindex] = Convert.ToString(lv.Items.SubItems[j].Text.ToString().Trim());     //向excel表格填数据
                        //}

                    }
                }
                wb.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Nothing, Nothing, Nothing, Nothing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Nothing, Nothing, Nothing, Nothing, Nothing);         //保存
                wb.Close(Nothing, Nothing, Nothing);                //关闭工作薄
                excelapp.Quit();                                    //退出实例
            }
        }

♂changlei() 10:32:50
(, 下载次数: 185)