Java FastExcel
最后修改于 2024 年 1 月 27 日
Java FastExcel 教程展示了如何使用 FastExcel 库在 Java 中读写 Excel 文件。
Excel xlsx
在本文中,我们使用 xlsx 文件。xlsx 是 Microsoft Excel 使用的一种开放 XML 电子表格文件格式的文件扩展名。 xlsm 文件支持宏。 xltm 是启用宏的模板文件。 xls 格式是一种专有的二进制格式,而 xlsx 基于 Office Open XML 格式。
FastExcel 库
FastExcel 是一个用于在 Java 中使用免费的 xlsx 格式读取和写入 Excel 文件的库。 它是 Apache POI 库的替代方案。
FastExcel 支持有限的功能集 - 它专注于速度和内存减少。
implementation 'org.dhatim:fastexcel:0.12.15'
这是用于写入 Excel 文件的依赖项。
implementation 'org.dhatim:fastexcel-reader:0.12.15'
这是用于读取 Excel 文件的依赖项。
Java FastExcel 简单写入示例
以下示例创建一个新的 Excel 文件。
package com.zetcode; import org.dhatim.fastexcel.Workbook; import org.dhatim.fastexcel.Worksheet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; public class FastExcelSimpleWrite { public static void main(String[] args) throws IOException { var words = List.of("sky", "blue", "work", "falcon"); int row = 0; int col = 0; var f = new File("/home/janbodnar/tmp/words.xlsx"); try (var fos = new FileOutputStream(f)) { var wb = new Workbook(fos, "Application", "1.0"); Worksheet ws = wb.newWorksheet("Sheet 1"); for (var word : words) { ws.value(row, col, word); row++; } wb.finish(); } } }
我们有一个单词列表。 我们将单词写入工作表的第 1 列。
var wb = new Workbook(fos, "Application", "1.0");
创建一个新的工作簿。
Worksheet ws = wb.newWorksheet("Sheet 1");
使用 newWorksheet
创建一个新的工作表。
for (var word : words) { ws.value(row, col, word); row++; }
我们迭代单词列表,并将单词写入工作表的第 1 列。 单词使用 value
插入到单元格中。
wb.finish();
finish
方法完成工作簿的生成;它保存工作表。
Java FastExcel 读取
以下示例从 Excel 文件读取数据。
package com.zetcode; import org.dhatim.fastexcel.reader.ReadableWorkbook; import org.dhatim.fastexcel.reader.Row; import org.dhatim.fastexcel.reader.Sheet; import java.io.File; import java.io.IOException; import java.util.stream.Stream; public class FastExcelRead { public static void main(String[] args) throws IOException { var f = new File("/home/janbodnar/tmp/words.xlsx"); try (var wb = new ReadableWorkbook(f)) { Sheet sheet = wb.getFirstSheet(); try (Stream<Row> rows = sheet.openStream()) { var it = rows.iterator(); int i = 0; while (it.hasNext()) { var row = it.next(); row.stream().forEach(cell -> System.out.println(cell.getText())); i++; } } } } }
该示例从 words.xlsx
文件读取数据。
try (var wb = new ReadableWorkbook(f)) {
我们使用 ReadableWorkbook
读取文件。
Sheet sheet = wb.getFirstSheet();
我们使用 getFirstSheet
获取第一个工作表的句柄。
try (Stream<Row> rows = sheet.openStream()) { var it = rows.iterator(); int i = 0; while (it.hasNext()) { var row = it.next(); row.stream().forEach(cell -> System.out.println(cell.getText())); i++; } }
我们使用流检索数据。
Java FastExcel 样式
可以通过 style
方法创建样式。
package com.zetcode; import org.dhatim.fastexcel.Workbook; import org.dhatim.fastexcel.Worksheet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class FastExcelStyle { public static void main(String[] args) throws IOException { var f = new File("/home/janbodnar/tmp/styled.xlsx"); try (var fos = new FileOutputStream(f)) { var wb = new Workbook(fos, "Application", "1.0"); Worksheet ws = wb.newWorksheet("Sheet 1"); ws.value(1, 1, "old falcon"); ws.style(1, 1).horizontalAlignment("center").bold().italic().set(); wb.finish(); } } }
在该示例中,我们将样式应用于单个单元格。
ws.value(1, 1, "old falcon");
我们将文本写入 B2 单元格(第二行,第二列)。
ws.style(1, 1).horizontalAlignment("center").bold().italic().set();
使用 style
方法创建样式。 我们使用 horizontalAlignment
使文本水平居中。 我们使用 bold
使其加粗,使用 italic
使其倾斜。 最后使用 set
应用样式。
Java FastExcel 合并单元格
要合并单元格,我们使用 merge
方法。
package com.zetcode; import org.dhatim.fastexcel.Workbook; import org.dhatim.fastexcel.Worksheet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class FastExcelMerge { public static void main(String[] args) throws IOException { var f = new File("/home/janbodnar/tmp/merged.xlsx"); try (var fos = new FileOutputStream(f)) { var wb = new Workbook(fos, "Application", "1.0"); Worksheet ws = wb.newWorksheet("Sheet 1"); ws.range(1, 1, 4, 4).merge(); ws.value(1, 1, "old falcon"); ws.style(1, 1).horizontalAlignment("center").verticalAlignment("center") .bold().italic().set(); wb.finish(); } } }
我们将四个单元格合并为一个。
ws.range(1, 1, 4, 4).merge();
我们创建一个四个单元格的范围,并使用 merge
合并它们。
ws.value(1, 1, "old falcon"); ws.style(1, 1).horizontalAlignment("center").verticalAlignment("center") .bold().italic().set();
我们将带样式的文本写入合并的单元格。
Java FastExcel 公式
使用 formula
方法,我们可以将公式插入单元格中。
package com.zetcode; import org.dhatim.fastexcel.Workbook; import org.dhatim.fastexcel.Worksheet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class FastExcelFormula { public static void main(String[] args) throws IOException { var f = new File("/home/janbodnar/tmp/formula.xlsx"); try (var fos = new FileOutputStream(f)) { var wb = new Workbook(fos, "Application", "1.0"); Worksheet ws = wb.newWorksheet("Sheet 1"); ws.value(0, 0, 1); ws.value(1, 0, 2); ws.value(2, 0, 3); ws.value(3, 0, 4); ws.value(4, 0, 5); ws.value(5, 0, 6); ws.value(6, 0, 7); ws.formula(7, 0, "SUM(A1:A6)"); ws.width(0, 8); ws.style(7, 0).bold().set(); wb.finish(); } } }
在该示例中,我们在值下方的单元格中插入 SUM 公式。
来源
在本文中,我们使用 FastExcel 库在 Java 中读取和写入了 Excel 文件。
作者
列出所有Java教程。