简体   繁体   English

如何使用JXL逐张读取Excel文件

[英]How to read an excel file, sheet by sheet using jxl

I'm working on a utility to convert excel file from one format to another. 我正在开发一种实用程序,可以将Excel文件从一种格式转换为另一种格式。 I was suggested to use jxl library to meet the requirements which are as follows. 建议我使用jxl库来满足以下要求。
read the file sheet by sheet and do following 逐页阅读文件并执行以下操作

get the sheet name, make it key of a map and then get its column headers and make them value. 获取工作表名称,使其成为地图的键,然后获取其列标题并使其具有值。

it will result in following 这将导致以下

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

Do this for all sheets in the given file 对给定文件中的所有工作表执行此操作

I did this in following way 我以以下方式做到了

public Map> function(String filePath ) throws IOException, BiffException{ 公共Map>函数(字符串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;
}

I did this with a hope of getting desired result but what it does is that it stores column headers of all sheets against each key as value. 我这样做是希望获得期望的结果,但是它的作用是针对每个键将所有工作表的列标题存储为值。 ie if there are two sheets in file named as 即如果文件中有两张名为

  1. sheet1 工作表1
  2. sheet2 工作表2

and following are their column headers 以下是他们的列标题

Sheet1 -> id, name 表格1-> ID,名称
sheet2 -> category, price sheet2->类别,价格

then map will be like 然后地图会像

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

Can't figure out what I'm doing wrong? 无法弄清楚我在做什么错? Help please, as my project has a lot of backend calculations and I don't want to spend a lot of time in this thing. 请帮忙,因为我的项目有很多后端计算,而且我不想在这个事情上花费很多时间。

Any help will be highly appreciated 任何帮助将不胜感激

I solved the issue after posting it here, but forgot to give solution here. 我在这里发布后解决了这个问题,但是忘了在这里给出解决方案。
The problem in above code is location of list declaration. 上面代码中的问题是列表声明的位置。
It should be declared inside the for , so that it gets refreshed (emptied) after each iteration of loop and stores data of only one sheet at a time. 应该在for声明它,以便在每次循环迭代后刷新(清空)并一次仅存储一张纸的数据。
The correct code is below. 正确的代码如下。

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

Hope It'll help someone 希望对别人有帮助

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM