当前位置: 首页 > news >正文

国产化Excel处理组件Spire.XLS教程:Java 向 Excel 写入数据的3种高效方法(含代码示例)

手动向 Excel 工作表中输入数据既耗时又容易出错,尤其是在处理大型数据集时。而借助合适的 Java Excel 库,可以简化数据输入这一流程。

E-iceblue旗下Spire系列产品,是文档处理领域的佼佼者,支持国产化信创本文将详细介绍如何使用Spire.XLS for Java库,通过 3 种高效方法完成 Java 向 Excel 工作表的数据写入,涵盖基础的逐个单元格录入、批量数组插入以及 DataTable 导出。

Spire.XLS for Java免费试用下载 

设置与安装

开始之前,需先将 Spire.XLS for Java 集成到项目中,以下为两种快速部署方式:

方式 1:手动下载 JAR 包

  • 访问 Spire.XLS for Java 官方下载页面
  • 下载最新版本的 JAR 文件
  • 将 JAR 文件手动导入项目中

方式 2:Maven 依赖集成

在项目 pom.xml 中添加以下仓库和依赖,Maven 会自动下载并引入库(无需手动处理依赖冲突):

<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.8.3</version></dependency>
</dependencies>

Java 向 Excel 中写入数据的 3 种方法

Spire.XLS for Java 提供了灵活的数据写入方法,可适配不同使用场景。以下将结合完整代码示例、说明及适用场景,逐一介绍每种方法。

1. 在 Excel 单元格中写入文本或数字

若需向单个单元格填充文本或数字,Spire.XLS 支持通过行、列索引(例如(2,1)代表第 2 行第 1 列)或 Excel 样式引用(例如"A1"、"B3")直接定位目标单元格:

核心方法:

  • 使用 Worksheet.get(int row, int column) 或 Worksheet.get(String name) 方法获取指定 Excel 单元格
  • 使用 setValue() 方法向单元格写入文本值
  • 使用 setNumberValue() 方法向单元格写入数值

Java 代码示例:

import com.spire.xls.*;public class WriteToCells {public static void main(String[] args) {// 创建 Workbook 对象Workbook workbook = new Workbook();// 获取第一个工作表Worksheet worksheet = workbook.getWorksheets().get(0);// 向指定单元格写入数据worksheet.get("A1").setValue("物品名");worksheet.get("B1").setValue("数量");worksheet.get("C1").setValue("分类");worksheet.get("D1").setValue("采购日期");worksheet.get(2,1).setValue("键盘");worksheet.get(2,2).setNumberValue(12);worksheet.get(2,3).setValue("办公用品");worksheet.get(2,4).setValue("2024/11/09");worksheet.get(3,1).setValue("毛巾");worksheet.get(3,2).setNumberValue(30);worksheet.get(3,3).setValue("生活用品");worksheet.get(3,4).setValue("2024/12/18");// 为第一行应用样式CellStyle style = workbook.getStyles().addStyle("newStyle");style.getFont().isBold(true); // 设置字体为粗体worksheet.getRange().get(1,1,1,4).setStyle(style);// 保存为 Excel 文件workbook.saveToFile("写入数据到单元格.xlsx", ExcelVersion.Version2016);}
}

适用场景:

适用于小型数据集,且需要精确控制单元格位置的场景(例如添加标题、单行数据录入)。

效果预览:

写入数组到 Excel 工作表

将一维数组(单行)或二维数组(多行多列)一次性插入连续单元格区域,能提升逐个写入的效率。

核心 API:insertArray() 解析

insertArray() 方法可轻松处理一维数组(单行数据)和二维数组(多行多列数据),其参数说明如下:

  • Object[] array/ Object[][] array:待插入的一维、二维数组
  • int firstRow:起始行索引(从 1 开始)
  • int firstColumn:起始列索引(从 1 开始)
  • boolean isVertical:一维数组插入方向
    • false:水平插入(从左到右)
    • true:垂直插入(从上到下)

Java 代码示例:

import com.spire.xls.*;public class WriteArrayToWorksheet {public static void main(String[] args) {// 创建 Workbook 实例Workbook workbook = new Workbook();// 获取第一个工作表Worksheet worksheet = workbook.getWorksheets().get(0);// 创建一维数组Object[] oneDimensionalArray = {"一月", "二月", "三月", "四月", "五月", "六月"};// 将一维数组写入工作表第一行worksheet.insertArray(oneDimensionalArray, 1, 1, false);// 创建二维数组Object[][] twoDimensionalArray = {{"姓名", "年龄", "性别", "部门", "电话"},{"Bob", "25", "男", "技术部", "654214"},{"John", "24", "男", "广告部", "624847"},{"Kelly", "26", "女", "销售部", "624758"}};// 将二维数组从 A3 单元格开始写入工作表worksheet.insertArray(twoDimensionalArray, 3, 1);// 为第一行和第三行应用样式CellStyle style = workbook.getStyles().addStyle("newStyle");style.getFont().isBold(true); // 设置字体为粗体worksheet.getRange().get(1,1,1,6).setStyle(style);worksheet.getRange().get(3,1,3,6).setStyle(style);// 保存为 Excel 文件workbook.saveToFile("写入数组.xlsx", ExcelVersion.Version2016);}
}

适用场景:

适用于有序数据(例如库存日志、用户列表)的批量插入场景。

效果预览:

3. 写入 DataTable 数据到 Excel 工作表

若数据存储在 DataTable 中(例如来自数据库的数据),Spire.XLS 可通过 insertDataTable() 方法直接将其导出到 Excel,并保留数据结构和列标题。

核心 API:insertDataTable() 解析

insertDataTable() 是专用于向 Excel 工作表中批量插入结构化数据集的方法,其参数说明如下:

  • DataTable dataTable:待导出的 DataTable 对象
  • boolean columnHeaders:是否将 DataTable 的列名作为 Excel 表头
  • int firstRow:起始行索引(从 1 开始)
  • int firstColumn:起始列索引(从 1 开始)
  • boolean transTypes:是否保留数据类型

Java 代码示例:

import com.spire.xls.*;
import com.spire.xls.data.table.DataRow;
import com.spire.xls.data.table.DataTable;public class WriteDataTableToWorksheet {public static void main(String[] args) throws Exception {// 创建 Workbook 实例Workbook workbook = new Workbook();// 获取第一个工作表Worksheet worksheet = workbook.getWorksheets().get(0);// 创建 DataTable 对象DataTable dataTable = new DataTable();dataTable.getColumns().add("SKU", Integer.class); // 库存单位(SKU)dataTable.getColumns().add("产品名", String.class); // 产品名称dataTable.getColumns().add("价格", String.class); // 价格// 创建数据行并添加数据DataRow dr = dataTable.newRow();dr.setInt(0, 512900512);dr.setString(1,"无线鼠标M200");dr.setString(2,"¥99");dataTable.getRows().add(dr);dr = dataTable.newRow();dr.setInt(0,512900637);dr.setString(1,"B100有线鼠标");dr.setString(2,"¥85");dataTable.getRows().add(dr);dr = dataTable.newRow();dr.setInt(0,512901829);dr.setString(1,"游戏鼠标");dr.setString(2,"¥125");dataTable.getRows().add(dr);dr = dataTable.newRow();dr.setInt(0,512900386);dr.setString(1,"ZM光电鼠标");dr.setString(2,"¥89");dataTable.getRows().add(dr);// 将DataTable写入工作表worksheet.insertDataTable(dataTable,true,1,1,true);// 为第一行应用样式CellStyle style = workbook.getStyles().addStyle("newStyle");style.getFont().isBold(true); // 设置字体为粗体worksheet.getRange().get(1,1,1,3).setStyle(style);// 保存为Excel文件workbook.saveToFile("写入DataTable.xlsx", ExcelVersion.Version2016);}
}

适用场景:

适用于导出数据库数据、客户关系管理(CRM)数据,或任何存储在 DataTable 中的结构化数据(例如 SQL 查询结果、CSV 导入数据)。

效果预览:

大型数据集性能优化指南

当处理超大型数据时,需通过以下手段减少内存占用、提升速度:

  • 优先使用批量操作(insertArray() 或 insertDataTable()),而非逐个单元格写入。
  • 先写入所有数据,最后统一设置样式(避免频繁刷新表格布局)。
  • 对于大型数据集,建议使用流模式写入以减少内存占用。

常见问题(FAQ)

Q1:Spire.XLS for Java 支持哪些 Excel 格式?

Spire.XLS for Java 支持所有主流 Excel 格式,包括:

  • 旧版:XLS(Excel 97-2003)
  • 新版:XLSX、XLSM(支持宏)、XLSB 等。

可通过 saveToFile() 方法指定输出格式。

总结

对于数据驱动应用中的 Java 开发者而言,掌握 Excel 导出功能至关重要。Spire.XLS for Java 库提供了 3 种通过 Java 向 Excel 写入数据的高效方法:

  • 逐个单元格写入:实现精确控制
  • 数组批量插入:实现高性能数据录入
  • DataTable 导出:实现数据库式结构化数据传输

结合本文的性能优化技巧,可轻松应对从简单报表到大型数据导出的各类需求。


文章转载自:

http://M5PeOR1S.mrxgm.cn
http://xyLcQ6iq.mrxgm.cn
http://KgHr2125.mrxgm.cn
http://hmjDhvNQ.mrxgm.cn
http://7z5BdOw6.mrxgm.cn
http://Lz6d0ohZ.mrxgm.cn
http://V9bO78LS.mrxgm.cn
http://6z17ZtRS.mrxgm.cn
http://FuXzrY5N.mrxgm.cn
http://aHWT7LQm.mrxgm.cn
http://0BMlHlfh.mrxgm.cn
http://b4MwGeJ3.mrxgm.cn
http://PQVfBcqy.mrxgm.cn
http://Y1AVWmPW.mrxgm.cn
http://rPgysQC8.mrxgm.cn
http://PcKldlrn.mrxgm.cn
http://u8lm7r5I.mrxgm.cn
http://QHFCxd7F.mrxgm.cn
http://DghGPZCh.mrxgm.cn
http://smcOPR1R.mrxgm.cn
http://XQ55aLv1.mrxgm.cn
http://ruA91Ylw.mrxgm.cn
http://gREMwQmh.mrxgm.cn
http://2NWJLfo9.mrxgm.cn
http://4IPZaaDb.mrxgm.cn
http://pj1JleKA.mrxgm.cn
http://FCxo0LEc.mrxgm.cn
http://KregJVeZ.mrxgm.cn
http://CTKMGUsd.mrxgm.cn
http://VxdT75pt.mrxgm.cn
http://www.dtcms.com/a/366202.html

相关文章:

  • 8051单片机-成为点灯大师
  • 单片机实现分页显示环形更新的历史数据
  • 详细讲解pyspark中dsl格式进行大数据开发中的的所有编程情况
  • 大数据毕业设计选题推荐-基于大数据的懂车帝二手车数据分析系统-Spark-Hadoop-Bigdata
  • uni 拍照上传拍视频上传以及相册
  • React 中的 HOC 和 Hooks
  • 大数据毕业设计选题推荐-基于大数据的儿童出生体重和妊娠期数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 【C++练习】06.输出100以内的所有素数
  • 结合prompt源码分析NodeRAG的build过程
  • 【C++闯关笔记】STL:list 的学习和使用
  • 解密大语言模型推理:Prompt Processing 的内存管理与计算优化
  • Redis vs Memcached vs MongoDB:深入对比与选型指南
  • C# 修改基类List中某一元素的子类类型
  • 如何在 iPhone 或 iPad 上删除文件
  • MongoDB 高可用部署:Replica Set 搭建与故障转移测试
  • MacOS微信双开,亲测有效
  • MySQL事务的四大特性(ACID)
  • 数说故事 | 2025年运动相机数据报告,深挖主流品牌运营策略及行业趋势​
  • K8S容器POD内存快照导出分析处理方案
  • 【面试题】Prompt是如何生成的,优化目标是什么,任务是什么?
  • Elasticsearch 备份和恢复
  • 软考中级习题与解答——第二章_程序语言与语言处理程序(2)
  • RTC实时时钟RX8025SA国产替代FRTC8025S
  • git基础命令 git基础操作
  • 2025市面上比较实用的财会行业证书,最值得考的8个职业证书推荐
  • 开源与定制化直播电商系统源码对比:如何选择开发方案?
  • Spring 事务提交成功后执行额外逻辑
  • Attention-Based Map Encoding for Learning Generalized Legged Locomotion
  • MMD动画(二)动作制作
  • Hoppscotch:开源轻量API测试工具,秒启动高效解决临时接口测试需求