客户要求从数据库导出6万条数据,每条记录50个字段,每个字段255长,共750M的内容.我起初用POI软件包,后面发现它只能整个workbook写入文件,而750M的workbook在内存中放不下的,后来用jxl软件包,还是不行,因为它修改已经excel的方法是将已有excel载入内存,然后复制一份,然后才可以往里面添加数据,文档中解决OutOfMemory建议的方法是加大JVM的内存,却没有其它的方法.  网上有帖子说:"大数据量 用java 调用vba 用模板生成",用vba(Visual Basic For Application)真的能解决大量数据导入Excel问题吗?
   相信很多人都遇到过将数据库中的数据导入到Excel文件的问题,当数据量过大时,你们是怎么处理的呢?
  谢谢!

解决方案 »

  1.   

    先建一个空文件,然后用sql分页,每1000条查一次,直接写到文件里去,这样一边查一边写
      

  2.   

    这么多问POI的呵呵,我遇到过这样的问题。增加内存也解决不了问题。 
    我已经解决,你首先要知道   HTML   和   Excel之间通过改后缀名是可以相互转换的。 
    所以,你可以先写HTML,这样内存不会溢出。写好后再改成xls后缀名。 注: 
    HTML   和   Excel之间的转换,你可以参考。打开一个EXCEL,然后,选择另存为网页。 
    你可以看一下这个HTML的源码。 
    你直接把这个HTML文件后缀名改为xls,打开后效果和刚才那个EXCEL一样。 
    但是会文件会变大。但是,压缩后比EXCEL还小。 不知道说明白没。
      

  3.   

    大数据量,分页呀,这有什么难处理的,750Mb,时间长一点而已
    而且一个sheet的最大行数为65535,超过就需要写到一个新的sheet
      

  4.   

    谢谢livan1038 的启示,客户答应可以生成多个文件.
    也谢谢Runningboy007 的方法!
      

  5.   

    如果字段中间没有带逗号的信息,建议另存为csv文件(逗号分割符文件)。之后文本读取,一行一条记录,用String的split方法,用逗号做分割,每行会变成一个为每个单元字段为一个成员的数组。之后,处理这个数组就行了。很小的一个非常简单的程序就能实现你的要求了。如果有逗号,也可以找特殊符号先把他们都替换了。然后这么干,程序里面存之前,把特殊符号再换回来就行了。用replaceall方法,还是String的!很简单,但一定记得splite之后再替换,不然就白搭了!
      

  6.   

    Runningboy007 的方法最好了,我试过,不过是用C++ BUILDER,无敌地快,
      

  7.   

    怎么给回复的加分啊,奇怪的CSDN.
      

  8.   

      如果字段中间没有带逗号的信息,建议另存为csv文件(逗号分割符文件)。之后文本读取,一行一条记录,用String的split方法,用逗号做分割,每行会变成一个为每个单元字段为一个成员的数组。之后,处理这个数组就行了。很小的一个非常简单的程序就能实现你的要求了。如果有逗号,也可以找特殊符号先把他们都替换了。然后这么干,程序里面存之前,把特殊符号再换回来就行了。用replaceall方法,还是String的!很简单
        再利用多线程就好了数据量太大了不然内存溢出!
      

  9.   

    LZ说的用VBA的方式我以前用过..就是先把数据保存到一个文件中.然后在VBA里面去读这个文件,再显示在WORKSHEET上.