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