2015-05-07 200 views
2
  • 喜写入Excel文件,我是从哈希表获取精确值,但我的Apache POI行和 细胞不能设置值正确预期的结果一样,请让我 know.Thanks

我得到结果哈希像那样的地图:使用哈希映射

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

我期待:

![enter image description here](http://i.stack.imgur.com/nTnMX.png)

我得到下面的代码基础上的结果:

enter image description here

这是我的代码:

public void getList(List<ExportReport> listcriteria) 
    { 
     Map<Integer, List<String>> hashmap = new HashMap<Integer , List<String>>(); 
     List<String> listpropertyvalue =new ArrayList<String>(); 
     for(int i=0; i < listcriteria.size(); i++) 
     { 
      String strValue =listcriteria.get(i).getDescription(); 
      listpropertyvalue.add(strValue); 
      hashmap.put(1, listpropertyname); 
     } 
      listpropertyvalue =new ArrayList<String>(); 
      for(int i=0;i<listcriteria.size();i++){ 

       String strInterValue=listcriteria.get(i).getExportIntervalId().toString(); 
       listpropertyvalue.add(strInterValue); 
       hashmap.put(2, listpropertvalue); 
      } 
    } 
    Set<Integer> keyset = hashmap.keySet(); 
    int rownum = 1; 
    int cellnum = 0 

    for(Integer key : keyset){ 

     Row row = worksheet.createRow(rownum++); 

     Cell cell = row.createCell(cellnum); 
     List<String> 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; 
    } 
} 

我在做什么错?

+1

能否请你说明你预期 – esprittn

+0

刚才我已经更新了我的文章,请您及时Excel文件的一个片段让我知道是否有任何其他方式。谢谢 – sameer

回答

0

对不起,这个延迟的答复。

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

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<String> listcriteria){ 
     Map<Integer, List<String>> hashmap = new HashMap<Integer , List<String>>(); 
     //create 5 key value pairs 
     for(int i=0; i < 5; i++){ 
      hashmap.put(i, listcriteria); 
     } 
     System.out.println("hashmap : "+hashmap); 
     Set<Integer> keyset = hashmap.keySet(); 
     int rownum = 0; 
     int cellnum = 0; 
     XSSFSheet sheet = workbook.getSheetAt(0); 
     rownum = 0; 
     for(Integer key : keyset){ 
      List<String> 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<String> listcriteria = new ArrayList<String>(); 
     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"); 

    } 

} 
+0

感谢您回覆我。上面的代码,如果我有更改变量值1它工作正常我不想使用硬编码? 'hashmap.put(i,listcriteria); ' – sameer

+0

谢谢请看我的帖子,我已经根据预期的结果再次更新需要请让我知道我又犯了什么错误? – sameer

0

我只是改变代码上void getList(List<String> listcriteria)所以数据

{1 = [ACSS说明1,说明2 ACSS,ACSS Description3,SACSS Description4],2 = 11,1,4,12]}

将会把它的代码hashmap.The休息还是你上Writesheet.xlsx相同的,瞧你想要什么。

Map<Integer, List<String>> hashmap = new HashMap<Integer , List<String>>(); 
     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<String> listcriteria){ 
     Map<Integer, List<String>> hashmap = new HashMap<Integer , List<String>>(); 
     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<Integer> keyset = hashmap.keySet(); 
     int rownum = 1; 
     int cellnum = 0; 
     XSSFSheet sheet = workbook.getSheetAt(0); 
     for(Integer key : keyset){ 
      List<String> 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<String> listcriteria = new ArrayList<String>(); 
     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"); 

    } 

} 

在这里,结果代码 enter image description here

+0

感谢我回复我的方式,但我写的excel文件只显示单元[1]值(11,1,4,2)而不是单元[0]值为空。 – sameer

+0

看到更新,并告诉我,如果这是你想要的结果 – esprittn

+0

谢谢回答,是的完全一样。 – sameer