java中將資料匯出到Excel
阿新 • • 發佈:2018-12-30
//main方法
package com.example.demo.system.entity; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServlet; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.example.demo.system.util.ExcelToolClass; /** *測試匯出資料 */ @SuppressWarnings("serial") public class TestExcel extends HttpServlet{ public static void main(String[] args) throws UnsupportedEncodingException { List<Map<String,Object>> list=new ArrayList<Map<String,Object>>(); Map<String,Object> map=new HashMap<String,Object>(); map.put("序列", 1); map.put("姓名", "張三"); map.put("年齡", 20); map.put("戶籍", "廣東"); list.add(map); list.add(map); list.add(map); list.add(map); list.add(map); list.add(map); //System.getProperty("user.dir") 獲取當前專案的路徑 String fileName=System.getProperty("user.dir")+"\\匯出資料Excel.xls";//定義到處路徑 System.out.println(fileName); String worksheetTitle = "Excel匯出資訊";//sheet名 String sheetName="資料1"; HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(sheetName);//定義sheet名 ExcelToolClass exportExcel = new ExcelToolClass(wb,sheet);//呼叫Excel工具類 fileName = new String(fileName.getBytes("GBK"), "GBK");//修改編碼格式 //定義第二行標題 String id = "序列"; String name = "姓名"; String age = "年齡"; String address = "戶籍"; List<String> l=new ArrayList<String>(); l.add(id); l.add(name); l.add(age); l.add(address); // 建立報表頭部 exportExcel.createNormalHead(worksheetTitle, 3); //定義第一行 exportExcel.createNormalTwoRow(l, 0); //匯入資料 exportExcel.createColumHeader(list); //輸出檔案流,把相應的Excel工作簿 輸出到本地 exportExcel.outputExcel(fileName); } }
//匯出工具包
package com.example.demo.system.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; 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.Region; public class ExcelToolClass { private HSSFWorkbook wb = null;// 得到Excel工作簿物件 private HSSFSheet sheet = null;// 得到Excel工作表物件 public ExcelToolClass(HSSFWorkbook wb, HSSFSheet sheet) { this.wb = wb; this.sheet = sheet; } /** * 建立通用的Excel頭 * * @param headString * 頭部顯示的字元 * @param colSum * 該報表的列數 */ public void createNormalHead(String headString, int colSum) { // 設定第一行 HSSFRow row = sheet.createRow(0);// 建立Excel工作表的行 HSSFCell cell = row.createCell(0);// 建立Excel工作表指定行的單元格 row.setHeight((short) 1000);// 設定高度 // 定義單元格為字串型別 cell.setCellType(HSSFCell.ENCODING_UTF_16);// 中文處理 cell.setCellValue(new HSSFRichTextString(headString)); // 指定合併區域 sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) colSum)); // 定義單元格格式,新增單元格表樣式,並新增到工作簿 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.setFontHeightInPoints((short) 16);// 設定字型 cellStyle.setFont(font); cell.setCellStyle(cellStyle); } /** * 建立報表第二行 * * @param params * 統計條件陣列 * @param colSum * 需要合併到的列索引 * */ @SuppressWarnings("deprecation") public void createNormalTwoRow(List<String> list, int colSum) { // 建立第二行 HSSFRow row1 = sheet.createRow(1); row1.setHeight((short) 400);// 設定高度 HSSFCell cell2 = row1.createCell(0);// 建立Excel工作表指定行的單元格 cell2.setCellType(HSSFCell.ENCODING_UTF_16);// 中文處理 // 指定合併區域 sheet.addMergedRegion(new Region(1, (short) 0, 1, (short) colSum)); // 定義單元格格式,新增單元格表樣式,並新增到工作簿 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.setFontHeightInPoints((short) 10);// 設定字型 cellStyle.setFont(font); // HSSFCellStyle.ALIGN_CENTER 設定居中 for (int i = 0; i < list.size(); i++) { cteateCell(wb, row1, i, HSSFCellStyle.ALIGN_CENTER, list.get(i), cellStyle); } } /** * 設定報表標題 * * @param columHeader * 標題字串陣列 */ public void createColumHeader(List<Map<String, Object>> listInfo) { // 定義單元格格式,新增單元格表樣式,並新增到工作簿 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.setFontHeightInPoints((short) 10);// 設定字型 cellStyle.setFont(font); // 設定單元格背景色 // cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); // cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); HSSFCell cell3 = null; for (int i = 0; i < listInfo.size(); i++) { // 迴圈插入資料 HSSFRow row2 = sheet.createRow(i + 2); row2.setHeight((short) 400);// 指定行高 cell3 = row2.createCell(0); cell3.setCellStyle(cellStyle); cell3.setCellValue(new HSSFRichTextString(listInfo.get(i).get("序列").toString())); cell3 = row2.createCell(1); cell3.setCellStyle(cellStyle); cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("姓名"))); cell3 = row2.createCell(2); cell3.setCellStyle(cellStyle); cell3.setCellValue(new HSSFRichTextString(listInfo.get(i).get("年齡").toString())); cell3 = row2.createCell(3); cell3.setCellStyle(cellStyle); cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("戶籍"))); } } /** * 建立內容單元格 * * @param wb * HSSFWorkbook * @param row * HSSFRow * @param col * short型的列索引 * @param align * 對齊方式 * @param val * 列值 */ public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align, String val, HSSFCellStyle cellstyle) { HSSFCell cell = row.createCell(col); cell.setCellType(HSSFCell.ENCODING_UTF_16); cell.setCellValue(new HSSFRichTextString(val)); cell.setCellStyle(cellstyle); } /** * 建立合計行 * * @param colSum * 需要合併到的列索引 * @param cellValue */ public void createLastSumRow(int colSum, List<String> list) { // 定義單元格格式,新增單元格表樣式,並新增到工作簿 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);// 建立Excel工作表指定行的單元格 sumCell.setCellValue(new HSSFRichTextString("合計")); sumCell.setCellStyle(cellStyle); // 合併 最後一行的第零列-最後一行的第一列 sheet.addMergedRegion(new Region(sheet.getLastRowNum(), (short) 0, sheet.getLastRowNum(), (short) colSum));// 指定合併區域 for (int i = 2; i < (list.size() + 2); i++) { // 定義最後一行的第三列 sumCell = lastRow.createCell(i); sumCell.setCellStyle(cellStyle); // 定義陣列 從0開始。 sumCell.setCellValue(new HSSFRichTextString(list.get(i - 2))); } } /** * 輸入EXCEL檔案 * * @param fileName * 檔名 */ public void outputExcel(String fileName) { FileOutputStream fos = null; try { fos = new FileOutputStream(new File(fileName)); wb.write(fos); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public HSSFWorkbook getWb() { return wb; } public void setWb(HSSFWorkbook wb) { this.wb = wb; } public HSSFSheet getSheet() { return sheet; } public void setSheet(HSSFSheet sheet) { this.sheet = sheet; } }
maven依賴版本為3.11
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>