2015-05-09 50 views
1

我越來越名單哈希映射鍵和類似值excel文件:{1=[ACSS Description1, ACSS Description2, ACSS Description3, SACSS Description4], 2=[11, 1, 4, 12]}列表如何有地圖的值寫入使用Apache POI

我想設置Excel單元格值這樣的:

ACSS Description1  11 
ACSS Description2  1 
ACSS Description3  4 
ACSS Description4  12 

但我越來越擅長寫這樣的文件結果:

 empty     11 
    empty     1 
    empty     4 
    empty     12 

但我的示例代碼片段總是顯示第二列的值,首先 列值顯示空列。請讓我知道我在哪裏有 做錯了?謝謝 。

public void listhashMapValues(Map<Integer,List<String>> hashmap,List<Export>list){ 

    List<String> listpropertvalue =new ArrayList<String>(); 

    for(int i=0;i<list.size();i++){ //example size is 5 

    String strValue=list.get(i).getDescription(); 

    System.out.println(strValue); 
    listpropertvalue.add(strValue); 
    hashmap.put(1, listpropertvalue); 
    } 
    listpropertvalue =new ArrayList<String>(); 

    for(int i=0;i<list.size();i++){ 

    String strInterValue=list.get(i).getExportIntervalId().toString(); 

    listpropertvalue.add(strInterValue); 
    hashmap.put(2, listpropertvalue); 
    } 
    int rownum =1; 
    int cellnum = 0; 
    for(int i=0;i<hashmap.size();i++){ 

    List<Integer> listMap =new ArrayList<Integer>(hashmap.keySet()); 

    Integer key = listMap.get(i); 

    List<String> nameList = hashmap.get(key); 

    for(Object obj : nameList){ 

    rowtitle =worksheet.createRow(rownum++); 

    celltitle =rowtitle.createCell(cellnum); 

    if (obj instanceof String){ 

    celltitle =rowtitle.createCell(cellnum); 

    celltitle.setCellValue((String) obj); 
    } 
    } 
} 
cellnum++; 
rownum=1; 
} 
} 

我的POJO類,如:

@Entity 

@Table(name ="T_KPI_AUTO_EXPORT_CONFIG") 

public class ExportReport implements Serializable { 

private String description; 

private Integer exportIntervalId; 

@Column(name ="Export_Interval_Id", nullable = false) 

    public Integer getExportIntervalId() { 

     return exportIntervalId; 
    } 
    public void setExportIntervalId(Integer exportIntervalId) { 

     this.exportIntervalId = exportIntervalId; 
    } 
    @Column(name ="Description", nullable = false) 

    public String getDescription() { 

     return description; 
    } 
    public void setDescription(String description) { 

     this.description = description; 
    } 
} 
+0

你可以通過調試來確認hashmap是否在註冊到所需數據之前被導出到excel中? –

+0

是的,當我將所有列表數據添加到哈希映射中時,即使得到相同的結果,請讓我知道我犯了什麼錯誤? – sameer

+0

你在地圖上或列表上收到你的數據嗎? – esprittn

回答

0

我創建一個類包含的方法,這將有助於您:

Criteria criteria=hibernateTemplate.getSessionFactory().openSession().createCriteria(ExportReport.‌​class); List<ExportReport> list = criteria.list();把你的數據在地圖

創建一個Xlsx文件並使用從地圖寫入數據所需的行數和單元格數來初始化它。

從地圖將數據寫入到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.List; 
import java.util.Map; 
import java.util.Set; 
import java.util.TreeMap; 

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 UtilsMethod { 

    private XSSFWorkbook workbook = new XSSFWorkbook(); 

    /* 
    * Take a Map of integer and List of string and 
    *Create a Xlsx file on given path with number of row equal to size of nameList And number of Cell equal to keyset size 
    */ 
    public void initializeExcelFile(Map<Integer,List<String>>hashmap,String path) throws IOException{ 

     FileOutputStream out = new FileOutputStream(new File(path)); 
     Set<Integer> keyset = hashmap.keySet(); 
     XSSFSheet sheet = workbook.createSheet(); 
     XSSFRow row = null; 
     List<String> nameList = hashmap.get(keyset.toArray()[0]); 

     for(int j=1; j<nameList.size()+1;j++){ 
      row = sheet.createRow(j); 
      if(null != row){ 
       for(int i=0;i<keyset.size();i++){ 
        row.createCell(i); 
       } 
      } 
     } 

     workbook.write(out); 
     out.close(); 
    } 

    /* 
    * Use initializeExcelFile(hashmap,path) to initialize a Xlsx file in given path 
    * After that, write the content of hashmap into Xlsx file 
    */ 
    public void writeToExcelfile(Map<Integer,List<String>>hashmap,String path) throws IOException{ 

     Set<Integer> keyset = hashmap.keySet(); 
     InputStream inp = new FileInputStream(new File(path)); 
     FileOutputStream out = new FileOutputStream(new File(path)); 
     int rownum = 1; 
     int cellnum = 0; 

     initializeExcelFile(hashmap,path); 

     workbook = new XSSFWorkbook(inp); 

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

     workbook.write(out); 
     out.close(); 
     inp.close(); 
    } 

    public Map<Integer,List<String>> putListIntoMap(List<ExportReport>exportReports) { 

     Map<Integer,List<String>> exportRep = new TreeMap<Integer, List<String>>(); 
     List<String> descriptions = new ArrayList<String>(); 
     List<String> exportIntervalIds = new ArrayList<String>(); 

     for(ExportReport report:exportReports){ 
      descriptions.add(report.getDescription()); 
      exportIntervalIds.add(report.getExportIntervalId().toString()); 
     } 

     exportRep.put(1, descriptions); 
     exportRep.put(2, exportIntervalIds); 

     return exportRep; 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

    } 

} 

和測試類測試所有UtilsMethod類的方法

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 


public class Test { 


    public static void main(String[] args) throws IOException { 

     ExportReport exportReport = new ExportReport(); 
     exportReport.setExportIntervalId(11); 
     exportReport.setDescription("ACCSDESCRIPTION1"); 

     ExportReport exportReport2 = new ExportReport(); 
     exportReport2.setExportIntervalId(1); 
     exportReport2.setDescription("ACCSDESCRIPTION2"); 

     ExportReport exportReport3 = new ExportReport(); 
     exportReport3.setExportIntervalId(4); 
     exportReport3.setDescription("ACCSDESCRIPTION3"); 

     ExportReport exportReport4 = new ExportReport(); 
     exportReport4.setExportIntervalId(12); 
     exportReport4.setDescription("ACCSDESCRIPTION4"); 

     List<ExportReport> exportReports = new ArrayList<ExportReport>(); 

     exportReports.add(exportReport); 
     exportReports.add(exportReport2); 
     exportReports.add(exportReport3); 
     exportReports.add(exportReport4); 

     UtilsMethod utilsMethod = new UtilsMethod(); 

     Map<Integer,List<String>> map = utilsMethod.putListIntoMap(exportReports); 
     System.out.println(map); 


     utilsMethod.writeToExcelfile(map, "Writesheet.xlsx"); 

     System.out.println("Writesheet.xlsx written successfully"); 

    } 

} 

運行測試類後,你會得到這個xlsx檔案

enter image description here

+0

我得到錯誤行'workbook.write(出);'** java.io.IOException:流關閉** – sameer

+0

感謝它的工作正常... – sameer

0

HashMap Sheetmap = new HashMa P();

 SheetColumnName s1 = new SheetColumnName(1); 
    s1.setFile_Name("Censtar Energy- Elect.xlsx"); 

    Sheetmap.put(s1, s1.setState("A7")); 
    Sheetmap.put(s1, s1.setZone("B7")); 

    SheetColumnName s2 = new SheetColumnName(2); 
    s2.setFile_Name("Direct Energy- Elect.xls"); 
    Sheetmap.put(s2, s2.setState("A55")); 

    System.out.println(Sheetmap.get(s1)); 
    System.out.println(Sheetmap.get(s2)); 

    Collection<String> values = Sheetmap.values(); 

    ArrayList<String> listOfValues = new ArrayList<String>(values); 

    for (String value : listOfValues) 
    { 
      System.out.println(value); 
      FileReader fileReader=new FileReader(); 
      fileReader.ProcessFile(s1.getFile_Name(),value); 
    }