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教程。