如何使用jxl逐个工作表读取Excel文件

4
我正在开发一个实用程序,将Excel文件从一种格式转换为另一种格式。我被建议使用jxl库来满足以下要求。
逐个工作表读取文件并执行以下操作:

获取工作表名称,将其作为映射的键,然后获取其列标题并将它们作为值。

这将得到以下结果

   Map<String, List<String>> result = result<key=sheetName, value=list of column headers> 

请对给定文件中的所有表格执行此操作

我是这样做的:

public Map> function(String filePath) throws IOException, BiffException {

       Map<String, List<String>> map = new HashMap<String, List<String>>(); 
    Workbook workBook=Workbook.getWorkbook(new File (filePath));
      String [] sheetNames = workBook.getSheetNames();
      Sheet sheet=null;
      List<String > fields = new ArrayList<String>();
      for (int sheetNumber =0; sheetNumber < sheetNames.length; sheetNumber++){
         sheet=workBook.getSheet(sheetNames[sheetNumber]);
         for (int columns=0;columns < sheet.getColumns();columns++){
             fields.add(sheet.getCell(columns, 0).getContents());


         }
         map.put(sheetNames[sheetNumber],fields);

      }
      return map;
}

我希望通过这样做来获得期望的结果,但它实际上是将每个键的值存储为所有工作表的列标题。 例如,如果文件中有两个名为sheet1和sheet2的工作表,并且以下是它们的列标题:
Sheet1 -> id, name sheet2 -> category, price 那么映射就会像这样:
result<sheet1,<id, name, caegory, price>>
result<sheet2,<id, name, caegory, price>>

我无法弄清自己错在哪里?

求助,请帮忙,因为我的项目涉及到大量的后端计算,我不想花费太多时间在这件事情上。

非常感谢任何帮助。

2个回答

5

我在这里发布问题之后解决了它,但忘记在这里提供解决方案。
以上代码中的问题是列表声明的位置。
它应该在for内部声明,这样它会在每次循环迭代后被刷新(清空),并仅存储一个工作表的数据。
以下是正确的代码。

      Map<String, List<String>> map = new HashMap<String, List<String>>(); 
      Workbook workBook=Workbook.getWorkbook(new File (filePath));
      String [] sheetNames = workBook.getSheetNames();
      Sheet sheet=null;
      for (int sheetNumber =0; sheetNumber < sheetNames.length; sheetNumber++){
         List<String > fields = new ArrayList<String>();
         sheet=workBook.getSheet(sheetNames[sheetNumber]);
         for (int columns=0;columns < sheet.getColumns();columns++){
             fields.add(sheet.getCell(columns, 0).getContents());                 
         }
         map.put(sheetNames[sheetNumber],fields); 
      }
      return map;
}

希望能对某些人有所帮助


2
public String ExcelValueGetFn(String FilePath, int column, int row) throws BiffException, IOException  {
    Workbook workbook = null;
    final String EXCEL_FILE_LOCATION = FilePath;
    workbook = Workbook.getWorkbook(new File(EXCEL_FILE_LOCATION));

    Sheet sheet = workbook.getSheet(0);
    Cell cell1 = sheet.getCell(column, row);
    System.out.print(cell1.getContents() + ":");

    String textToSendFromExcel = cell1.getContents();
    return textToSendFromExcel;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接