Java中写入Excel最常用稳定方式是Apache POI库,支持.xls和.xlsx格式,推荐用XSSFWorkbook写入.xlsx文件,需引入poi与poi-ooxml依赖,注意资源关闭、类型设置及大数据量时使用SXSSFWorkbook。

Java 中将数据写入 Excel 文件,最常用且稳定的方式是使用 Apache POI 库,它支持 .xls(Excel 97-2003)和 .xlsx(Excel 2007+)格式。核心是操作 HSSFWorkbook(旧版)或 XSSFWorkbook(新版),配合 Sheet、Row、Cell 完成写入。
添加 Apache POI 依赖(Maven)
确保项目中引入了正确的依赖。推荐使用最新稳定版(如 5.2.4+),并注意区分格式:
- 写入 .xlsx(推荐):需
poi+poi-ooxml - 写入 .xls:只需
poi(已不建议新项目使用)
示例(Maven):
写入简单数据到 .xlsx 文件(基础流程)
创建工作簿 → 添加工作表 → 创建行与单元格 → 设置值 → 写出到文件流:
Excel 数据可视化图表生成器 - 把 Excel/表格数据一键转为柱状图、折线图、饼图、雷达图、堆叠柱状图、散点图、面积图、环形图、气泡图、极坐标图、水平柱状图、柱+线组合双轴图。支持数据透视后绘图(--pivot),输出交互式 HTML(可悬停查看数值、一键下载 PNG)与静态 PNG(可嵌入文档/PPT)。提供两套配色方案: cn-stock(涨红跌绿, 金融财报默认) 与 vibrant(明亮风格, 适合演示报告)。当用户提到数据可视化、画图、图表、走势图、占比图、趋势图、对比图、透视表、Exc
立即学习“Java免费学习笔记(深入)”;
- 用
new XSSFWorkbook()创建空白工作簿 - 调用
createSheet("名称")获取 Sheet 对象 - 用
createRow(0)创建第 0 行,再用createCell(0)创建第 0 列单元格 - 对 Cell 调用
setCellValue("文本")或setCellValue(123.45)(自动识别类型) - 最后用
FileOutputStream将工作簿写出到磁盘
注意:务必在操作完成后调用 workbook.close() 释放资源。
写入多行结构化数据(如 List
适合导出数据库查询结果或业务列表。关键点:
- 第一行作为表头,遍历
keySet()或预定义列名顺序写入 - 后续每行对应一个 Map,按相同顺序取
map.get(key)填值 - 对数字、日期、布尔等类型,建议显式调用
cell.setCellType(CellType.NUMERIC)等,并用cell.setCellValue(...)匹配类型(如Date类型需配合CreationHelper创建日期格式) - 可提前设置列宽:
sheet.setColumnWidth(colIndex, width * 256)(单位是 1/256 字符宽)
避免常见问题
实际开发中容易踩坑的地方:
-
内存占用高:大数据量(如上万行)建议用
SXSSFWorkbook(流式写入,基于硬盘缓冲)替代XSSFWorkbook - 中文乱码:只要 JVM 默认编码是 UTF-8(现代 IDE 和系统通常默认),POI 写入不会乱码;显示乱码多因 Excel 打开方式错误(应选“UTF-8”编码打开 .csv,但 .xlsx 本身无此问题)
-
公式不计算:POI 写入公式后默认不自动计算,需手动调用
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll() -
空指针异常:访问
row.getCell(i)前先判断是否为null,或改用row.createCell(i)确保单元格存在

















