1. 程式人生 > >excel Java 匯出

excel Java 匯出

今天寫一個工具類,Excel匯出,嚴格的說,並不是我寫的,拾人牙慧罷了,首先是一個整體的java程式碼

package com.core.util;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * excel工具類
 */
public class ExcelUtil {

    //建立excel文件 dataList 是準備匯出的資料 用list封裝
    public static HSSFWorkbook makeExcelFile(List<List<String>> dataList) {
        // 建立workbook
        HSSFWorkbook workbook = new HSSFWorkbook();
        //新增樣式
        HSSFCellStyle style = workbook.createCellStyle();
        //背景色
        style.setFillForegroundColor((short)10);
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //設定邊框
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        style.setBorderTop(BorderStyle.THIN);
        //居中顯示
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        //設定自動換行
        style.setWrapText(true);
        //設定字型樣式
        Font font = workbook.createFont();
        font.setFontName("黑體");
        font.setFontHeightInPoints((short)11);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        style.setFont(font);
        // 新增Worksheet
        HSSFSheet sheet = workbook.createSheet("Sheet1");
        // 建立相關內容
        for (int i = 0; i < dataList.size(); i++) {
            Row row = sheet.createRow(i);
            List<String> subList = dataList.get(i);
            for (int j = 0; j < subList.size(); j++) {
                Cell createCell = row.createCell(j);
                createCell.setCellValue(subList.get(j));
                createCell.setCellStyle(style);
                sheet.autoSizeColumn(i);
            }
        }
        return workbook;
    }

    /**
     * 把生成的Excel流輸出出去
     * @param workbook
     * @param response
     */
    public static void exportExcel(HSSFWorkbook workbook,HttpServletResponse response){
        String path = ExcelUtil.class.getResource("/").getPath();
        File filePath = new File(path.split("/classes")[0] + "/exportTemp");
        if (!filePath.exists() && !filePath.isDirectory()){
            boolean mkdir = filePath.mkdir();
        }
        Format format = new SimpleDateFormat("yyMMddHHmmss");
        String filenameTemp = path.split("/classes")[0] + "/exportTemp/"+"export" + "_" + format.format(new Date()) + ".xls";
        File filename = new File(filenameTemp);
        if (!filename.exists()) {
            try {
                boolean newFile = filename.createNewFile();
                if (newFile){
                    FileOutputStream fos = new FileOutputStream(filenameTemp);
                    workbook.write(fos);
                    fos.close();
                }
                //下載
                downFile(response, filenameTemp);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 下載檔案
     * @param response
     * @param filePath 檔案路徑
     * @author clj
     * @date 2018/3/31
     */
    public static void downFile(HttpServletResponse response, String filePath) {
        String name = filePath.split("/")[filePath.split("/").length-1];
        //讀取要下載的檔案,儲存到檔案輸入流
        try {
            // 設定頭部資訊
            response.setHeader(
                    "Content-disposition",
                    "attachment;filename="
                            + URLEncoder.encode(name, "UTF-8"));
            FileInputStream in = new FileInputStream(filePath);
            //建立輸出流
            OutputStream out = response.getOutputStream();
            //建立緩衝區
            byte buffer[] = new byte[1024];
            int len = 0;
            //迴圈將輸入流中的內容讀取到緩衝區當中
            while((len=in.read(buffer))>0){
                //輸出緩衝區的內容到瀏覽器,實現檔案下載
                out.write(buffer, 0, len);
            }
            //關閉檔案輸入流
            in.close();
            //關閉輸出流
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

下面是導包

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version> 3.16</version>
</dependency>

這裡面主要就是一些excel有關的poi

HSSFWorkbook 是excel檔案

HSSFSheet  excel表格,通過HSSFWorkbook 獲取

HSSFCellStyle  excel樣式,通過HSSFWorkbook 獲取,可加入Font 字型樣式

Font 字型樣式,通過HSSFWorkbook 獲取

HSSFRow,Row  表格頁的行,通過HSSFSheet  獲取

HSSFCell,Cell  每一格,存入資料,通過HSSFRow,Row  獲取,可加入HSSFCellStyle 字型樣式