Workbook workbook = WorkbookFactory.create(file);这里create报红了
时间: 2024-04-30 16:21:52 浏览: 9
这个问题可能是因为您的代码中没有正确导入相关的类或依赖库。请确保您已经正确导入了 `org.apache.poi.ss.usermodel.WorkbookFactory` 类,并且已经正确添加了 Apache POI 相关的依赖库。
如果您使用的是 Maven 项目,可以在 `pom.xml` 文件中添加以下依赖:
```xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
```
如果您使用的是 Gradle 项目,可以在 `build.gradle` 文件中添加以下依赖:
```groovy
implementation 'org.apache.poi:poi:4.1.2'
```
如果您没有使用构建工具,可以手动下载所需的 jar 包并将其添加到您的项目中。
相关问题
private List<String> readExcelFile() { List<String> datas = new ArrayList<>(); File sdDir; try { // 获取 Excel 文件路径 sdDir = new File("/sdcard/Template/", "IC1001.xlsx"); // 创建 Workbook 对象 FileInputStream inputStream = new FileInputStream(sdDir); Workbook workbook = WorkbookFactory.create(inputStream); // 获取第一个 Sheet Sheet sheet = workbook.getSheetAt(0); // 遍历 Sheet 中的每一行和每一列 Iterator<Row> rowIterator = sheet.rowIterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); datas.add(cell.toString()); } // 关闭 Workbook 和输入流 workbook.close(); inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } catch (InvalidFormatException e) { throw new RuntimeException(e); } return datas; }有什么问题
这段代码的问题在于,当有多行数据时,只会读取第一行数据,因为关闭Workbook和输入流的代码应该在循环结束后执行,而不是在每个行的末尾执行。应该将这两行代码移出while循环,放在try块的末尾。另外,如果发生异常,也应该关闭Workbook和输入流。例如:
```
private List<String> readExcelFile() {
List<String> datas = new ArrayList<>();
File sdDir;
FileInputStream inputStream = null;
Workbook workbook = null;
try {
// 获取 Excel 文件路径
sdDir = new File("/sdcard/Template/", "IC1001.xlsx");
// 创建 Workbook 对象
inputStream = new FileInputStream(sdDir);
workbook = WorkbookFactory.create(inputStream);
// 获取第一个 Sheet
Sheet sheet = workbook.getSheetAt(0);
// 遍历 Sheet 中的每一行和每一列
Iterator<Row> rowIterator = sheet.rowIterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
datas.add(cell.toString());
}
}
} catch (IOException | InvalidFormatException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (workbook != null) {
workbook.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return datas;
}
```
private List<String> readExcelFile() { List<String> datas = new ArrayList<>(); try { FileInputStream inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx"); Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { datas.add(cell.toString()); } } workbook.close(); } catch (IOException | InvalidFormatException e) { e.printStackTrace(); } return datas; }读取不到excel中的数据,怎么解决
首先,确保你的文件路径是正确的,且文件存在。另外,这个方法只会将 Excel 文件中的每个单元格的数据都添加到列表中,而不会将它们按行添加。如果你想要按行读取 Excel 文件中的数据,可以尝试下面的代码:
```
private List<List<String>> readExcelFile() {
List<List<String>> datas = new ArrayList<>();
try {
FileInputStream inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx");
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
List<String> rowData = new ArrayList<>();
for (Cell cell : row) {
rowData.add(cell.toString());
}
datas.add(rowData);
}
workbook.close();
} catch (IOException | InvalidFormatException e) {
e.printStackTrace();
}
return datas;
}
```
这样,你就可以获取到一个二维列表,其中每个子列表对应 Excel 文件中的一行数据。