jxl中WritableCellFormat的问题

zsx1989 2011-03-25 06:24:31
现在在学jxl,当我定义完WritableCellFormat,再次调用setBackGround时报异常

/**向Excel中输入带格式的内容,操作excel 字体 背景色 合并单元格 列宽等
* @param fileName 要生成的文件名
*/
public void writeFormatExcel(String fileName){
WritableWorkbook wwb = null;
try {
//创建工作薄
wwb = Workbook.createWorkbook(new File("D:\\"+fileName));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(wwb!=null){
//创建10行10列的工作表
WritableSheet ws = wwb.createSheet("sheet0", 0);
ws.setColumnView(0, 10);
try {
ws.setRowView(0, 400);
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//设置字体格式
WritableFont wf = new WritableFont(WritableFont.TIMES);
try {
wf.setColour(Colour.RED);
wf.setPointSize(15);
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//定义单元格格式
WritableCellFormat wcf = new WritableCellFormat(wf);
//设置单元格背景颜色
try {
wcf.setBackground(Colour.BLUE);
wcf.setAlignment(Alignment.CENTRE);
} catch (WriteException e) {
e.printStackTrace();
}
try {
//合并单元格
ws.mergeCells(2, 0, 4, 0);
//将单元格第一行Label输出
ws.addCell(new Label(0,0,"姓名",wcf));
ws.addCell(new Label(1,0,"性别",wcf));
ws.addCell(new Label(2,0,"住址",wcf));
ws.addCell(new Label(5,0,"邮箱",wcf));
ws.addCell(new Label(6,0,"时间",wcf));
//将第二行背景色设为灰色
wcf.setBackground(Colour.GRAY_25);
//将第二行的“地址”分为“省-市-县”
ws.addCell(new Label(2,1,"省",wcf));
ws.addCell(new Label(3,1,"市",wcf));
ws.addCell(new Label(4,1,"县",wcf));
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String string = "";
for(int i=2;i<9;i++){
for(int j=0;j<7;j++){
switch (j){
case 0: string = "张恕鑫"+i;break;
case 1: string = "男";break;
case 2: string = "河南省";break;
case 3: string = "驻马店市";break;
case 4: string = "遂平县";break;
case 5: string = "shuxin@126.com"+i;break;
case 6:
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd HH:mm:ss");
Date date = new Date();
string = sdf.format(date);break;
default: break;
}
Label label = new Label(j,i,string);
try {
ws.addCell(label);
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
try {
wwb.write();
wwb.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

异常为

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)
at com.zsx.Excel.TestExcel.writeFormatExcel(TestExcel.java:177)
at com.zsx.Excel.TestExcel.main(TestExcel.java:266)

谢谢了,欢迎回答。
...全文
1889 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsx1989 2011-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 magong 的回复:]
这个异常的意思是说,格式对象wcf已经有Cell用过了,所以不能再修改。
你可以创建一个新的WritableCellFormat对象,给第二种单元格使用。
[/Quote]

那假如我需要十种格式,我就要创建10个WritableCellFormat对象?是这样吗?
magong 2011-03-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zsx1989 的回复:]

那假如我需要十种格式,我就要创建10个WritableCellFormat对象?是这样吗?
[/Quote]
然。
magong 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 zsx1989 的回复:]
jxl.write.biff.JxlWriteException: Attempt to modify a referenced format

[/Quote]
这个异常的意思是说,格式对象wcf已经有Cell用过了,所以不能再修改。
你可以创建一个新的WritableCellFormat对象,给第二种单元格使用。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧