java解析Excel,The supplied file was empty

在 Java 中解析 Excel 文件时遇到错误 The supplied file was empty 通常表示尝试读取的 Excel 文件为空,或者文件路径、格式存在问题。以下是详细的排查步骤和解决方案:

1. 确认文件路径和文件名

确保你指定的文件路径和文件名是正确的。常见问题包括路径错误、文件名拼写错误或文件未正确保存。

示例代码

java
File file = new File("path/to/your/file.xlsx");

2. 检查文件内容

确认文件不为空,且文件格式正确。尝试打开文件以确保它包含有效的数据,并且不是空的。

3. 使用正确的库和方法

确保使用了适当的库来解析 Excel 文件。在 Java 中,常用的库有 Apache POI 和 JExcelAPI。

3.1. Apache POI

Apache POI 是处理 Excel 文件(.xls 和 .xlsx 格式)的流行库。以下是使用 Apache POI 解析 Excel 文件的基本步骤:

3.1.1. 添加 Maven 依赖
xml
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.2</version> </dependency>
3.1.2. 读取 Excel 文件
java
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class ExcelReader { public static void main(String[] args) { File file = new File("path/to/your/file.xlsx"); try (FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { System.out.print(cell.toString() + "\t"); } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } }

3.2. JExcelAPI

JExcelAPI 是另一个处理 Excel 文件的库,但它只支持 .xls 格式,功能较为有限。

3.2.1. 添加 Maven 依赖
xml
<dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency>
3.2.2. 读取 Excel 文件
java
import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.CellType; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.Sheet; public class ExcelReader { public static void main(String[] args) { File file = new File("path/to/your/file.xls"); try { Workbook workbook = Workbook.getWorkbook(file); Sheet sheet = workbook.getSheet(0); for (int i = 0; i < sheet.getRows(); i++) { for (int j = 0; j < sheet.getColumns(); j++) { Cell cell = sheet.getCell(j, i); System.out.print(cell.getContents() + "\t"); } System.out.println(); } } catch (IOException | BiffException e) { e.printStackTrace(); } } }

4. 文件格式检查

确保文件是正确的 Excel 格式(.xlsx 或 .xls)。如果文件格式不正确,库可能无法解析它。

5. 调试和日志记录

在代码中添加日志记录,以帮助调试问题。例如,在读取文件时输出日志信息,以确定文件是否成功打开。

java
if (file.length() == 0) { System.out.println("The file is empty."); }

6. 更新和兼容性

确保使用的库版本与你的文件格式和 Java 版本兼容。某些库的旧版本可能无法处理较新的 Excel 格式或文件特性。

7. 示例代码总结

确保使用正确的文件路径、文件格式和库,并处理可能的空文件问题。以下是使用 Apache POI 读取 Excel 文件的完整示例:

java
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class ExcelReader { public static void main(String[] args) { File file = new File("path/to/your/file.xlsx"); if (!file.exists() || file.length() == 0) { System.out.println("The file is empty or does not exist."); return; } try (FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { System.out.print(cell.toString() + "\t"); } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } }

关键字

Java, 解析 Excel, Apache POI, JExcelAPI, 文件为空, 文件路径, 对象文件, Excel 文件格式, Maven 依赖, 对话框显示, 文件读取, 文件检查