使用哈希映射写入Excel文件

  • 嗨,我从哈希映射中得到确切的值,但是我的Apache POI Row和Cell无法正确设置值预期结果,请告诉我。谢谢

我正在得到结果哈希映射:

{1=[ACSS Description1, ACSS Description2, ACSS Description3, SACSS Description4], 2=[11, 1, 4, 12]} 

我期待着:

![在此输入图像说明](http://i.stack.imgur.com/nTnMX.png)

我根据以下代码得到结果:

在此处输入图像描述

那是我的代码:

  public void getList(List listcriteria) { Map<Integer, List> hashmap = new HashMap<Integer , List>(); List listpropertyvalue =new ArrayList(); for(int i=0; i < listcriteria.size(); i++) { String strValue =listcriteria.get(i).getDescription(); listpropertyvalue.add(strValue); hashmap.put(1, listpropertyname); } listpropertyvalue =new ArrayList(); for(int i=0;i<listcriteria.size();i++){ String strInterValue=listcriteria.get(i).getExportIntervalId().toString(); listpropertyvalue.add(strInterValue); hashmap.put(2, listpropertvalue); } } Set keyset = hashmap.keySet(); int rownum = 1; int cellnum = 0 for(Integer key : keyset){ Row row = worksheet.createRow(rownum++); Cell cell = row.createCell(cellnum); List nameList = hashmap.get(key); for(Object obj : nameList) { if(obj instanceof Date) { cell.setCellValue((Date) obj); } else if(obj instanceof Boolean) { cell.setCellValue((Boolean) obj); } else if(obj instanceof String) { cell.setCellValue((String) obj); } else if(obj instanceof Double) { cell.setCellValue((Double) obj); } } cellnum++; rownum=1; } } 

我究竟做错了什么?

对不起,这个迟到的回复。

使用你的代码,我创建了一个工作程序,初始化一个Excel文件Writesheet.xlsx,每行5行,包含5个单元格。 另外,我创建了一个包含5个字符串的List。 然后我用getList(List listcriteria)方法在Writesheet.xlsx上写这个List的内容

 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Test { static XSSFWorkbook workbook = new XSSFWorkbook(); public void getList(List listcriteria){ Map> hashmap = new HashMap>(); //create 5 key value pairs for(int i=0; i < 5; i++){ hashmap.put(i, listcriteria); } System.out.println("hashmap : "+hashmap); Set keyset = hashmap.keySet(); int rownum = 0; int cellnum = 0; XSSFSheet sheet = workbook.getSheetAt(0); rownum = 0; for(Integer key : keyset){ List nameList = hashmap.get(key); for(String s : nameList){ XSSFRow row = sheet.getRow(rownum++); Cell cell = row.getCell(cellnum); if(null!=cell){ cell.setCellValue(s); } } cellnum++; rownum=0; } } public static void main(String[] args) throws IOException { //Creation of List from an Array to test getList Method String[] ss = {"a","b","c","d","e"}; List listcriteria = new ArrayList(); listcriteria.addAll(Arrays.asList(ss)); /***********************************************************/ Test t = new Test(); // Because I put 5 key values pairs in hashmap (see getList method), I create Writesheet.xlsx // file that contains 5 rows each row contains 5 cell FileOutputStream out = new FileOutputStream( new File("Writesheet.xlsx")); XSSFSheet sheet = workbook.createSheet(); for(int i = 0;i<5;i++){ XSSFRow row = sheet.createRow(i); for(int j=0;j<5;j++) row.createCell(j); } workbook.write(out); out.close();//end creation of Excel file // I open Writesheet.xlsx file and write the data on it InputStream inp = new FileInputStream( new File("Writesheet.xlsx")); workbook = new XSSFWorkbook(inp); // listcriteria contains the data that will be written it on Writesheet.xlsx t.getList(listcriteria); out = new FileOutputStream( new File("Writesheet.xlsx")); workbook.write(out); out.close(); inp.close(); System.out.println("Writesheet.xlsx written successfully" ); } } 

我只是改变了void getList(List listcriteria)上的代码所以数据

{1 = [ACSS Description1,ACSS Description2,ACSS Description3,SACSS Description4],2 = [11,1,4,12]}

将它放在hashmap上。其余代码仍然相同,你可以在Writesheet.xlsx上找到你想要的内容。

 Map> hashmap = new HashMap>(); String[] data1 = {"ACSS Description1", "ACSS Description2", "ACSS Description3", "SACSS Description4"}; List s1 = Arrays.asList(data1); hashmap.put(1,s1); String[] data2 = {"11", "1", "4", "12"}; List s2 = Arrays.asList(data2); hashmap.put(2,s2); System.out.println("hashmap : "+hashmap); //the rest of code it is the same 

所有代码都带有变化

 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Test { static XSSFWorkbook workbook = new XSSFWorkbook(); public void getList(List listcriteria){ Map> hashmap = new HashMap>(); String[] data1 = {"ACSS Description1", "ACSS Description2", "ACSS Description3", "SACSS Description4"}; List s1 = Arrays.asList(data1); hashmap.put(1,s1); String[] data2 = {"11", "1", "4", "12"}; List s2 = Arrays.asList(data2); hashmap.put(2,s2); System.out.println("hashmap : "+hashmap); Set keyset = hashmap.keySet(); int rownum = 1; int cellnum = 0; XSSFSheet sheet = workbook.getSheetAt(0); for(Integer key : keyset){ List nameList = hashmap.get(key); for(String s : nameList){ XSSFRow row = sheet.getRow(rownum++); Cell cell = row.getCell(cellnum); if(null!=cell){ cell.setCellValue(s); } } cellnum++; rownum=1; } } public static void main(String[] args) throws IOException { //Creation of List from an Array to test getList Method String[] ss = {"a","b","c","d","e"}; List listcriteria = new ArrayList(); listcriteria.addAll(Arrays.asList(ss)); /***********************************************************/ Test t = new Test(); // Because I put 5 key values pairs in hashmap (see getList method), I create Writesheet.xlsx // file that contains 5 rows each row contains 5 cell FileOutputStream out = new FileOutputStream( new File("Writesheet.xlsx")); XSSFSheet sheet = workbook.createSheet(); for(int i = 0;i<5;i++){ XSSFRow row = sheet.createRow(i); for(int j=0;j<5;j++) row.createCell(j); } workbook.write(out); out.close();//end creation of Excel file // I open Writesheet.xlsx file and write the data on it InputStream inp = new FileInputStream( new File("Writesheet.xlsx")); workbook = new XSSFWorkbook(inp); // listcriteria contains the data that will be written it on Writesheet.xlsx t.getList(listcriteria); out = new FileOutputStream( new File("Writesheet.xlsx")); workbook.write(out); out.close(); inp.close(); System.out.println("Writesheet.xlsx written successfully" ); } } 

在这里结果 在此处输入图像描述