读取Excel模板动态写入数据并生成Excel
(2010-11-11 10:10:54)
标签:
杂谈 |
分类: jxl |
来支持写入,这就是WritableWorkbook。那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了几个
静态的createWorkbook方法返回WritableWorkbook实例,可以看到众多createWorkbook方法主要分为两类:一个参数
和两个参数。简单分析可以得知前者仅仅是用来直接生成Excel文件,后者先读取模板再向模板写入数据然后生成Excel。
(还有一个三参数方法加上一个用来设置workbook的参数)
现在按照上篇文章中所讲述的流程来看看读取模板并写入需要那些步骤。
第一步:选择模板文件:
Workbook wb = Workbook.getWorkbook(new File(realpath));
第二步:通过模板得到一个可写的Workbook:
WritableWorkbook wwb = Workbook.createWorkbook(targetFile,
wb);
第一个参数是一个输出流对象,比如可以
ByteArrayOutputStream targetFile = new
ByteArrayOutputStream();
这样定义这个输出流对象。第二个参数代表了要读取的模板。
第三步:选择模板中名称为StateResult的Sheet:
WritableSheet wws = wwb.getSheet("StateResult");
如果需要也可以创建Sheet
WritableSheet wws = wwb.createSheet("Sheet名称",i);
第四步:选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格:
Label A1 = (Label)wws.getWritableCell(0,0);
A1.setString("单元格内容")
或
Number A2 =
(Number)wws.getWritableCell(0,1);//Number是jxl.write.Number
A2.setValue(3.3);
也可以创建新的单元格并且加入到Sheet中
Label C1 = new Label(2,0,"单元格内容");
wws.addCell(C1);
或
Number C1 = new Number(2,0,3.3);
wws.addCell(C1);
在生成Excel报表的时候还会遇到一种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显示,而字符串型单元格以另
一种格式显示。这些可以通过WritableFont、NumberFormat、WritableCellFormat等实现,下例给单元格A1、A2添加了不同的格式。
-
WritableFont
font= newWritableFont(WritableFont.createFont( "宋体"),10,WritableFont.NO_BOLD); -
NumberFormat
format new= NumberFormat( "###,##0.00");//NumberFormat是jxl.write.NumberFormat -
WritableCellFormat
cellFormat1 new= WritableCellFormat(font,format); -
WritableCellFormat
cellFormat2 new= WritableCellFormat(font); -
cellFormat1.setBorder(Border.ALL,
jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border -
cellFormat2.setBorder(Border.ALL,
jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border -
A2.setCellFormat(cellFormat1);
-
A1.setCellFormat(cellFormat2);
还有不要忘记关闭WritableWorkbook和Workbook以释放资源:
wwb.close();
wb.close();
最后就可以你需要的方式从输出流targetFile中取得Excel,比如直接生成文件存本地,输出到客户端浏览器等。
如果还有其他需求,按照这种思路,再参照APIDoc相信可以很容易的解决。
-
public
class JxlExcel{ -
public static void main(String[] args) -
{ -
try -
{ -
String url="c:/test.xls"; -
Workbook wb = Workbook.getWorkbook(new File(url)); -
ByteArrayOutputStream targetFile = new ByteArrayOutputStream(); -
WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb); -
WritableSheet wws = wwb.getSheet(0); -
Label C1 = new Label( 2,0,"单元格内容"); -
wws.addCell(C1); -
wwb.write(); -
wwb.close(); -
wb.close(); -
FileOutputStream fos = new FileOutputStream( "c:/test1.xls"); -
targetFile.writeTo(fos); -
targetFile.close(); -
System.out.println("盒封面.xls"); -
} -
catch (Exception e) -
{ -
e.printStackTrace(); -
} -
-
} -
}