Java 导出 Excel 实现换行
在 Java 中导出 Excel 时实现单元格内容换行,主要有以下几种方法:

使用 Apache POI
Apache POI 是最常用的 Java 操作 Excel 的库,以下是实现换行的示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
public class ExcelExportWithLineBreak {
public static void main(String[] args) throws Exception {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sheet1");
// 创建行和单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
// 设置单元格内容(包含换行符)
String text = "第一行\n第二行\n第三行";
cell.setCellValue(text);
// 设置换行
CellStyle style = workbook.createCellStyle();
style.setWrapText(true); // 设置自动换行
cell.setCellStyle(style);
// 调整行高以适应换行内容
row.setHeightInPoints((text.split("\n").length) * sheet.getDefaultRowHeightInPoints());
// 写入文件
try (FileOutputStream out = new FileOutputStream("output.xlsx")) {
workbook.write(out);
}
workbook.close();
}
}
关键点:
setWrapText(true)启用自动换行- 需要手动调整行高以显示所有换行内容
- 换行符使用
\n
使用 EasyExcel
EasyExcel 是阿里巴巴开源的简化版 POI,实现方式类似:
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelExportWithLineBreak {
public static void main(String[] args) throws Exception {
String fileName = "output.xlsx";
// 创建写入样式
WriteCellStyle writeCellStyle = new WriteCellStyle();
writeCellStyle.setWrapped(true); // 设置自动换行
// 准备数据
List<List<String>> data = new ArrayList<>();
List<String> row1 = new ArrayList<>();
row1.add("第一行\n第二行\n第三行");
data.add(row1);
// 写入Excel
EasyExcel.write(fileName, data.getClass())
.sheet("Sheet1")
.registerWriteHandler(new AbstractCellWriteHandler() {
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
if (cell != null) {
cell.setCellStyle(writeCellStyle);
// 调整行高
if (cell.getStringCellValue() != null) {
String[] lines = cell.getStringCellValue().split("\n");
Row row = cell.getRow();
row.setHeightInPoints(lines.length * writeSheetHolder.getSheet().getDefaultRowHeightInPoints());
}
}
}
})
.doWrite(data);
}
}
使用 JXL (较老但简单)
import jxl.Workbook;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.Label;
import java.io.File;
import java.io.IOException;
public class JxlExportWithLineBreak {
public static void main(String[] args) throws Exception {
WritableWorkbook workbook = Workbook.createWorkbook(new File("output.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
// 创建换行样式
WritableCellFormat wrapFormat = new WritableCellFormat();
wrapFormat.setWrap(true);
// 写入带换行的内容
Label label = new Label(0, 0, "第一行\n第二行\n第三行", wrapFormat);
sheet.addCell(label);
// 调整行高
sheet.setRowHeight(0, (sheet.getRowHeight(0) * 3));
workbook.write();
workbook.close();
}
}
注意事项
- 行高调整:启用换行后,通常需要手动调整行高才能看到换行效果
- 列宽调整:有时也需要调整列宽以适应内容
- 不同版本差异:POI 的 HSSF(.xls) 和 XSSF(.xlsx) 处理方式略有不同
- 性能考虑:大数据量时,POI 的 XSSF 比 HSSF 更高效
高级技巧
如果需要更精确的控制换行,可以使用 CellUtil 类:
// 使用 CellUtil 设置样式
CellUtil.setCellStyleProperties(cell, Map.of(
"wrap_text", true
));
或者使用 WorkbookHelper 工具类简化操作:

// 假设有工具类 ExcelUtils.setWrapText(cell, true); ExcelUtils.adjustRowHeightForWrapText(row, cell);
方法都可以实现 Java 导出 Excel 时的换行功能,选择哪种取决于你的具体需求和项目环境。

