POI經過模板導出EXCEL文件

  通常的EXCEL導出使用POI先建立一個HSSFWorkbook,而後經過不斷建立HSSFRow,HSSFCell後設置單元格內容即可以完成導出。java

  此次在項目中須要用到模板,導出的內容包括(1.模板中的內容、樣式。2.本身須要新增的內容、樣式。),還須要設置單元格的樣式,在網上搜了一些blog,完成後記錄一下。apache

  分析此次需求,最關鍵的就是如何獲取到填充了模板的新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對象想必爽歪歪了。這裏還有一個需求,就是須要設置一些單元格的樣式,這在以前我也沒有接觸到過,記錄下來。this

1  //生成單元格樣式
2 HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步建立的HSSFWorkbook對象
3 //設置背景顏色
4 cellStyle.setFillForegroundColor(HSSFColor.RED.index);
5 //solid 填充  foreground  前景色
6 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

   這樣便建立完成了一個單元格的樣式,接下來即是在特定的單元格添加樣式。spa

1 //獲取特定的單元格
2 HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
3 //設置樣式
4 cell.setCellStyle(cellStyle);  //cellStyle是上一步建立的HSSFCellStyle對象

  如此,整個需求基本完成。對於整個過程當中須要用到的其餘方法,這裏寫了一個封裝類。excel

        **  有些方法可能只適用此項目,使用時須要修改。code

  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、setCellDateValue、setCellDoubleValue、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 = new POIFSFileSystem(new FileInputStream(fi));  
 76             wb = new HSSFWorkbook(fs);
 77             sheet = wb.getSheet(sheetName); 
 78             
 79             //生成單元格樣式
 80             cellStyle = wb.createCellStyle();
 81             //設置背景顏色
 82             cellStyle.setFillForegroundColor(HSSFColor.RED.index);
 83             //solid 填充  foreground  前景色
 84             cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
 85             
 86         } catch (FileNotFoundException e) {  
 87             e.printStackTrace();  
 88         } catch (IOException e) {  
 89             e.printStackTrace();  
 90         }  
 91     } 
 92     /**
 93      *  
 94      */
 95     public HSSFRow createRow(int rowIndex) {
 96         HSSFRow row = sheet.createRow(rowIndex);
 97         return row;
 98     }
 99     /**
100      *  
101      */
102     public void createCell(HSSFRow row,int colIndex) {
103         row.createCell(colIndex);
104     }
105     /** 
106      * 第五步、設置單元格的樣式 
107      * @param rowIndex    行值 
108      * @param cellnum    列值 
109      */  
110     public void setCellStyle(int rowIndex, int cellnum) {  
111         HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
112         cell.setCellStyle(cellStyle);
113     }
114     
115     /** 
116      * 第五步、設置字符串類型的數據 
117      * @param rowIndex    行值 
118      * @param cellnum    列值 
119      * @param value        字符串類型的數據 
120      */  
121     public void setCellStrValue(int rowIndex, int cellnum, String value) {
122         if(value != null) {
123             HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
124             cell.setCellValue(value);
125         }
126     }  
127   
128     /** 
129      * 第五步、設置日期/時間類型的數據 
130      * @param rowIndex    行值 
131      * @param cellnum    列值 
132      * @param value        日期/時間類型的數據 
133      */  
134     public void setCellDateValue(int rowIndex, int cellnum, Date value) {  
135         HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
136         cell.setCellValue(value);  
137     }  
138   
139     /** 
140      * 第五步、設置浮點類型的數據 
141      * @param rowIndex    行值 
142      * @param cellnum    列值 
143      * @param value        浮點類型的數據 
144      */  
145     public void setCellDoubleValue(int rowIndex, int cellnum, double value) {  
146         HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
147         cell.setCellValue(value);  
148     }  
149   
150     /** 
151      * 第五步、設置Bool類型的數據 
152      * @param rowIndex    行值 
153      * @param cellnum    列值 
154      * @param value        Bool類型的數據 
155      */  
156     public void setCellBoolValue(int rowIndex, int cellnum, boolean value) {  
157         HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
158         cell.setCellValue(value);  
159     }  
160   
161     /** 
162      * 第五步、設置日曆類型的數據 
163      * @param rowIndex    行值 
164      * @param cellnum    列值 
165      * @param value        日曆類型的數據 
166      */  
167     public void setCellCalendarValue(int rowIndex, int cellnum, Calendar value) {  
168         HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
169         cell.setCellValue(value);  
170     }  
171   
172     /** 
173      * 第五步、設置富文本字符串類型的數據。能夠爲同一個單元格內的字符串的不一樣部分設置不一樣的字體、顏色、下劃線 
174      * @param rowIndex    行值 
175      * @param cellnum    列值 
176      * @param value        富文本字符串類型的數據 
177      */  
178     public void setCellRichTextStrValue(int rowIndex, int cellnum,  
179             RichTextString value) {  
180         HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum);  
181         cell.setCellValue(value);  
182     }  
183     
184     /** 
185      * 第六步、完成導出 
186      */  
187     public void exportToNewFile() {  
188         FileOutputStream out;  
189         try {  
190             out = new FileOutputStream(desXlsPath);  
191             wb.write(out);
192             out.close(); 
193         } catch (FileNotFoundException e) {  
194             e.printStackTrace();  
195         } catch (IOException e) {  
196             e.printStackTrace();  
197         }  
198    }  
199 
200 } 
相關文章
相關標籤/搜索