导出Excel 07 版本

mulinyeyu 2016-09-19 03:10:59
导出Excel07 版本 100W数据量 不分页。 有代码的给段代码,知道思路的给个思路也行。
...全文
293 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mulinyeyu 2018-11-14
  • 打赏
  • 举报
回复
导出百万数据最大的问题是内存溢出,目前使用的方法是,将表里数据分开查询,并将查询结果序列号到本地,然后释放内存,这样就避免内存溢出问题了。
泡泡龙 2016-09-23
  • 打赏
  • 举报
回复
引用 8 楼 mulinyeyu 的回复:
[quote=引用 7 楼 liucqa 的回复:] 不要直接操作cells,用数组一次读出来。内存不够就分多次读
能不能给段例子,或者说是用什么方法实现的?[/quote] 去Excelhome论坛看vba例子,C#类似改改就行 /// <summary> /// 获取指定单元格作为左上角的行列区域值,放到数组 /// </summary> /// <param name="TopLeftAddress"></param> /// <param name="rowsize"></param> /// <param name="colsize"></param> /// <param name="dataArray"></param> public void GetValueArray(string TopLeftAddress,int rowsize,int colsize, ref object[,] dataArray) { //http://developer.51cto.com/art/200908/142392.htm dataArray = currentworksheet.get_Range(TopLeftAddress).get_Resize(rowsize, rowsize).Value as object[,]; } /// <summary> /// 获取指定单元格作为左上角的行列区域值,放到object /// </summary> /// <param name="TopLeftAddress"></param> /// <param name="rowsize"></param> /// <param name="colsize"></param> /// <param name="Array"></param> public void GetValueArray(string TopLeftAddress, int rowsize, int colsize, out object Array) { //http://developer.51cto.com/art/200908/142392.htm Array = currentworksheet.get_Range(TopLeftAddress).get_Resize(rowsize, rowsize).Value; }
泡泡龙 2016-09-22
  • 打赏
  • 举报
回复
不要直接操作cells,用数组一次读出来。内存不够就分多次读
mulinyeyu 2016-09-22
  • 打赏
  • 举报
回复
引用 7 楼 liucqa 的回复:
不要直接操作cells,用数组一次读出来。内存不够就分多次读
能不能给段例子,或者说是用什么方法实现的?
zbdzjx 2016-09-19
  • 打赏
  • 举报
回复
在我电脑上测试的,引用的是excel2010,用下面的语句导出10万条记录,可以正常导出及打开。
Microsoft.Office.Interop.Excel.Application mExcelObj = new Microsoft.Office.Interop.Excel.Application();
            //停用警告訊息
            mExcelObj.DisplayAlerts = false;
            Workbook theWorkbook = mExcelObj.Workbooks.Add(Type.Missing);
            Sheets sheets = theWorkbook.Worksheets;
            Worksheet ws = (Worksheet)sheets.get_Item(1);
            ws.Name = "導出";//SheetName

            for (int i = 0; i < 100000; i++)
            {
                ws.Cells[i + 1, 1] = i.ToString();
            }
            string filePath = "D:\\tempFile\\" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx";
            theWorkbook.SaveAs(filePath, XlFileFormat.xlWorkbookDefault, null, null, false, false,
                                   XlSaveAsAccessMode.xlNoChange, null, null, null, null, null);
            theWorkbook.Close();
            mExcelObj.Quit();
            MessageBox.Show("OK!");
mulinyeyu 2016-09-19
  • 打赏
  • 举报
回复
NOPI 数据量大的话,会内存溢出的。 csv不考虑,需要设置数据列格式。
zbdzjx 2016-09-19
  • 打赏
  • 举报
回复
如果不考虑格式,就导出csv格式看看。
ArmStronger 2016-09-19
  • 打赏
  • 举报
回复
引用 2 楼 mulinyeyu 的回复:
[quote=引用 1 楼 cfz379945430 的回复:] 不分页应该是办不到的吧,每页条数都有限制
Excel 07 及以上版本 每页可存储100多万行数据,这个是没问题的[/quote] 那你可以看看NPOI,很简单方便的
mulinyeyu 2016-09-19
  • 打赏
  • 举报
回复
引用 1 楼 cfz379945430 的回复:
不分页应该是办不到的吧,每页条数都有限制
Excel 07 及以上版本 每页可存储100多万行数据,这个是没问题的
ArmStronger 2016-09-19
  • 打赏
  • 举报
回复
不分页应该是办不到的吧,每页条数都有限制

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧