excel Java 匯出
阿新 • • 發佈:2018-12-11
今天寫一個工具類,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 字型樣式