POI的使用

1.依賴

<!-- poi -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>4.1.0</version>
    </dependency>

2. 基本使用

//1. 在內存中創建一個excel文件   工作薄
HSSFWorkbook book = new HSSFWorkbook();
//2. 通過book創建Sheet
HSSFSheet sheet03 = book.createSheet("sheet03");
//3. 通過sheet創建row
HSSFRow row = sheet03.createRow(0);//第一行
//4. 通過row 創建 cell
HSSFCell cell = row.createCell(0);//第一列
//5. 在cell中存值
cell.setCellValue("helloworld~~~");
sheet03.autoSizeColumn(0);//第一列寬度自適應
// 存儲工作薄
book.write(new File("d:\\test\\test.xls"));
book.close();
// 讀取工作薄
HSSFWorkbook book = new HSSFWorkbook(new FileInputStream("d:\\test\\abc.xls"));
// 讀取 sheet
HSSFSheet sheet = book.getSheet("sysUsers2");
// 獲得 row迭代器
Iterator<Row> rows = sheet.rowIterator();
while(rows.hasNext()){// 遍歷所有行
    Row row = rows.next();
    // 獲得cell迭代器
    Iterator<Cell> cells = row.cellIterator();
    while(cells.hasNext()){//遍歷當前行所有cell
        Cell cell = cells.next();
        String value = cell.getStringCellValue();//獲得cell值
        System.out.print(value+"\t");
    }
    System.out.println();
}

3. 樣式定製

//樣式 ,可以爲每個cell追加樣式
HSSFCellStyle style = book.createCellStyle();
style.setBorderTop(BorderStyle.THIN); // 上下左右的邊框
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
Font font = book.createFont();//字體
font.setBold(true); // 粗體
font.setItalic(true);//斜體
font.setUnderline(Font.U_SINGLE);//下劃線
font.setStrikeout(true);//刪除線
font.setColor(IndexedColors.RED.getIndex()); //字體顏色
font.setFontHeightInPoints((short)20);//字號:20號字體
style.setFont(font);// 設置字體
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());//背景色
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);//背景色
//追加樣式
cell.setCellStyle(style);

4.工具類

// 將任何類型的數據集合,寫出到xls中
//                        數據                     sheet名                 響應                文件名
public static void write(List<Object> data, String sheetName,HttpServletResponse response,String fileName) 
    throws NoSuchFieldException, IllegalAccessException, IOException {
    //1.在內存中創建一個excel文件
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
    //2.創建工作簿
    HSSFSheet sheet = hssfWorkbook.createSheet(sheetName);
    //3.建立表頭
    // 獲取數據的所有 屬性
    Field[] fields = data.get(0).getClass().getDeclaredFields();
    // 創建表頭行
    HSSFRow titlerRow = sheet.createRow(0);
    // 在表頭行中 爲數據的每個屬性 創建一個cell
    for (int i = 0; i < fields.length; i++) {
        HSSFCell cell = titlerRow.createCell(i);
        cell.setCellValue(fields[i].getName());
    }
    // 4. 遍歷數據
    for (Object d : data) {
        // 新建數據行
        int lastRowNum = sheet.getLastRowNum();//當前的最後一行的行號
        HSSFRow row = sheet.createRow(lastRowNum+1);
        for (int i = 0; i < fields.length; i++) {
            HSSFCell cell = row.createCell(i);
            // 獲取當前 數據中的屬性值
            Field f = fields[i];//獲取屬性
            System.out.println("Field name:"+f.getName());
            f.setAccessible(true);//此private屬性允許訪問
            String cellValue = String.valueOf(f.get(d));
            cell.setCellValue(cellValue);
        }
    }
    // 在定義好內容後,最後根據內容做每列的寬度自適應
    for (int i = 0; i < fields.length; i++) {
        sheet.autoSizeColumn(i);
    }
    //寫出
    String finalFileName = new String(fileName.getBytes(Charset.forName("utf-8")),"iso-8859-1");
    response.setHeader("content-disposition","attachment;filename="+finalFileName);
    hssfWorkbook.write(response.getOutputStream());
    hssfWorkbook.close();
    response.getOutputStream().close();
}
發佈了153 篇原創文章 · 獲贊 4 · 訪問量 5838
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章