1。尝试了使用jxl,但是发现当excel表很大的时候根本无法读取,(我用了一张表,大约100列,7000行,整个文件大小8M左右),大致看了下源码,感觉他是把整个表全部读进内存,用一个List或其他容器来保存的。感觉不是很方便,如果表再大点,再碎点(指虽然每个单元格里面的内容很少,但是有很多列,很多行的表),说不定读一个表就直接OutOfMemory了。2。尝试了用JDBC-ODBC桥来读EXCEL,发现内容过长的单元格读不全,我试了在一个单元格里面填一个很长的字符串(比如1000个汉字),但是JDBC读取出来之后只有100多个汉字,后面的汉字全被截断了,后来我自己写了个简单的ResultSupport,用ResultSetMetaData来解析查询的结果,发现JDBC读excel读 很长的字符串 那列读出来的的列类型对应成了varchar,感觉是不是在数据库中varchar对应的字符串长度默认最长是255个字符,所以当有很长的字符串的时候会被截断。

解决方案 »

  1.   

    有个东西 叫poi  还是很好用的
      

  2.   

    java excel api 可以啊
      

  3.   

    还是apache的poi好用一些,换成poi吧 
      

  4.   


    用它读了一张17M的表格 大约60多列 2W行不到 
    代码:
    InputStream myxls = new FileInputStream("1.xls"));
    HSSFWorkbook wb = new HSSFWorkbook(myxls);
    很不幸的直接OutOfMemoryError了所以想问大家有没有什么开源包能支持大表格的
      

  5.   


    其实用任何包都会出现这个问题, 还是建议用POI, 可以把堆大小设置大一点, 在JAVA运行参数中:
    -MaxHeapSize=256M
      

  6.   


    一味增加可以使用的内存是治标不治本的方法, 如果表再大点呢 如果表达到100M呢 ~~~~~~我总不能和我的客户说 "你的数据库不可以超过100列 不可以超过1W行"吧我用JDBC-ODBC来操作就不会出现这种问题 当成数据库来操作 我可以一次只读一部分到内存里面 只是用了JDBC-ODBC后呢 遇到了过长的字符串会被截断的问题 很无奈 所以才想请问各位大虾 有没有什么好的解决方案
      

  7.   


    嗯,楼主把excel的每个栏位都设置为自动换行或自适应宽度可能是jdbc-odbc读的时候啊,以excel提供的栏位宽度来读字符串了。需要你把所有的数据都露出来才行
    至于怎么用java操作让excel每个格子都“最大化”显示该格子所有字符,俺就不知道咯
      

  8.   

    ,我一直用jxl,还没有遇到楼主的情况,因为我只是写,不读
      

  9.   


    把单元格的格式设置成 常规/文本 自动换行 试了下 没成功~~~~~实在不行 用C++试着写了类似的读表程序 一切正常 看来用JAVA读微软的EXCEL 还是做不到C++那么方便 超级郁闷中~~~~~~~ 
      

  10.   

    把excel文件导出来csv格式,或者文本文件解析算了 :p
      

  11.   

    哎,我跟你用的方法一样啊,用jxl读取大批量文件很麻烦,用操作数据库的方法又会截断字符,不知道你解决了没有啊。