java 使用哈希映射写入 Excel 文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/30095135/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Writing to Excel File using hash map
提问by sameer
- 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
- 嗨,我正在从哈希映射中获取精确值,但我的 Apache POI 行和单元无法正确设置值,如预期的结果,请告诉我。谢谢
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?
我究竟做错了什么?
采纳答案by esprittn
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
使用您的代码,我创建了一个工作程序,该程序将 Excel 文件 Writesheet.xlsx 初始化为 5 行,每行包含 5 个单元格。此外,我创建了一个包含 5 个字符串的列表。然后我用 getList(List<ExportReport> listcriteria)
方法把这个List的内容写在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" );
}
}
回答by esprittn
I just change the code on void getList(List<String> listcriteria)
so the data
我只是更改代码,void getList(List<String> listcriteria)
以便数据
{1=[ACSS Description1, ACSS Description2, ACSS Description3, SACSS Description4], 2=[11, 1, 4, 12]}
{1=[ACSS 描述 1, ACSS 描述 2, ACSS 描述 3, SACSS 描述 4], 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.
将把它放在 hashmap 上。其余的代码仍然相同,瞧你在 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
All the code with Change
带有 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
结果在这里