Writing to Excel File using hash map

2019-04-11 10:55发布

问题:

  • Hi,I'm getting exact values from hash map but my Apache POI Row and Cell cannot set values properly expected result like that please let me know.Thanks

I'm getting result hash-map like that:

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

I'm expecting:

I'm getting result based on below code :

And that's my code:

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

What am I doing wrong?

回答1:

Sorry for this late reply.

Using you code, I created a working program that initialize a Excel file Writesheet.xlsx with 5 rows each row contains 5 Cells. Also, I created a List that contains 5 strings. Then I used getList(List<ExportReport> listcriteria) method to write the content of this List on 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" );

    }

}


回答2:

I just change the code on void getList(List<String> listcriteria) so the data

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

will be put it on hashmap.The rest of code still the same and Voilà you get on Writesheet.xlsx what you want.

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

All the code with Change

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

    }

}

And here the result