1.写入到Excel的数字型数据在操作一定数量后无法正常格式化。
问题描述:如果插入数据需要格式化,那么将格式化数据插入excel中,数据会正常写入到excel中。但是对于数字型(Number)数据,在提示“Warning:Maximum number of format records exceeded.Using default format.”警告开始,excel写入数字型数据格式丢失。
原因:
jxl允许的每个workbook(一个excel文件)中的WritableCellFormat对象个数不超过441个,超过部分的样式会自动丢弃,由excel转而去取默认格式。
解决方法:
(1).通过多个cell共用WritableCellFormat对象来减少其生成,例如建立静态存储区存储该对象,把对象放在循环外边,最合适的方式是在操作每个workbook时,为该workbook的某种样式建立一个WritableCellFormat对象。注意:不要让多个workbook公用一个WritableCellFormat对象,这样同样会导致问题发生,具体参见问题2.
(2).将jxl.biff.FormattingRecords中“private static final int maxFormatRecordsIndex = 0x1b9;”改为“private static final int maxFormatRecordsIndex = Integer.MAX_VALUE;”,即将允许创建的WritableCellFormat对象数提高到int最大值。一般不建议采用该方法,因为这样会导致程序中创建WritableCellFormat对象过多,从而影响系统运行性能。
(3).对于从直接获取excel模板样式,并根据该样式自动写回到excel的情况,采用以上两种方式都无法解决,因为这种情况会在每次插入一个cell时都实例化一个WritableCellFormat对象,具体代码如下:
其中sheet为执行数据写入的sheet对象.(建议直接将数字型数据利用方法1固定化,而不是去读模板)。
2.如果多个workbook公用一个WritableCellFormat对象会导致某些workbook的cell的样式无法写入(或丢失)
原因:
jxl在关闭(或提交)某个workbook后,WritableCellFormat对象的格式化信息会丢失,即使该对象为静态变量。
解决方法:
通问题1的方法1。在操作每个workbook时,为该workbook的某种样式建立一个WritableCellFormat对象。
3.jxl的copySheet()方法无法复制某些sheet的样式(即复制过程中边框线丢失)
原因:
不支持。
解决方法:
不能标本兼治,但是能解决问题,那就是在excel要复制的sheet的数据区后紧邻的一列的每个单元格输入几个空格就可以了,如下图,在本excel表的红色选中区中输入空格:
4.jxl不支持text box(文本框)的相关操作(主要发生利用jxl写入数据或调用sheetcopy方法复制sheet情况下出现)。
问题描述:
有些时候excel文档需要做成打印报表,并且需要在excel中放入一些“标签”,如下图红色选中区所示:
这种“标签”好处是在excel中位置自由,不受cell限制,所以有些excel必须需要text box显示数据。
解决方法:
没有找到治标治本的办法,折中的办法就是将这些text box截图并以图片的格式存放于相应位置就可以了。这样jxl在将数据写入excel或者调用sheeCopy方法时就不会丢失该“标签”了。