使用 Apache POI 擴充列
1. 概述
Apache POI 是一種流行的 Java API,用於以程式設計方式操作不同類型的 Microsoft Office 文檔,例如 Word、Excel 和 PowerPoint。
我們經常需要擴展 Excel 電子表格中的列。當我們製作電子表格供人們閱讀時,這是一個常見的要求。這有助於讀者更好地視覺化列中的內容,而使用預設列大小無法做到這一點。
在本教程中,我們將學習如何使用 API 在 Excel 電子表格中手動和自動調整列寬。
2. 依賴關係
首先,我們的 Maven pom.xml
中需要以下Apache POI相依性:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
3. 電子表格準備
讓我們先快速回顧一下如何建立 Excel 電子表格。我們將準備一個 Excel 電子表格並向其中填充一些資料以進行演示:
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("NewSheet");
Row headerRow = sheet.createRow(0);
Cell headerCell1 = headerRow.createCell(0);
headerCell1.setCellValue("Full Name");
Cell headerCell2 = headerRow.createCell(1);
headerCell2.setCellValue("Abbreviation");
Row dataRow = sheet.createRow(1);
Cell dataCell1 = dataRow.createCell(0);
dataCell1.setCellValue("Java Virtual Machine");
Cell dataCell2 = dataRow.createCell(1);
dataCell2.setCellValue("JVM");
// More data rows created here...
現在,如果我們在 Excel 中開啟生成的電子表格,我們將看到每列都具有相同的預設寬度:
顯然,由於列寬有限,第一列內的內容太長並被截斷。
4. 寬度調整
Apache POI 提供兩種不同的方法來調整列寬度。我們可以根據自己的需求選擇其中一種方式。現在讓我們探討這兩種方法。
4.1.固定寬度調整
我們可以透過在目標Sheet
實例上呼叫setColumnWidth()
將特定列擴展為固定寬度。此方法有兩個參數,分別是columnIndex
和width,
。
手動取得顯示所有內容的列寬很複雜,因為它取決於字體類型和字體大小等多種因素。根據API 文件中setColumnWidth()
的定義, width
參數以字元寬度的 1/256 為單位。
給定 Excel 中字體大小為 11 的預設字體 Calibri,我們可以使用儲存格中的字元數 * 256 作為列寬的粗略近似值:
String cellValue = row.getCell(0).getStringCellValue();
sheet.setColumnWidth(0, cellValue.length() * 256);
調整後,我們會在第一列看到全部內容:
自己求列寬有點麻煩。特別是當我們處理包含大量資料行的電子表格時。我們必須遍歷每一行以確定最大字元數。包含不同字體和字體大小的列的存在進一步增加了寬度計算的複雜性。
4.2.自動寬度調整
幸運的是, Apache POI 提供了一種方便的方法autoSizeColumn(),
來自動調整列寬度。這確保了讀者可以完全看到專欄內容。
autoSizeColumn()
只需要column
參數,它是從零開始的列索引。我們可以使用以下程式碼來自動調整第一列的列寬:
sheet.autoSizeColumn(0);
如果我們將autoSizeColumn()
應用於每一列,我們將看到以下內容。所有專欄的內容現在對讀者完全可見,沒有任何截斷:
5. 結論
在本文中,我們探索了 Apache POI 中調整 Excel 電子表格列寬的兩種不同方法:固定寬度調整和自動寬度調整。調整列寬對於提高可讀性和建立讀者友好的 Excel 電子表格至關重要。
與往常一樣,本文的源代碼可以在 GitHub 上取得。