POI經過模板導出EXCEL文件

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

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

        分析此次需求,最關鍵的就是如何獲取到填充了模板的新HSSFWorkbook,若是獲取到它,咱們能夠熟練的往裏面添加內容。字體

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

        這樣即可以獲取到咱們熟悉的HSSFWorkbook對象了,操做熟悉的HSSFWorkbook對象想必爽歪歪了。這裏還有一個需求,就是須要設置一些單元格的樣式,這在以前我也沒有接觸到過,記錄下來。this

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

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

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

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

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

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();  
        }  
   }  

}
相關文章
相關標籤/搜索