ZetCode

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 文件。

com/zetcode/FastExcelSimpleWrite.java
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 文件读取数据。

com/zetcode/FastExcelRead.java
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 方法创建样式。

com/zetcode/FastExcelStyle.java
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 方法。

com/zetcode/FastExcelMerge.java
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 方法,我们可以将公式插入单元格中。

com/zetcode/FastExcelFormula.java
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 Github 页面

在本文中,我们使用 FastExcel 库在 Java 中读取和写入了 Excel 文件。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我在编程教学方面拥有超过十年的经验。

列出所有Java教程