【異常解決】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對象是不可以再修改的,否則就報以上的錯了。大概是處於安全的考慮...

將代碼冗餘地再重新設置一遍,將上面定義表頭樣式的句子和增量的樣式定義,囉嗦地重寫一遍,對象名字重新取一下就可以了,相信大家不需要再看這麼無聊的代碼了吧,就不貼了。

然後運行就正常了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章