4

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

获取工作表名称,使其成为地图的键,然后获取其列标题并使它们成为值。

这将导致以下

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

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

我以下列方式做到了这一点

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;
}

我这样做是希望获得所需的结果,但它的作用是将所有工作表的列标题存储为每个键的值。即,如果文件中有两张名为

  1. 表 1
  2. 表2

以下是他们的列标题

Sheet1 -> id,名称
sheet2 -> 类别,价格

然后地图会像

result<sheet1,<id, name, caegory, price>>
result<sheet2,<id, name, caegory, price>>

无法弄清楚我做错了什么?请帮忙,因为我的项目有很多后端计算,我不想在这件事上花很多时间。

任何帮助将不胜感激

4

2 回答 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;
}

希望它会帮助某人

于 2012-10-15T11:25:03.357 回答
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;
}
于 2018-12-08T05:19:59.543 回答