private static List<ImportViewModel> readExcelFile() { List<ImportViewModel> datas = new ArrayList<>(); FileInputStream inputStream = null; Workbook workbook = null; try { inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx"); workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(4); Iterator<Row> rowIterator = sheet.rowIterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); ImportViewModel importViewModel = new ImportViewModel(); Iterator<Cell> columnIterator = row.cellIterator(); while (columnIterator.hasNext()) { importViewModel.setName("商品名称:" + columnIterator.next().getStringCellValue()); importViewModel.setType("商品类型:" + columnIterator.next().getStringCellValue()); importViewModel.setStyle("商品款式:" + columnIterator.next().getStringCellValue()); importViewModel.setInventoryNum("预期应有库存:" + columnIterator.next().getStringCellValue()); datas.add(importViewModel); } } } catch (IOException | InvalidFormatException e) { e.printStackTrace(); } finally { try { if (workbook != null) { workbook.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return datas; }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = findViewById(R.id.list_view); List<ImportViewModel> data = readExcelFile(); // 调用您的 readExcelFile() 方法获取数据 // ImportViewModelAdapter adapter = new ImportViewModelAdapter(data); // listView.setAdapter(adapter); RfApplication.toneGenerator = new ToneGenerator(streamType, percantageVolume);IllegalStateException: Cannot get a text value from a numeric cell怎么修改
时间: 2023-11-28 20:48:27 浏览: 28
这个异常信息是因为程序试图从一个数字类型的单元格中获取文本值造成的。在你的代码中,你需要确定每个单元格的数据类型,然后使用相应的方法来获取它们的值。例如,如果单元格的数据类型为字符串,你可以使用 `getStringCellValue()` 方法来获取它的值;如果是数字类型,你可以使用 `getNumericCellValue()` 方法来获取它的值。因此,你需要对代码进行修改,如下所示:
```
while (columnIterator.hasNext()) {
Cell cell = columnIterator.next();
if(cell.getCellType() == CellType.STRING) {
importViewModel.setName("商品名称:" + cell.getStringCellValue());
} else if(cell.getCellType() == CellType.NUMERIC) {
importViewModel.setName("商品名称:" + cell.getNumericCellValue());
}
// 类似地获取其他单元格的值
datas.add(importViewModel);
}
```
这样,你就可以正确地获取单元格的值了。
相关问题
private static List<ImportViewModel> readExcelFile() { List<ImportViewModel> datas = new ArrayList<>(); FileInputStream inputStream = null; Workbook workbook = null; try { inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx"); workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.rowIterator(); if (rowIterator.hasNext()) { rowIterator.next(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> columnIterator = row.cellIterator(); ImportViewModel importViewModel = new ImportViewModel(); Cell cell = columnIterator.next(); importViewModel.setName("商品名称:" + String.valueOf(cell.getNumericCellValue())); cell = columnIterator.next(); importViewModel.setType("商品类型:" + cell.getStringCellValue()); cell = columnIterator.next(); importViewModel.setStyle("商品款式:" +cell.getStringCellValue()); cell = columnIterator.next(); importViewModel.setInventoryNum("预期应有库存:" + cell.getStringCellValue()); datas.add(importViewModel); } } } catch (IOException | InvalidFormatException e) { e.printStackTrace(); } finally { try { if (workbook != null) { workbook.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } return datas; }怎么样才能接受excel表格中任意类型的数据
你可以使用`org.apache.poi.ss.usermodel.DataFormatter`类将单元格中的数据转换为字符串,这样就可以接受任意类型的数据了。以下是修改后的代码:
```
private static List<ImportViewModel> readExcelFile() {
List<ImportViewModel> datas = new ArrayList<>();
FileInputStream inputStream = null;
Workbook workbook = null;
try {
inputStream = new FileInputStream("/sdcard/Template/IC1001.xlsx");
workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.rowIterator();
if (rowIterator.hasNext()) {
rowIterator.next();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> columnIterator = row.cellIterator();
ImportViewModel importViewModel = new ImportViewModel();
Cell cell = columnIterator.next();
importViewModel.setName("商品名称:" + new DataFormatter().formatCellValue(cell));
cell = columnIterator.next();
importViewModel.setType("商品类型:" + new DataFormatter().formatCellValue(cell));
cell = columnIterator.next();
importViewModel.setStyle("商品款式:" + new DataFormatter().formatCellValue(cell));
cell = columnIterator.next();
importViewModel.setInventoryNum("预期应有库存:" + new DataFormatter().formatCellValue(cell));
datas.add(importViewModel);
}
}
} catch (IOException | InvalidFormatException e) {
e.printStackTrace();
} finally {
try {
if (workbook != null) {
workbook.close();
}
if (inputStream != null) {
inputStream.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 文件中的一行数据。