I'm working on a utility to convert excel file from one format to another. I was suggested to use jxl library to meet the requirements which are as follows.
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<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. i.e. if there are two sheets in file named as
and following are their column headers
Sheet1 -> id, name
sheet2 -> category, price
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.
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