Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2631536
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: Java

2017-08-11 14:36:43

这个问题困扰了一段时间,因为有其它更重要的任务,直到今日才解决
错误信息:

现象A:
测试时,在wps建的xls带密码的excel文件,只在A1格有值时,出现异常,若在A2格填上值,则正常。
现象B:
导出新的excel xls带密码的文件,若用wps打开,就弹出一个输入密码提示框后关闭xls文件,此时打开此xls文件也异常,不用wps打开是没有问题的。
但反复比较过,wps工具没有改变xls文件。

用poi3.216源代码跟踪后发现,得到用户名时有异常。
public WriteAccessRecord(RecordInputStream in) {
................
if (nChars > DATA_SIZE || (is16BitFlag & 0xFE) != 0) {
// String header looks wrong (probably missing)
// OOO doc says this is optional anyway.
// reconstruct data
byte[] data = new byte[3 + in.remaining()];
LittleEndian.putUShort(data, 0, nChars);
LittleEndian.putByte(data, 2, is16BitFlag);
in.readFully(data, 3, data.length-3);
String rawValue = new String(data, StringUtil.UTF8);
//String rawValue = new String(data);
//setUsername(rawValue.trim());
setUsername("aaa");
return;
}
................
}
把setUserName(userName);userName长度不超过int DATA_SIZE = 112;即可
实现方法,把更改后生成的WriteAccessRecord.class替换poi-3.16.jar中原来WriteAccessRecord.class即可.
暂时跳过setUsername异常问题.


阅读(4616) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~