如何使用jxl逐页阅读excel文件

moC*_*Cap 4 java map jxl

我正在使用一个实用程序将excel文件从一种格式转换为另一种格式.我被建议使用jxl库来满足以下要求.
逐页阅读文件并执行以下操作

获取工作表名称,使其成为地图的关键字,然后获取其列标题并使其成为值.

它将导致以下

   Map<String, List<String>> result = result<key=sheetName, value=list of column headers> 
Run Code Online (Sandbox Code Playgroud)

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

我是按照以下方式做到的

public Map> function(String filePath)抛出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;
}
Run Code Online (Sandbox Code Playgroud)

我这样做是为了获得理想的结果,但它的作用是将所有工作表的列标题作为值存储在每个键中.即如果文件中有两个名为的表

  1. 工作表Sheet1
  2. Sheet2中

以下是他们的列标题

Sheet1 - > id,name
sheet2 - > category,price

然后地图会像

result<sheet1,<id, name, caegory, price>>
result<sheet2,<id, name, caegory, price>>
Run Code Online (Sandbox Code Playgroud)

无法弄清楚我做错了什么?请帮助,因为我的项目有很多后端计算,我不想花很多时间在这个东西上.

任何帮助将受到高度赞赏

moC*_*Cap 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;
}
Run Code Online (Sandbox Code Playgroud)

希望它会帮助某人