这个问题困扰了一段时间,因为有其它更重要的任务,直到今日才解决
错误信息:
现象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异常问题.
阅读(5028) | 评论(0) | 转发(0) |