一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出。
这次在项目中需要用到模板,导出的内容包括(1.模板中的内容、样式。2.自己需要新增的内容、样式。),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下。
分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容。
1 File fi = new File("F:/usr/user.xls");
2 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi));
3 HSSFWorkbook wb = new HSSFWorkbook(fs);
这样便可以获取到我们熟悉的HSSFWorkbook对象了,操作熟悉的HSSFWorkbook对象想必爽歪歪了。这里还有一个需求,就是需要设置一些单元格的样式,这在之前我也没有接触到过,记录下来。
1 //生成单元格样式
2 HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步创建的HSSFWorkbook对象
3 //设置背景颜色
4 cellStyle.setFillForegroundColor(HSSFColor.RED.index);
5 //solid 填充 foreground 前景色
6 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
这样便创建完成了一个单元格的样式,接下来便是在特定的单元格添加样式。
1 //获取特定的单元格
2 HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
3 //设置样式
4 cell.setCellStyle(cellStyle); //cellStyle是上一步创建的HSSFCellStyle对象
如此,整个需求基本完成。对于整个过程中需要用到的其他方法,这里写了一个封装类。
** 有些方法可能只适用此项目,使用时需要修改。
1 package com.pole.educate.excel;
2 import java.io.File;
3 import java.io.FileInputStream;
4 import java.io.FileNotFoundException;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.util.Calendar;
8 import java.util.Date;
9
10 import org.apache.poi.hssf.usermodel.HSSFCell;
11 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
12 import org.apache.poi.hssf.usermodel.HSSFRow;
13 import org.apache.poi.hssf.usermodel.HSSFSheet;
14 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
15 import org.apache.poi.hssf.util.HSSFColor;
16 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
17 import org.apache.poi.ss.usermodel.RichTextString;
18 /**
19 * 共分为六部完成根据模板导出excel操作:<br/>
20 * 第一步、设置excel模板路径(setSrcPath)<br/>
21 * 第二步、设置要生成excel文件路径(setDesPath)<br/>
22 * 第三步、设置模板中哪个Sheet列(setSheetName)<br/>
23 * 第四步、获取所读取excel模板的对象(getSheet)<br/>
24 * 第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateva lue、setCellDoubleva lue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)<br/>
25 * 第六步、完成导出 (exportToNewFile)<br/>
26 *
27 * @author Administrator
28 *
29 */
30 public class ExcelWriter {
31 POIFSFileSystem fs = null;
32 HSSFWorkbook wb = null;
33 HSSFSheet sheet = null;
34 HSSFCellStyle cellStyle = null;
35
36 private String srcXlsPath = "";// excel模板路径
37 private String desXlsPath = ""; // 生成路径
38 private String sheetName = "";
39
40 /**
41 * 第一步、设置excel模板路径
42 * @param srcXlsPaths
43 */
44 public void setSrcPath(String srcXlsPaths) {
45 this.srcXlsPath = srcXlsPaths;
46 }
47
48 /**
49 * 第二步、设置要生成excel文件路径
50 * @param desXlsPaths
51 * @throws FileNotFoundException
52 */
53 public void setDesPath(String desXlsPaths) throws FileNotFoundException {
54 this.desXlsPath = desXlsPaths;
55 }
56
57 /**
58 * 第三步、设置模板中哪个Sheet列
59 * @param sheetName
60 */
61 public void setSheetName(String sheetName) {
62 this.sheetName = sheetName;
63 }
64
65 /**
66 * 第四步、获取所读取excel模板的对象
67 */
68 public void getSheet() {
69 try {
70 File fi = new File(srcXlsPath);
71 if(!fi.exists()){
72 //System.out.println("模板文件:"+srcXlsPath+"不存在!");
73 return;
74 }
75 fs = n