jxl使用中存在问题总结

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方法时就不会丢失该“标签”了。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值