1. 程式人生 > >從資料庫查詢到的資料匯出到excel中

從資料庫查詢到的資料匯出到excel中

        步驟一:封裝資料

List<Map<String, String>> result = new ArrayList<>();
Map<String, String> map = new LinkedHashMap<>();
map.put("U_ID", "...");
...
result.add(map);步驟二:定義變數值,建立Excel文件物件。
String fileName = "公司員工資訊表.xls";        // 定義檔名
String headString = "公司員工資訊表"
; // 定義表格標題 String sheetName = "工作表一"; // 定義工作表表名 String filePath = "E:\\test\\"; // 檔案本地儲存路徑 String[] thead = {"主鍵(U_ID)","狀態(UDT_STATE)","姓名(U_NAME)","SAP編號(UDT_SAPID)","性別(U_SEX)","管理關係歸屬(UDT_ASCRIPTION)","所屬公司(UDT_COMPANY)","一級部門(UDT_FIRST)","二級部門(UDT_SECOND)","職務崗位(POSSITION_ID)"
,"廠區(UDT_PARK)","城市(CITY_NAME)"}; // 定義表頭內容 int[] sheetWidth = {2500,3500,3000,4000,2500,5000,5000,5000,5000,5000,3500,3500}; // 定義每一列寬度 HSSFWorkbook wb = new HSSFWorkbook(); // 建立Excel文件物件 HSSFSheet sheet = wb.createSheet(sheetName); // 建立工作表

步驟三:生成表格

表格分為了三部分,按順序生成。基本思路是先建立行,再建立每一行中的每一格,新增樣式,填入內容。

// ①建立表格標題
ExcelUtil.createHeadTittle
(wb, sheet, headString, result.get(0).size() - 1); // result.get(0).size() - 1為表格佔用列數,從0開始
  • 1
  • 2
  • 3
  • 4
// ②建立表頭
ExcelUtil.createThead(wb, sheet, thead, sheetWidth);
  • 1
  • 2
// ③填入資料
ExcelUtil.createTable(wb, sheet, result);

呼叫的ExcelUtil工具類程式碼如下:

public class ExcelUtil {

    /**
     * 建立表格標題
     * @param wb            Excel文件物件
     * @param sheet         工作表物件
     * @param headString    標題名稱
     * @param col           標題佔用列數
     */
    public static void createHeadTittle(HSSFWorkbook wb,HSSFSheet sheet,String headString,int col){
        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 CellRangeAddress(0, 0, 0, col));  // 指定標題合併區域

        // 定義單元格格式,新增單元格表樣式,並新增到工作簿
        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 wb            Excel文件物件
     * @param sheet         工作表物件
     * @param thead         表頭內容
     * @param sheetWidth    每一列寬度
     */
    public static void createThead(HSSFWorkbook wb,HSSFSheet sheet,String[] thead,int[] sheetWidth){
        HSSFRow row1 = sheet.createRow(1);
        row1.setHeight((short) 600);
        // 定義單元格格式,新增單元格表樣式,並新增到工作簿
        HSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        cellStyle.setWrapText(true);
        cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);  // 設定背景色
        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);                // 設定右邊框型別
        cellStyle.setRightBorderColor(HSSFColor.BLACK.index);               // 設定右邊框顏色

        // 設定單元格字型
        HSSFFont font = wb.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setFontName("宋體");
        font.setFontHeightInPoints((short) 10);
        cellStyle.setFont(font);

        // 設定表頭內容
        for(int i=0;i<thead.length;i++){
            HSSFCell cell1 = row1.createCell(i);
            cell1.setCellType(HSSFCell.ENCODING_UTF_16);
            cell1.setCellValue(new HSSFRichTextString(thead[i]));
            cell1.setCellStyle(cellStyle);
        }

        // 設定每一列寬度
        for(int i=0;i<sheetWidth.length;i++){
            sheet.setColumnWidth(i, sheetWidth[i]);
        }
    }

    /**
     * 填入資料
     * @param wb        // Excel文件物件
     * @param sheet     // 工作表物件
     * @param result    // 表資料
     */
    public static void createTable(HSSFWorkbook wb,HSSFSheet sheet,List<Map<String, String>> result){
        // 定義單元格格式,新增單元格表樣式,並新增到工作薄
        HSSFCellStyle cellStyle = wb.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        cellStyle.setWrapText(true);

        // 單元格字型
        HSSFFont font = wb.createFont();
        font.setFontName("宋體");
        font.setFontHeightInPoints((short) 10);
        cellStyle.setFont(font);

        // 迴圈插入資料
        for(int i = 0; i < result.size(); i++ ){
            HSSFRow row = sheet.createRow(i+2);
            row.setHeight((short) 400); // 設定高度
            HSSFCell cell = null;
            int j = 0;
            for (String key : (result.get(i).keySet())) {
                cell = row.createCell(j);
                cell.setCellStyle(cellStyle);
                cell.setCellValue(new HSSFRichTextString(result.get(i).get(key)));
                j++;
            }
        }
    }
}

步驟四:輸出Excel檔案到本地

FileOutputStream fos = new FileOutputStream(new File(filePath+fileName));
// filePath,fileName是如上定義的檔案儲存路徑及檔名
wb.write(fos);

fos.close();
wb.close();