问题
i have the following excel:
Method Name Status Code
getLoggedinUserDetails 400
createRequisition 400
excelMDM 400
and i am able to print the values as they are in excel using the following code :
package com.poc.excelfun;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
public class ReadExcelData {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("attachment_status.xls"));
//Get the workbook instance for XLS file
HSSFWorkbook workbook = new HSSFWorkbook(file);
//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
//For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch(cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print((int)cell.getNumericCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t\t");
break;
}
}
System.out.println("");
}
file.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
i want to put the values excluding title Method Name Status Code
and values only like Key - > getLoggedinUserDetails and value -> 400
in Hashmap
how to do this.
Please help me to find this.
回答1:
Try this code:
Iterator<Cell> cellIterator = row.cellIterator();
String key = null
int value = Integer.MIN_VALUE; // use a default value that will never occur in the sheet
HashMap<String, Integer> map = new HashMap<String, Integer>();
while(cellIterator.hasNext())
{
Cell cell = cellIterator.next();
switch(cell.getCellType())
{
case Cell.CELL_TYPE_NUMERIC:
value = cell.getNumericCellValue(); break;
case Cell.CELL_TYPE_STRING:
key = cell.getStringCellValue(); break;
}
if(key != null && value != Integer.MIN_VALUE)
{
map.put(key, value);
key = null;
value = Integer.MIN_VALUE;
}
}
Not the cleanest solution but should work with the iterator for your data format.
If your Spreadsheet framework allows to look up specific cells via index you can make it easier by replacing the while-loop and kust directly retrieve the values from the cells.
来源:https://stackoverflow.com/questions/16458640/how-to-group-the-values-which-are-in-excel-to-a-hashmap