参考文章:http://www.xuebuyuan.com/791774.html (感谢)
问题描述:
在修改别人的代码时遇到用jxl 读取生成的excel模板,在读取过程中一切正常,但在写入新的EXCEL时调用.write()方法出现下标越界异常,跟着读取数据未发现问题,抛出异常显示未jxl引用包中相关,查询资料,发现这篇文章作者描述的情况及出现的问题与本人相似90%;Excel模板版本是office2007,具体模板的生成制作时的版本不清楚,模板中内容格式设置也不清楚的情况下,我的异常显示FormattingRecords.class这个类 rationalize方法中,根据参考文章中作者描述的方法,在相关代码处捕获异常,跳出循环后,代码执行正常。遇到类似问题的同学,可尝试参考修改,将jxl包中出现异常位置反编译跟踪修改。
部分代码:(红色为修改代码)
public IndexMapping rationalize(IndexMapping fontMapping, IndexMapping formatMapping)
{
XFRecord xfr = null;
for (Iterator it = this.xfRecords.iterator(); it.hasNext(); )
{
xfr = (XFRecord)it.next();
if (xfr.getFormatRecord() >= 164)
{
xfr.setFormatIndex(formatMapping.getNewIndex(xfr.getFormatRecord()));
}
xfr.setFontIndex(fontMapping.getNewIndex(xfr.getFontIndex()));
}
ArrayList newrecords = new ArrayList(21);
IndexMapping mapping = new IndexMapping(this.xfRecords.size());
int numremoved = 0;
int numXFRecords = Math.min(21, this.xfRecords.size());
for (int i = 0; i < numXFRecords; i++)
{
newrecords.add(this.xfRecords.get(i));
mapping.setMapping(i, i);
}
if (numXFRecords < 21)
{
logger.warn("There are less than the expected minimum number of XF records");
return mapping;
}
for (int i = 21; i < this.xfRecords.size(); i++)
{
XFRecord xf = (XFRecord)this.xfRecords.get(i);
boolean duplicate = false;
Iterator it = newrecords.iterator();
while ((it.hasNext()) && (!
duplicate))
{
XFRecord xf2 = (XFRecord)it.next();
if (xf2.equals(xf))
{
duplicate = true;
mapping.setMapping(i, mapping.getNewIndex(xf2.getXFIndex()));
numremoved++;
}
}
if (!duplicate)
{
newrecords.add(xf);
mapping.setMapping(i, i - numremoved);
}
}
for (Iterator i = this.xfRecords.iterator(); i.hasNext(); ) {
try
{
XFRecord xf = (XFRecord)i.next();
xf.rationalize(mapping);
} catch (Exception e) {
break;
}
}
this.xfRecords = newrecords;
return mapping;
}
相关推荐
jxl导出excel必须的Jar包 import jxl.Workbook; import jxl.format.Alignment;...import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException;
jxl.jar包简介/java操作excel jxl.jar包简介/java操作excel
jxl数据导入导出jxl数据导入导出jxl数据导入导出 jxl数据导入导出jxl数据导入导出jxl数据导入导出
java jxl 添加水印 修改编译版,实现excel水印必备 java jxl 添加水印 修改编译版,实现excel水印必备
jxl添加水印 修改编译版 经过测试 public class testJxl { public static void main(String[] args) throws Exception { OutputStream out = new FileOutputStream("./aaaa.xls"); // 写入到FileInputStream ...
今天调试了一下,发现在jxl.write.biff.WritableSheetCopier.shallowCopyCells方法中有如下代码 Java代码 if (c.getCellFeatures() != null & c.getCellFeatures().hasDataValidation()) { validatedCells....
import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class ExcelUtils { /**读取Excel文件的内容 * @param file 待读取的文件...
jxlApi word操作 All Classes Packages jxl jxl.demo jxl.format jxl.write
JXL教程 JXL开发文档 JXL学习笔记 JXL示例。
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(os)); 如果这个文件已经存在,那么我们可以在这个文件里面加入一个sheet为了和以前的数据进行分开; jxl.write.WritableSheet ws = wwb....
jxl操作 jxl操作 jxl操作 jxl操作 jxl操作 jxl操作
jxl导出excel加水印 WritableWorkbook、WritableSheet、WritableCellFormat
因数据安全,需要将生成的报表xls,添加水印,所以自已在jxl中进行代码修改。 使用例子 public class testJxl { public static void main(String[] args) throws Exception { OutputStream out = new ...
java语言操纵excel文档。以及jxl的帮助文档
最新的jxl.jar 下载 (包含jxl源码) 稳定新最好,成熟,不像之前的版本报数组越界的错误
jxl api说明文档 不包含pai包
NULL 博文链接:https://liuzidong.iteye.com/blog/1071677
因数据安全,需要将生成的报表xls,添加水印,所以自已在jxl中进行代码修改。 使用例子 public class testJxl { public static void main(String[] args) throws Exception { OutputStream out = new ...
java实现数据的导入与导出依赖包 jxl.jar
jxl.jar是用来操作excel文件的jar包,其特性是速度快占用内存小,缺点是只能操作旧版本xls文件,对新版本xlsx不兼容。