使用jxl利用模板导出excel文件

通常会有需要将数据以excel的形式导出(如各种统计报表),而需要导出的excel中包含大量复杂的格式,如单元格合并,字体及单元格背景设置,边框设置等等。虽然可以通过jxl在代码中完成这些工作,但是比较麻烦,而且不易于维护;因此,可以将固定的内容事先写到一个excel文件中,并将该文件保存在resource目录下,需要执行导出的时候,根据该文件创建一个新的工作簿对象,在此基础上完成数据的填充工作,参考下面的代码片段:

 // 创建只读的 Excel 工作薄的对象
 jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));
 // 创建可写入的 Excel 工作薄对象
 jxl.write.WritableWorkbook  wwb = Workbook.createWorkbook(new File(targetfile), rw);

 // 读取第一张工作表
 jxl.write.WritableSheet ws = wwb.getSheet(0);
 // 获得第一个单元格对象
 jxl.write.WritableCell wc = ws.getWritableCell(0, 0);

 // 判断单元格的类型 , 做出相应的转化
 if(wc.getType() == CellType.LABEL)
 {
 Label l = (Label)wc;
    l.setString("The value has been modified.");
 }
 // 写入 Excel 对象
 wwb.write();
 // 关闭可写入的 Excel 对象
 wwb.close();
 // 关闭只读的 Excel 对象
 rw.close();

 

之所以使用这种方式构建 Excel 对象,完全是因为效率的原因,因为上面的示例才是 API 的主要应用。为了提高性能,在读取工作表时,与数据相关的一些输出信息,所有的格式信息,如:字体、颜色等等,是不被处理的,因为我们的目的是获得行数据 的值,既使没有了修饰,也不会对行数据的值产生什么影响。唯一的不利之处就是,在内存中会同时保存两个同样的工作表,这样当工作表体积比较大时,会占用相 当大的内存,但现在好像内存的大小并不是什么关键因素了。

一旦获得了可写入的工作表对象,我们就可以对单元格对象进行更新的操作了,在这里我们不必调用 API 提供的 add() 方法,因为单元格已经于工作表当中,所以我们只需要调用相应的 setXXX() 方法,就可以完成更新的操作了。

尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,以使单元格的内容以不同的形式表现。

新生成的工作表对象是可写入的,我们除了更新原有的单元格外,还可以添加新的单元格到工作表中,这与示例 2 的操作是完全一样的。

最后,不要忘记调用 write() 方法,将更新的内容写入到文件中,然后关闭工作薄对象,这里有两个工作薄对象要关闭,一个是只读的,另外一个是可写入的。

你可能感兴趣的:(使用jxl利用模板导出excel文件)