1。尝试了使用jxl,但是发现当excel表很大的时候根本无法读取,(我用了一张表,大约100列,7000行,整个文件大小8M左右),大致看了下源码,感觉他是把整个表全部读进内存,用一个List或其他容器来保存的。感觉不是很方便,如果表再大点,再碎点(指虽然每个单元格里面的内容很少,但是有很多列,很多行的表),说不定读一个表就直接OutOfMemory了。2。尝试了用JDBC-ODBC桥来读EXCEL,发现内容过长的单元格读不全,我试了在一个单元格里面填一个很长的字符串(比如1000个汉字),但是JDBC读取出来之后只有100多个汉字,后面的汉字全被截断了,后来我自己写了个简单的ResultSupport,用ResultSetMetaData来解析查询的结果,发现JDBC读excel读 很长的字符串 那列读出来的的列类型对应成了varchar,感觉是不是在数据库中varchar对应的字符串长度默认最长是255个字符,所以当有很长的字符串的时候会被截断。
用它读了一张17M的表格 大约60多列 2W行不到
代码:
InputStream myxls = new FileInputStream("1.xls"));
HSSFWorkbook wb = new HSSFWorkbook(myxls);
很不幸的直接OutOfMemoryError了所以想问大家有没有什么开源包能支持大表格的
其实用任何包都会出现这个问题, 还是建议用POI, 可以把堆大小设置大一点, 在JAVA运行参数中:
-MaxHeapSize=256M
一味增加可以使用的内存是治标不治本的方法, 如果表再大点呢 如果表达到100M呢 ~~~~~~我总不能和我的客户说 "你的数据库不可以超过100列 不可以超过1W行"吧我用JDBC-ODBC来操作就不会出现这种问题 当成数据库来操作 我可以一次只读一部分到内存里面 只是用了JDBC-ODBC后呢 遇到了过长的字符串会被截断的问题 很无奈 所以才想请问各位大虾 有没有什么好的解决方案
嗯,楼主把excel的每个栏位都设置为自动换行或自适应宽度可能是jdbc-odbc读的时候啊,以excel提供的栏位宽度来读字符串了。需要你把所有的数据都露出来才行
至于怎么用java操作让excel每个格子都“最大化”显示该格子所有字符,俺就不知道咯
把单元格的格式设置成 常规/文本 自动换行 试了下 没成功~~~~~实在不行 用C++试着写了类似的读表程序 一切正常 看来用JAVA读微软的EXCEL 还是做不到C++那么方便 超级郁闷中~~~~~~~