大数据量 的excel读取时报内存溢出

深蓝夜夜 2015-03-30 05:08:57
读取一个数据量大的excel文档,目前有10W条,还在持续增长 ,创建HSSFWorkbook wb = new HSSFWorkbook(fs); 对象时 内存溢出
求个解决方案
...全文
1743 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
希咚的故事 2015-09-30
  • 打赏
  • 举报
回复
poi有专门针对大数量处理的类,可以关注下
wrong1111 2015-09-30
  • 打赏
  • 举报
回复
以前XLS一个页面的数据最大36556行记录。后来可以无限大。但是不建议全部写到一个标签页里面。 每3万行或者10万行写入一个标签页。 另外数据可以一次几千几万循环处理。不需要全部加载到内存。
tony4geek 2015-09-13
  • 打赏
  • 举报
回复
你的数据是10万条然后写到excel里面?
微甜灬呼吸 2015-09-08
  • 打赏
  • 举报
回复
我也碰到过poi导出时内存溢出的时候 后来的方案是分多个导出 感觉poi导出的时候吃的内存 比导出的文件大好多倍 ╮(╯▽╰)╭
  • 打赏
  • 举报
回复
调eclipse 调tomcat 调jvm 用sxssf
dylan_ovo 2015-09-01
  • 打赏
  • 举报
回复
 
using Aspose.Cells;
 public DataSet ReadExcel()
        {
            try
            {
                DataSet ds = new DataSet();
                Worksheet sheet = null;
                Workbook book = new Workbook();
                string excelPath = AppDomain.CurrentDomain.BaseDirectory + "Data\\html\\" +
                                   HttpUtility.UrlDecode("国内进程.xlsx");
                book.Open(excelPath);
                for (int i = 0; i < book.Worksheets.Count; i++)
                {
                    sheet = book.Worksheets[i];
                    DataTable dtTemp = new DataTable();
                    dtTemp.TableName = sheet.Name;
                    for (int x = 0; x < sheet.Cells.MaxDataRow + 1; x++)
                    {
                        DataRow dRow = null;
                        for (int y = 0; y < sheet.Cells.MaxDataColumn + 1; y++)
                        {
                            string value = sheet.Cells[x, y].StringValue.Trim();
                            if (x == 0)
                            {
                                DataColumn dCol = new DataColumn(value);
                                dtTemp.Columns.Add(dCol);
                            }
                            else
                            {
                                if (y == 0)
                                    dRow = dtTemp.NewRow();

                                dRow[y] = value;
                            }
                        }
                        if (dRow != null)
                        {
                            dtTemp.Rows.Add(dRow);
                        }
                    }
                    ds.Tables.Add(dtTemp);
                }
                sheet = null;
                book = null;
                return ds;
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("ReadExcel方法异常", ex);
                return null;
            }

        }
Jx0000000000000 2015-08-30
  • 打赏
  • 举报
回复
小龙在线 2015-08-26
  • 打赏
  • 举报
回复
要导入数据库吗?很多工具可以直接用的
mqmmx 2015-08-20
  • 打赏
  • 举报
回复
excel的文件可以用ado.net 的方法读啊, 把sheet当成是数据表,直接sql 就行了。性能比office组件好得多
Mr_yyy 2015-07-17
  • 打赏
  • 举报
回复
10W条应该不会溢出的(以前做过这方面的数据导入),是不是楼主的哪里操作不对?
xuyelong1 2015-07-17
  • 打赏
  • 举报
回复

 private static List<String[]> readerExcel(String path, String sheetName,  
            int minColumns) throws IOException, OpenXML4JException,  
            ParserConfigurationException, SAXException {  
        OPCPackage p = OPCPackage.open(path, PackageAccess.READ);  
        XLSXCovertCSVReader xlsx2csv = new XLSXCovertCSVReader(p, System.out,  
                sheetName, minColumns);  
        List<String[]> list = xlsx2csv.process();  
        p.close();  
        return list;  
    }  
xuyelong1 2015-07-17
  • 打赏
  • 举报
回复
使用POI的CVS模式处理大数据XLSX文件。
zdb814390564 2015-04-10
  • 打赏
  • 举报
回复
分批导出,比如要导出10w条,分10次导出,一次1w条。就是时间久点
  • 打赏
  • 举报
回复
你是一次性把10w都加载到内存里啊!
杭州老菜鸟 2015-04-02
  • 打赏
  • 举报
回复
10W条就溢出了?调大内存

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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