
在 Excel 中调整行高和列宽是一个常见却又繁琐的需求,由于单元格内数据长短不一,默认的单元格宽度与行高常常会导致文本被遮挡,又或者短文本占据了过大的空间。在今天的指南中,我们将介绍如何在 Spire.XLS for Java 的帮助下,使用 Java 设置 Excel 行高列宽自适应,避免手动操作浪费时间,同时帮助你完成从手动调整到自动化办公的升级。
了解并安装 Spire.XLS for Java 库
Spire.XLS for Java 是一款功能强大的办公文档处理库,它可以在不依赖 Microsoft Excel 的情况下,轻松完成从易到难的各种 Excel 文件处理任务。不管是创建、转换 Excel 工作簿还是细致的调整单元格都能高效完成。
安装 Spire.XLS for Java 的方式非常简单,主要有两种:
- 使用 Maven
如果你习惯使用 Maven 来安装 Java 库,可以通过将下面的代码添加到 pom.xml 文件来安装它。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>15.12.15</version>
</dependency>
</dependencies>
- 手动安装
下载 Spire.XLS for Java 安装包,然后将 jar 文件添加到 Java 编译器中作为依赖项。
此外 Spire.XLS for Java 还提供免费版,适合用于小型项目和测试评估。
Java 设置 Excel 行高列宽自适应(单元格区域)
有时候,我们并不想要整个工作表都进行自适应调整,例如一些备注列通常需要保持固定宽度,方便编辑 Excel 表格时即时查看。通过 Spire.XLS 提供的 Worksheet.getAllocatedRange().get() 方法,我们可以轻松获取到指定的单元格区域,然后对该单元格区域设置行高列宽自适应。下面是该方法在代码中的实现步骤:
- 创建一个 Workbook 类的对象并加载一个 Excel 文件。
- 通过 Worksheet.getWorksheets().get() 方法获取指定的工作表。
- 调用 Worksheet.getAllocatedRange().get() 方法获取单元格区域。
- 使用 CellRange.autoFitRows() 和 CellRange.autoFitColumns() 方法对该单元格区域设置行高列宽自适应。
- 保存修改后文件。
代码示例:设置工作表的表头行高列宽自适应
import com.spire.xls.*;
public class AutoFit {
public static void main(String[] args) {
// 创建一个 Workbook 类的对象,并加载测试文档
Workbook wb = new Workbook();
wb.loadFromFile("/input/北美人口数量前十.xlsx");
// 获取工作表
Worksheet sheet = wb.getWorksheets().get(0);
// 设置行高、列宽为自适应(应用于指定数据范围)
sheet.getAllocatedRange().get("A1:F1").autoFitRows();
sheet.getAllocatedRange().get("A1:F1").autoFitColumns();
// 保存文档
wb.saveToFile("/output/自适应行高列宽.xlsx", FileFormat.Version2010);
wb.dispose();
}
}
结果文件预览:

Java 设置 Excel 行高列宽自适应(整个工作表)
事实上,多数情况下只调整表头是不能得到清晰的 Excel 文件的,反而可能因为表头的文本较短,导致下方数据被遮挡更严重。如果你希望导出后的表格呈现出最佳的视觉效果,那么全局自适应才是更好更简单的选择。Spire.XLS 提供了一键处理整张表的方法:
- 创建一个 Workbook 类的对象并加载一个 Excel 文件。
- 通过 Worksheet.getWorksheets().get() 方法获取指定的工作表。
- 调用 Worksheet.getAllocatedRange().autoFitRows() 设置行高自适应,调用 Worksheet.getAllocatedRange().autoFitColumns() 设置列宽自适应。
- 保存修改后文件。
代码示例:将第一个工作表的所有单元格均设置为自适应行高列宽
import com.spire.xls.*;
public class AutoFit {
public static void main(String[] args) {
// 创建一个 Workbook 类的对象,并加载测试文档
Workbook wb = new Workbook();
wb.loadFromFile("/input/北美人口数量前十.xlsx");
// 获取工作表
Worksheet sheet = wb.getWorksheets().get(0);
// 设置行高、列宽为自适应(应用于整个工作表)
sheet.getAllocatedRange().autoFitRows();
sheet.getAllocatedRange().autoFitColumns();
// 保存文档
wb.saveToFile("/output/自适应行高列宽整表.xlsx", FileFormat.Version2010);
wb.dispose();
}
}
结果文件预览:

提示:在某些特定的排版场景中,如果你必须保持固定的列宽,例如为了严格对齐 A4 纸打印布局,那么除了调整列宽外,你还可以选择缩小 Excel 单元格文本以适应列宽,让文字在有限的空间内通过自动变小来完整呈现。
常见问题与解答
Q1:如何限制自适应后的最大宽度?
你可以先调用 autoFitColumns(),然后遍历该列,检查宽度是否超过预设值。
sheet.getAllocatedRange().autoFitColumns();
if (sheet.getColumnWidth(1) > 50) {
// 限制第二列最大宽度为 50
sheet.setColumnWidth(1, 50);
}
Q2:包含合并单元格的区域自适应失效?
合并单元格的宽度计算逻辑比较特殊。你可以先检查表格中是否存在合并单元格,然后根据需求取消合并或调整获取的单元格区域以避免出现错误。
Q3:自动换行会影响自适应吗?
是的,自动换行会影响自适应。如果你开启了自动换行,通常建议先自适应列宽或固定列宽,再自适应行高。因为行高是根据列宽被填满后的行数来决定的。
结论
通过本文的介绍,我们可以看到使用 Spire.XLS for Java 实现 Excel 行高列宽自适应非常简单实用。无论是针对特定区域还是整个工作表,几行逻辑清晰的代码就能解决报表的美观问题。如果你对教程中的步骤和 Spire.XLS 有任何疑问,欢迎随时联系我们了解更多!







