POI通过模板导出EXCEL文件的实例

时间:2022-12-02 21:47:21

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出。

这次在项目中需要用到模板,导出的内容包括(1.模板中的内容、样式。2.自己需要新增的内容、样式。),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下。

分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容。

?
1
2
3
File fi = new File("F:/usr/user.xls");
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi));
HSSFWorkbook wb = new HSSFWorkbook(fs);

这样便可以获取到我们熟悉的HSSFWorkbook对象了,操作熟悉的HSSFWorkbook对象想必爽歪歪了。这里还有一个需求,就是需要设置一些单元格的样式,这在之前我也没有接触到过,记录下来。

?
1
2
3
4
5
6
//生成单元格样式
HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步创建的HSSFWorkbook对象
//设置背景颜色
cellStyle.setFillForegroundColor(HSSFColor.RED.index);
//solid 填充 foreground 前景色
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

这样便创建完成了一个单元格的样式,接下来便是在特定的单元格添加样式。

?
1
2
3
4
//获取特定的单元格
HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
//设置样式
cell.setCellStyle(cellStyle); //cellStyle是上一步创建的HSSFCellStyle对象 

 

如此,整个需求基本完成。对于整个过程中需要用到的其他方法,这里写了一个封装类。

**  有些方法可能只适用此项目,使用时需要修改。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
package com.pole.educate.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
 
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.RichTextString;
/**
 * 共分为六部完成根据模板导出excel操作:<br/>
 * 第一步、设置excel模板路径(setSrcPath)<br/>
 * 第二步、设置要生成excel文件路径(setDesPath)<br/>
 * 第三步、设置模板中哪个Sheet列(setSheetName)<br/>
 * 第四步、获取所读取excel模板的对象(getSheet)<br/>
 * 第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)<br/>
 * 第六步、完成导出 (exportToNewFile)<br/>
 *
 * @author Administrator
 *
 */
public class ExcelWriter {
  POIFSFileSystem fs = null;
  HSSFWorkbook wb = null;
  HSSFSheet sheet = null;
  HSSFCellStyle cellStyle = null;
  
  private String srcXlsPath = "";// excel模板路径
  private String desXlsPath = ""; // 生成路径
  private String sheetName = "";
 
  /**
   * 第一步、设置excel模板路径
   * @param srcXlsPaths
   */
  public void setSrcPath(String srcXlsPaths) {
    this.srcXlsPath = srcXlsPaths;
  }
 
  /**
   * 第二步、设置要生成excel文件路径
   * @param desXlsPaths
   * @throws FileNotFoundException
   */
  public void setDesPath(String desXlsPaths) throws FileNotFoundException {
    this.desXlsPath = desXlsPaths;
  }
 
  /**
   * 第三步、设置模板中哪个Sheet列
   * @param sheetName
   */
  public void setSheetName(String sheetName) {
    this.sheetName = sheetName;
  }
 
  /**
   * 第四步、获取所读取excel模板的对象
   */
  public void getSheet() {
    try {
      File fi = new File(srcXlsPath);
      if(!fi.exists()){
        //System.out.println("模板文件:"+srcXlsPath+"不存在!");
        return;
      }
      fs = new POIFSFileSystem(new FileInputStream(fi));
      wb = new HSSFWorkbook(fs);
      sheet = wb.getSheet(sheetName);
      
      //生成单元格样式
      cellStyle = wb.createCellStyle();
      //设置背景颜色
      cellStyle.setFillForegroundColor(HSSFColor.RED.index);
      //solid 填充 foreground 前景色
      cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  /**
   *
   */
  public HSSFRow createRow(int rowIndex) {
    HSSFRow row = sheet.createRow(rowIndex);
    return row;
  }
  /**
   *
   */
  public void createCell(HSSFRow row,int colIndex) {
    row.createCell(colIndex);
  }
  /**
   * 第五步、设置单元格的样式
   * @param rowIndex  行值
   * @param cellnum  列值
   */
  public void setCellStyle(int rowIndex, int cellnum) {
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
    cell.setCellStyle(cellStyle);
  }
  
  /**
   * 第五步、设置字符串类型的数据
   * @param rowIndex  行值
   * @param cellnum  列值
   * @param value    字符串类型的数据
   */
  public void setCellStrValue(int rowIndex, int cellnum, String value) {
    if(value != null) {
      HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
      cell.setCellValue(value);
    }
  }
 
  /**
   * 第五步、设置日期/时间类型的数据
   * @param rowIndex  行值
   * @param cellnum  列值
   * @param value    日期/时间类型的数据
   */
  public void setCellDateValue(int rowIndex, int cellnum, Date value) {
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
    cell.setCellValue(value);
  }
 
  /**
   * 第五步、设置浮点类型的数据
   * @param rowIndex  行值
   * @param cellnum  列值
   * @param value    浮点类型的数据
   */
  public void setCellDoubleValue(int rowIndex, int cellnum, double value) {
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
    cell.setCellValue(value);
  }
 
  /**
   * 第五步、设置Bool类型的数据
   * @param rowIndex  行值
   * @param cellnum  列值
   * @param value    Bool类型的数据
   */
  public void setCellBoolValue(int rowIndex, int cellnum, boolean value) {
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
    cell.setCellValue(value);
  }
 
  /**
   * 第五步、设置日历类型的数据
   * @param rowIndex  行值
   * @param cellnum  列值
   * @param value    日历类型的数据
   */
  public void setCellCalendarValue(int rowIndex, int cellnum, Calendar value) {
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
    cell.setCellValue(value);
  }
 
  /**
   * 第五步、设置富文本字符串类型的数据。可以为同一个单元格内的字符串的不同部分设置不同的字体、颜色、下划线
   * @param rowIndex  行值
   * @param cellnum  列值
   * @param value    富文本字符串类型的数据
   */
  public void setCellRichTextStrValue(int rowIndex, int cellnum,
      RichTextString value) {
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);
    cell.setCellValue(value);
  }
  
  /**
   * 第六步、完成导出
   */
  public void exportToNewFile() {
    FileOutputStream out;
    try {
      out = new FileOutputStream(desXlsPath);
      wb.write(out);
      out.close();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
}

以上这篇POI通过模板导出EXCEL文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/liufei-kuaile/p/7359609.html