2015年7月13日 星期一

Excel範例(POI)

※寫檔

public class TestExcel {
    /**
     * Excel左邊的數字,程式碼是從0開始的,不直覺,此方法傳進來的數字會轉換成和Excel一樣
     * 
     * @param leftDigit
     * @return
     */
    private static int viewRow(int leftDigit) {
        return leftDigit - 1;
    }

    /**
     * Excel上面的英文字,程式碼是從0開始的,不直覺,此方法傳進來的字元會轉換成和Excel一樣,只適用A~Z
     * 
     * @param topEngWord
     * @return
     */
    private static int viewCell(char topEngWord) {
        return topEngWord - 65;
    }

    public static void main(String[] args) {
        HSSFWorkbook excelbook = new HSSFWorkbook();
        HSSFSheet sheet = excelbook.createSheet("xxx");// 創建工作表

        // ※1A原始的字
        HSSFRow row1 = sheet.createRow(TestExcel.viewRow(1));
        HSSFCell cellA = row1.createCell(TestExcel.viewCell('A'));
        cellA.setCellValue("originalfasddddddddddddddd");

        // ※1B紅色的字
        HSSFCell cellB = row1.createCell(TestExcel.viewCell('B'));
        // 如果改成以下寫法,會變成後者蓋前者,所以1A會什麼都沒有
        // HSSFCell cellB =
        // sheet.createRow(TestExcel.viewRow(1)).createCell(TestExcel.viewCell('B'));
        cellB.setCellValue("我想紅");
        // 多下面的程式碼
        HSSFCellStyle cellFontStyle = excelbook.createCellStyle();
        Font font = excelbook.createFont();
        font.setColor(HSSFColor.RED.index);// 紅色
        font.setFontHeightInPoints((short) 20);// 字體大小
        // font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗體
        cellFontStyle.setFont(font);
        // cellFontStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右對齊
        // cellFontStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);//上下對齊
        // cellFontStyle.setWrapText(true);// 自動換行
        cellB.setCellStyle(cellFontStyle);

        // ※1C背景色
        HSSFCell cellC = row1.createCell(TestExcel.viewCell('C'));
        cellC.setCellValue("綠背景");

        HSSFCellStyle cellBackgroundColor = excelbook.createCellStyle();
        cellBackgroundColor.setFillForegroundColor(HSSFColor.GREEN.index);
        cellBackgroundColor.setFillPattern((short) 1);
        cellC.setCellStyle(cellBackgroundColor);

        // 欄位高度、寬度
        // row1.setHeightInPoints(50);
        // sheet.setColumnWidth(0, 12 * 512); // 設定欄位寬度
        // sheet.autoSizeColumn(0); //自動調整欄位寬度,字變大調的不是很好,0是指A欄
        try (FileOutputStream out = new FileOutputStream("D:/Excel.xls")) {
            excelbook.write(out);
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
        System.out.println("檔案建立成功!");
    }
}
這裡有官方的範例
這邊也是,點Available Examples的HSSF-Only或XSSF-Only,然後隨便點一個,有很多可參考

※讀檔

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("D:/getExcel.xls"));
// HSSFSheet sheet = workbook.getSheet("Sheet1");
HSSFSheet sheet = workbook.getSheetAt(0);// 第一張工作表, 兩種方法擇其一
// 讀取A1
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell(0);
System.out.println("A1=: " + cell);

沒有留言:

張貼留言