Class Workbook

java.lang.Object
io.leandev.appfuse.workbook.Workbook
All Implemented Interfaces:
AutoCloseable

public class Workbook extends Object implements AutoCloseable

Excel 活頁簿(.xlsx

框架的 Excel 讀寫入口,封裝底層 Apache POI 的 XSSFWorkbook, 不讓 POI 型別洩漏到公開 API(與 CsvReader 同隔離策略)。

本版本支援 Office Open XML 格式(.xlsx),採記憶體模式——整份活頁簿常駐記憶體。 巨量資料匯出(數十萬列以上)請留意記憶體用量。

建立並寫出

try (Workbook workbook = Workbook.create();
     OutputStream os = new FileOutputStream("report.xlsx")) {

    Worksheet sheet = workbook.createSheet("Products");
    Row header = sheet.createRow();
    header.createCell().setValue("Name");
    header.createCell().setValue("Price");

    Row row = sheet.createRow();
    row.createCell().setValue("Rose Bouquet");
    row.createCell().setValue(new BigDecimal("1280"));

    workbook.autoSizeColumns();
    workbook.write(os);
}

開啟並讀取

try (InputStream is = new FileInputStream("products.xlsx");
     Workbook workbook = Workbook.open(is)) {

    Worksheet sheet = workbook.getSheetAt(0);
    WorkbookReader reader = new WorkbookReader(sheet);
    reader.readHeaders();

    for (WorkbookRecord record = reader.read(); record != null; record = reader.read()) {
        String name = record.getAsString("Name");
        BigDecimal price = record.getAsBigDecimal("Price");
    }
}
Since:
4.0.0
  • Method Details

    • create

      public static Workbook create()
      建立一個空白活頁簿
      Returns:
      新活頁簿
    • open

      public static Workbook open(InputStream inputStream) throws IOException
      從輸入串流開啟既有活頁簿
      Parameters:
      inputStream - .xlsx 輸入串流
      Returns:
      載入的活頁簿
      Throws:
      IOException - 讀取失敗
    • createSheet

      public Worksheet createSheet(String name)
      以指定名稱建立工作表
      Parameters:
      name - 工作表名稱
      Returns:
      新建的工作表
    • createSheet

      public Worksheet createSheet()
      建立工作表(名稱由 POI 自動產生)
      Returns:
      新建的工作表
    • getSheetAt

      public Worksheet getSheetAt(int index)
      取得指定索引的工作表
      Parameters:
      index - 工作表索引(0 起算)
      Returns:
      工作表,若不存在則回傳 null
    • getSheet

      public Worksheet getSheet(String name)
      取得指定名稱的工作表
      Parameters:
      name - 工作表名稱
      Returns:
      工作表,若不存在則回傳 null
    • numberOfSheets

      public int numberOfSheets()
      取得工作表數量
      Returns:
      工作表數量
    • autoSizeColumns

      public void autoSizeColumns()
      對所有工作表自動調整欄寬
    • createCellStyle

      public CellStyle createCellStyle()

      建立一個可重用的儲存格樣式

      大量套用相同外觀時,建立一次再以 Cell.setStyle(CellStyle) 套用到多個儲存格, 避免逐格產生新樣式而觸及 Excel 的樣式數量上限。

      Returns:
      新儲存格樣式
    • write

      public void write(OutputStream outputStream) throws IOException
      將活頁簿寫出到輸出串流
      Parameters:
      outputStream - 輸出串流
      Throws:
      IOException - 寫入失敗
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Throws:
      IOException