java 利用POI 读写 word excel ,还算方便
1. 遇到 java.io.IOException: Unable to read entire header; 0 bytes read; expected 512 bytes
主要是打开多个文档读写,就会出问题。 打开文档需要用单例模式
在一个线程里开了一个 HSSFWorkbok(excel workbook obj),在另外一个函数中又开了一个,就会出现这个问题
还有一个大坑就是: 如果打开两个excel 文件, 虽然这是两个file, 但是依然会出现这个问题
我的测试函数是这样:
/**
* This function confirms , CANNOT open two HSSFWorkbook in same time, even opent two different file
* @param filepath1
* @param filepath2
*/
public void openTwoXlsSametime(String filepath1,String filepath2){
try {
FileInputStream fin1=new FileInputStream(new File(filepath1));
FileInputStream fin2=new FileInputStream(new File(filepath2));
HSSFWorkbook wk1 = new HSSFWorkbook(fin1);
HSSFWorkbook wk2 = new HSSFWorkbook(fin2);
wk1.getSheet("Workflow");
wk2.getSheet("Workflow");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
你会看到异常抛出,其实什么都没做,就是打开两个excel
2. 另外, 我还得到一个经验
就是 new FileOutputStream(new File()),这个文件如果存在,就会被清为0, 难道我应该以append 方式打开 new FileOutputStream(new File(),true) ? 确实这样,如果要即读又写,必须FileOutputStream 作为append 模式
我遇到的问题是,一个excel 既读又写,读出一个sheet 表内容,作处理后写入另一个sheet 中,这个也不行,不知道如何做
于是我只好处理excel 后, 写入csv 文本文件,然后手工拷贝到sheet 表中
3. POI write XSSFWorkbook, 写excel 日期字符串,用setCellValue(stringvalue), 打开excel 总是发现有个 leading aspotrophe ' 在里面,折腾好久,后来终于找到解决方案,
XSSFworkbook 写字符串类型数据,应该用下面方法:
XSSFCellStyle textFormatStyle = (XSSFCellStyle) workbook.createCellStyle();
textFormatStyle.setDataFormat((short)BuiltinFormats.getBuiltinFormat("text"));
XSSFCell cell = (XSSFCell) r.createCell(colIndix);
cell.setCellStyle(textFormatStyle);
参考: http://apache-poi.1045710.n5.nabble.com/Adding-dates-as-text-with-a-leading-apostrophe-td3283872.html
4. POI读写 excel ,从一个excel 中 读, 然后再写入另一个excel 中,
如何把读excel 中相应cell style ,正确的写入 excel 中?
写excel 的 cellStyle 不能简单的 new Style, 会报错。错误exception 记不得了,网上可以查到
必须读取,克隆,然后使用
origStyle = titleRow.getCell(ri).getCellStyle();
textFormatStyle = (XSSFCellStyle) wWorkbook.createCellStyle();
textFormatStyle.cloneStyleFrom(origStyle);
XSSFCell nCell = (XSSFCell) row0.createCell(ri);
nCell.setCellStyle(textFormatStyle);
5. 之前部署在Jekins 上运行,总是报错
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
有网页说, 是sellCellValue(value) 写入了一个空值,引起的, 检查了空值还是有;
有网页说, 是包冲突引起的, 有一种原因是引用了旧的poi, 另外还有一个是说xmlbean 冲突。
而我 把 xmlbean 2.3 替换为 2.6 之后,该错误消失了
6. 之前运行了很多次都没有问题,也没有改代码,忽然一天运行,就出现下面Exception:
java.lang.IllegalStateException: The maximum number of Cell Styles was exceeded. You can define up to 64000 style in a .xlsx Workbook
参考: https://github.com/MetadataConsulting/spreadsheet-builder/issues/8
检查代码,发现我在循环中重复 myStyle= (XSSFCellStyle) wWorkbook.createCellStyle();
把 mystyle 定义挪到for 之外, 只是重复赋值。依然不对
干脆只赋值一次,重复使用。
分享到:
相关推荐
java实现word、excel在线预览。版本2003和2007都支持在线预览,项目需要导入一些poi相关的jar,jar之间的版本有要求。在我的资源列表,有相关的jar包可以下载。
里面有工具类,包含word和excel。支持doc。docx xls和xlsx等格式。还有稀缺的所有jar包。绝对物有所值
POI是java对Word和Excel 文件操作的插件,这文档主要是教我们怎么使用POI插件对Word和Excel文件进行读写操作
将assets中.xml中的doc文件中,就会生成word文档和excel文档
POI修改word、excel、pdf、ppt文件属性如作者以及将其转成html
基于poi实现word/excel转换为HTML(且兼容.doc.docx.xls.xlsx) 对于简单的word Excel 转换 足够。excel转换时存在火狐浏览器不兼容乱码问题,希望多多交流。
相同格式的excel进行合并,或者对多个word文档进行合并,word文档包含图片。
JAVA操作MS office 工具 POI操作WORD 官方测试案例 DEMO(含jar包,IDEA) 可直接运行测试。 ------------------------------------------------------ 1 什么是Apache POI 全称Apache POI,使用Java编写的免费...
Word、Excel等常用文档格式通过POI转换为html页面,亲测,可用。Word、Excel等常用文档格式通过POI转换为html页面,亲测,可用。Word、Excel等常用文档格式通过POI转换为html页面,亲测,可用。Word、Excel等常用...
POI可以实现Word,Exce的导入导出。可以进行jxl的升级,来解决版本低的问题。
POI处理EXCEL和WORD文件的JAR包和详细资料
java读写Excel,POI.JAR,Word内容读取
Java通过POI读取Excel遍历数据,根本word模板批量生成word文档,demo可运行,可根据需求修改
poi操作excel,word文件,office2003及office2007以上都支持,程序利用poi可提取word文档及excel文档内容生成txt文件,程序中对poi类有定制化改写。
poi将word、PPT、Excel转pdf实现在线预览的jar包
利用poi技术生成excel报表和读取word文档内容
JAVA读取WORD_EXCEL_POWERPOINT_PDF文件的方法(poi)
基于poi实现word、excel等文件生成,支持图表(柱状图、折线图、条形图、饼状图)等。并支持word和excel转成pdf文件输出。
用于java使用poi技术,读取word文档,和生成excel表格
POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法