java語言將數據導出成excel代碼


1.需要引入的maven依賴



<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>com.springsource.org.apache.poi</artifactId>
<version>3.9.0.FINAL</version>
</dependency>


2.具體代碼如下


package com.bj58.jxedt.app.util;  
  
import java.io.File;  
import java.io.FileOutputStream;  
  
import org.apache.poi.hssf.usermodel.HSSFCell;  
import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
import org.apache.poi.hssf.usermodel.HSSFFont;  
import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
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.ss.util.CellRangeAddress;  
  
/** 
 * 該類爲數據導出成excel工具類 
 * @version 2017/08/23 
 * @author gongxiaohai 
 * 
 */  
public class ExportExcelUtil {  
  
    /** 
     * 創建一個excel文件 
     */  
    private HSSFWorkbook wb = null;  
      
    /** 
     * 創建一個excel工作表 
     */  
    private HSSFSheet sheet = null;  
      
    /** 
     * 無參構造函數 
     */  
    public ExportExcelUtil() {  
        this(new HSSFWorkbook());  
    }  
      
    /** 
     * 一個參數的構造函數(ps:不存在只有sheet的構造函數,因爲sheet是從wb中創建而來的) 
     * @param wb 
     */  
    public ExportExcelUtil(HSSFWorkbook wb){  
        this(wb,wb.createSheet());  
    }  
      
    /** 
     * 雙參構造函數 
     * @param wb        excel文件 
     * @param sheet     工作表 
     */  
    public ExportExcelUtil(HSSFWorkbook wb,HSSFSheet sheet){  
        this.wb = wb;  
        this.sheet = sheet;  
    }  
      
    /** 
     * @return      wb 
     */  
    public HSSFWorkbook getWb() {  
        return wb;  
    }  
  
    /** 
     * @param wb    set wb to this.wb 
     */  
    public void setWb(HSSFWorkbook wb) {  
        this.wb = wb;  
    }  
  
    /** 
     * @return      sheet 
     */  
    public HSSFSheet getSheet() {  
        return sheet;  
    }  
  
    /** 
     * @param sheet     set sheet to this.sheet 
     */  
    public void setSheet(HSSFSheet sheet) {  
        this.sheet = sheet;  
    }  
      
    /** 
     * 創建通用excel頭部 
     * @param headString    頭部顯示的字符串 
     * @param colSum        該報表列數 
     */  
    public void createNormalHead(String headString,int colSum){  
        HSSFRow row = sheet.createRow(0);  
        //設置第一行  
        HSSFCell cell = row.createCell(0);  
          
        //合併第一行前colSum列  
        sheet.addMergedRegion(new CellRangeAddress(0,0,0,colSum - 1));  
        //CellRangeAddress類用來替代org.apache.poi.hssf.util.Region,sheet中使用Region的一系列方法都已過期。  
        //CellRangeAddress中四個參數的意思爲,以參數爲1,2,3,4爲例:將從第0行到第1行,從第2列到第3列的單元格合併。  
          
        //定義單元格爲字符串類型  
        cell.setCellType(HSSFCell.ENCODING_UTF_16);//中文處理  
        cell.setCellValue(new HSSFRichTextString(headString));//設置單元格的值  
          
        //定義單元格格式,添加單元格表樣式,並添加到工作簿  
        HSSFCellStyle cellStyle = wb.createCellStyle();  
        //設置單元格對齊類型  
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//指定單元格水平居中對齊  
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//指定單元格垂直居中對齊  
        cellStyle.setWrapText(true);//指定單元格自動換行  
        cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);//設置左邊框顏色  
        cellStyle.setBorderLeft((short)1);//設置左邊框大小  
        cellStyle.setRightBorderColor(HSSFColor.BLACK.index);//設置右邊框顏色  
        cellStyle.setBorderRight((short)1);//設置右邊框大小  
          
        //設置單元格字體  
        HSSFFont font = wb.createFont();  
          
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//設置內容加粗  
        font.setFontName("宋體");//設置字體  
        font.setFontHeight((short)600);//設置字體高度  
        //font.setFontHeightInPoints((short)10);//設置字體大小  
          
        cellStyle.setFont(font);  
        cell.setCellStyle(cellStyle);  
          
    }  
      
    /** 
     * 創建通用excel第二行 
     * @param params    用來表示第二行中小標題內容的數組 
     */  
    public void createNormalTwoRow(String[] params){  
        //創建第二行  
        HSSFRow row = sheet.createRow(1);  
        row.setHeight((short)400);  
          
        HSSFCell cell = row.createCell(0);  
          
        cell.setCellType(HSSFCell.ENCODING_UTF_16);  
        cell.setCellValue(new HSSFRichTextString("" + ""));  
          
          
        //定義單元格格式,添加單元格樣式表,並添加到工作簿  
        HSSFCellStyle cellStyle = wb.createCellStyle();  
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設置單元格水平居中  
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設置單元格垂直居中  
        cellStyle.setWrapText(true);//設置單元格自動換行  
          
        //設置單元格字體  
        HSSFFont font = wb.createFont();  
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
        font.setFontName("宋體");  
        font.setFontHeight((short)250);  
          
        cell.setCellStyle(cellStyle);  
          
        for(int i = 0 ; i < params.length ; i ++){  
            cell = row.createCell(i);  
              
            cell.setCellValue(params[i]);  
        }  
    }  
      
    /** 
     * 設置工作表列寬 
     * @param arg   每列寬度 
     */  
    public void setSheetColumnWidth(int arg[]) throws Exception{  
        for(int i = 0 ;i < arg.length; i ++ ){  
            //設置工作表列寬  
            sheet.setColumnWidth(i, arg[i]);  
        }  
    }  
    /** 
     * 設置excel標題 
     * @param columHeader   標題字符串數組 
     */  
    public void createColumHeader(String[] columHeader){  
          
        //設置列頭,在第三行  
        HSSFRow row = sheet.createRow(2);  
          
        //指定行高  
        row.setHeight((short)600);  
          
        //設置單元格格式,添加單元格樣式,並添加到工作簿  
        HSSFCellStyle cellStyle = wb.createCellStyle();  
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設置單元格水平居中  
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設置單元格垂直居中  
        cellStyle.setWrapText(true);//設置單元格自動換行  
          
        //單元格字體  
        HSSFFont font = wb.createFont();  
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//設置字體加粗  
        font.setFontName("宋體");//設置字體格式  
        font.setFontHeight((short)250);  
        cellStyle.setFont(font);  
          
        //設置單元格背景色  
        cellStyle.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);  
        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
          
        HSSFCell cell = null;  
          
        //從第二行開頭開始創建單元格,並給每一個單元格賦值  
        for(int item = 0 ; item < columHeader.length; item ++){  
            cell = row.createCell(item);  
            cell.setCellType(HSSFCell.ENCODING_UTF_16);  
            cell.setCellStyle(cellStyle);  
            cell.setCellValue(new HSSFRichTextString(columHeader[item]));  
        }  
    }  
      
    /** 
     * 創建內容單元格 
     * @param wb        HSSFWorkbook 
     * @param row       HSSFRow 
     * @param col       short型的列索引 
     * @param align     對齊方式 
     * @param val       列值 
     */  
    public void createCell(HSSFWorkbook wb,HSSFRow row,int col,short align,String val){  
        //根據該行的第幾列創建單元格  
        HSSFCell cell = row.createCell(col);  
        //設置單元格格式  
        cell.setCellType(HSSFCell.ENCODING_UTF_16);  
        cell.setCellValue(new HSSFRichTextString(val));//設置單元格值  
          
        //設置單元格樣式,添加樣式到工作簿  
        HSSFCellStyle cellStyle = wb.createCellStyle();  
        cellStyle.setAlignment(align);//設置單元格對齊  
        cell.setCellStyle(cellStyle);  
    }  
      
    /** 
     * 創建合計行 
     * @param colSum        需要合併到的列索引 
     * @param cellValue     列值 
     */  
    public void createLastSumRow(int colSum,String[] cellValue){  
          
        HSSFCellStyle cellStyle = wb.createCellStyle();  
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//設置單元格水平居中  
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設置單元格垂直居中  
        cellStyle.setWrapText(true);//設置單元格自動換行  
          
        //單元格字體  
        HSSFFont font = wb.createFont();  
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
        font.setFontName("宋體");  
        font.setFontHeight((short)250);  
        cellStyle.setFont(font);  
          
        //獲取工作表最後一行  
        HSSFRow lastRow = sheet.createRow((short)(sheet.getLastRowNum() + 1));  
        HSSFCell sumCell = lastRow.createCell(0);  
          
        sumCell.setCellValue("合計");//設置單元格內容  
        sumCell.setCellStyle(cellStyle);  
          
        //合併  最後一行的第零列 至 最後一行的第一列  
        sheet.addMergedRegion(new CellRangeAddress(sheet.getLastRowNum(),sheet.getLastRowNum() - 1  
                ,sheet.getLastRowNum(),colSum));  
          
        for(int item = 2 ; item < (cellValue.length + 2) ; item++){  
            //定義最後一行的第三列  
            sumCell = lastRow.createCell(item);  
            sumCell.setCellStyle(cellStyle);  
              
            //定義數組,從0開始  
            sumCell.setCellValue(new HSSFRichTextString(cellValue[item - 2]));  
        }  
    }  
      
    /** 
     * 將數據輸入到excel文件 
     * @param fileName      文件名 
     */  
    public void outputExcel(String fileName){  
        //定義文件輸出流  
        FileOutputStream fos = null;  
        try{  
            fos = new FileOutputStream(new File(fileName));  
            wb.write(fos);//將數據寫入文件中  
        }catch(Exception e){  
            e.printStackTrace();  
        }finally{  
            //防止資源的浪費,保證了即使出錯也會回收資源  
            try{  
                fos.close();  
            }catch(Exception e2){  
                e2.printStackTrace();  
            }  
        }  
    }  
      
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章