【异常解决】jxl.write.biff.JxlWriteException: Attempt to modify a referenced format

一般用jxl在插入单元格内容之前都需要对ceil进行各种各样的样式设置,比如以下的:

WritableFont font1 = new WritableFont(WritableFont.TIMES, 12,
					WritableFont.BOLD);
			WritableCellFormat formatTitle = new WritableCellFormat(font1);// 表头样式
			formatTitle.setBorder(jxl.format.Border.ALL,
					jxl.format.BorderLineStyle.THIN);
			formatTitle.setAlignment(jxl.format.Alignment.CENTRE);
			WritableCellFormat formatCeil = new WritableCellFormat();// 非表头样式
			formatCeil.setAlignment(jxl.format.Alignment.CENTRE);
			formatCeil.setBorder(jxl.format.Border.ALL,
					jxl.format.BorderLineStyle.THIN);

然后后面就用这两个对象进行插入的时候重用样式,比如:

Label titel0 = new Label(0, 0, "日期", formatTitle);// (列,行,值)
wsheet0.addCell(titel0);

今天遇到一个问题,就是想要在原来的样式对象的基础上进行增量修改的,再对某一些单元格进行插入,我们很理所当然地会想到以下的写法:

//在新的对象上增量设置,减少代码冗余
WritableCellFormat newFormat=formatTitle4sheet3;//下单错误统计头橙色
			newFormat.setBackground(Colour.ORANGE);

可是,本应该“理所当然”正确运行的代码却发生了异常:

jxl.write.biff.JxlWriteException: Attempt to modify a referenced format
    at jxl.write.biff.CellXFRecord.setBackground(CellXFRecord.java:100)
    at jxl.write.WritableCellFormat.setBackground(WritableCellFormat.java:192)
    at jxl.write.WritableCellFormat.setBackground(WritableCellFormat.java:180)
后来查阅资料得知,已经被引用了的WritableCellFromat对象是不可以再修改的,否则就报以上的错了。大概是处于安全的考虑...

将代码冗余地再重新设置一遍,将上面定义表头样式的句子和增量的样式定义,啰嗦地重写一遍,对象名字重新取一下就可以了,相信大家不需要再看这么无聊的代码了吧,就不贴了。

然后运行就正常了。


你可能感兴趣的:(java,异常)