2015-05-09 2 views
1

я получаю список хэш-карту ключ и значение, как: {1=[ACSS Description1, ACSS Description2, ACSS Description3, SACSS Description4], 2=[11, 1, 4, 12]}Как список имеет значение карты писать, чтобы преуспеть файл, используя Apache поите

Я хотел бы, чтобы установить значение первенствовать ячейки так:

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 

    } 

} 

и тест-класса для тестирования метода

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"); 

    } 

} 

После запуска класса Test всего класса UtilsMethod, вы получите файл этого XLSX

enter image description here

+0

Я получаю строку с ошибкой 'workbook.write (out);' ** java.io.IOException: Stream closed ** – sameer

+0

Спасибо, что работает отлично ... – sameer

0

HashMap Sheetmap = new HashMa п();

 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); 
    } 
Смежные вопросы