1. 概述
Apache POI 是一个流行的 Java API,用于程序化操作不同类型的 Microsoft Office 文档,如 Word、Excel 和 PowerPoint。
在创建供人们阅读的电子表格时,我们经常需要扩展列宽。这有助于读者更好地可视化列中的内容,这是默认列宽无法实现的。
在这个教程中,我们将学习如何使用 API 手动和自动调整 Excel 表格中的列宽。
2. 依赖项
首先,我们需要在 Maven 的 pom.xml
中添加以下 Apache POI 的依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.5</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 打开生成的表格,我们会看到每个列都有相同的默认宽度:
显然,由于列宽限制,1st 列的内容被截断了。
4. 宽度调整
Apache POI 提供了两种不同的方法来调整列宽。我们可以根据自己的需求选择其中一种。现在让我们一起探索这两种方法。
4.1. 固定宽度调整
我们可以通过在目标 Sheet
实例上调用 setColumnWidth()
来将特定列扩展到固定宽度。 这个方法有两个参数:columnIndex
和 width
。
手动精确计算显示所有内容所需的列宽比较复杂,因为它取决于诸如字体类型和字号等因素。 根据 API 文档 的定义,width
参数是以字符宽度的 1/256 为单位的。
考虑到 Excel 中默认的 Calibri 字体和字号 11,我们可以粗略地使用单元格中的字符数乘以 256 来估算列宽:
String cellValue = row.getCell(0).getStringCellValue();
sheet.setColumnWidth(0, cellValue.length() * 256);
手动计算列宽确实有些繁琐,特别是当处理包含大量数据行的表格时。我们必须遍历每一行来找出最大字符计数。不同字体和字号的列会增加宽度计算的复杂性。
4.2. 自动宽度调整
幸运的是,Apache POI 提供了一个方便的方法 autoSizeColumn()
来自动调整列宽。 这确保了列中的内容对读者完全可见。
autoSizeColumn()
方法只需要一个参数 column
,它是零基列索引。我们可以使用以下代码来自动调整 1st 列的列宽:
sheet.autoSizeColumn(0);
如果我们对每个列都应用 autoSizeColumn()
,所有列的内容都将完全可见,没有截断:
5. 总结
在这篇文章中,我们探讨了在 Apache POI 中调整 Excel 表格列宽的两种不同方法:固定宽度调整和自动宽度调整。调整列宽对于提高可读性和创建用户友好的 Excel 表格至关重要。
如往常一样,文章的源代码可在 GitHub 上找到。