我的要求是动态读取Excel并将内容存储在Map中。标头应该是键,相应的列应该是值,以便在传递键时可以获取单元格值。
我的Excel工作表包含可以动态更改的多行和多列。我的意图是在Java中编写一个通用函数来读取Excel并将内容存储在map中。键应为列标题,并且值应为标题的相应单元格值。因此,当我通过标题键进行检索时,我应该接收相应的单元格值。我的计划是在方法中传递行号和键,以便它可以检索与该行以及键有关的各个单元格值
static Map<String> excelMap = new LinkedHashMap<String>();
public static String readWriteExcel(String sheetName) throws EncryptedDocumentException, InvalidFormatException, IOException, JSONException
{
File file = new File("File Path");
FileInputStream inputStream = new FileInputStream( file );
Workbook workbook = WorkbookFactory.create( inputStream );
Sheet sheet = workbook.getSheet( sheetName );
int rowNumber =0;
int rowCount = sheet.getLastRowNum();
for(int i=1;i<=rowCount;i++){
Row row = sheet.getRow(0);
for(int j=0;j<row.getLastCellNum();j++) {
String key=row.getCell(j).getStringCellValue();
String value=sheet.getRow(rowNumber+1).getCell(j).getStringCellValue();
excelMap.put(key, value);
}
}
}
答案 0 :(得分:0)
由于要映射多行,因此必须存储多行。
一种方法是存储包含column-> list的映射,该列表包含每行的值。
另一种方法是存储由列+行号->值组成的映射。
第二种方法的示例代码:
static Map<String, String> excelMap = new LinkedHashMap<String, String>();
...
// storing values
excelMap.put(key + "_" + i, value); // i is row index
...
// getting values
public static String getCellValue(String cellName, int rowIndex) {
return excelMap.get(cellName + "_" + rowIndex);
}
答案 1 :(得分:0)
通过查看代码,我正在假设问题所在:工作表中存在多行,但是您仅获得第一行的数据。
解决方案: 首先,您需要将所有行数据存储在Map列表中。其中列表索引对应于行号。另外,您不会在任何地方增加rowNumber变量。始终为0。 为什么不直接使用变量i从工作表中获取特定行?
我认为这应该可行。
static List<Map<String, String>> excelData = new ArrayList<HashMap<String, String>>();
public static String readWriteExcel(String sheetName) throws EncryptedDocumentException, InvalidFormatException, IOException, JSONException
{
File file = new File("File Path");
FileInputStream inputStream = new FileInputStream( file );
Workbook workbook = WorkbookFactory.create( inputStream );
Sheet sheet = workbook.getSheet( "sheetName" );
int rowCount = sheet.getLastRowNum();
for(int i=1;i<=rowCount;i++){
Row row = sheet.getRow(0);
Map<String,String> rowData = new HashMap<>();
for(int j=0;j<row.getLastCellNum();j++) {
String key=row.getCell(j).getStringCellValue();
String value=sheet.getRow(i).getCell(j).getStringCellValue();
rowData.put(key, value);
}
excelData.add(rowData);
}
}