使用哈希映射写入Excel文件
- 嗨,我从哈希映射中得到确切的值,但是我的Apache POI Row和Cell无法正确设置值预期结果,请告诉我。谢谢
我正在得到结果哈希映射:
{1=[ACSS Description1, ACSS Description2, ACSS Description3, SACSS Description4], 2=[11, 1, 4, 12]}
我期待着:
我根据以下代码得到结果:
那是我的代码:
public void getList(List listcriteria) { Map<Integer, List> hashmap = new HashMap<Integer , List>(); List listpropertyvalue =new ArrayList(); for(int i=0; i < listcriteria.size(); i++) { String strValue =listcriteria.get(i).getDescription(); listpropertyvalue.add(strValue); hashmap.put(1, listpropertyname); } listpropertyvalue =new ArrayList(); for(int i=0;i<listcriteria.size();i++){ String strInterValue=listcriteria.get(i).getExportIntervalId().toString(); listpropertyvalue.add(strInterValue); hashmap.put(2, listpropertvalue); } } Set keyset = hashmap.keySet(); int rownum = 1; int cellnum = 0 for(Integer key : keyset){ Row row = worksheet.createRow(rownum++); Cell cell = row.createCell(cellnum); List 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; } }
我究竟做错了什么?
对不起,这个迟到的回复。
使用你的代码,我创建了一个工作程序,初始化一个Excel文件Writesheet.xlsx,每行5行,包含5个单元格。 另外,我创建了一个包含5个字符串的List。 然后我用getList(List
方法在Writesheet.xlsx上写这个List的内容
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 listcriteria){ Map> hashmap = new HashMap>(); //create 5 key value pairs for(int i=0; i < 5; i++){ hashmap.put(i, listcriteria); } System.out.println("hashmap : "+hashmap); Set keyset = hashmap.keySet(); int rownum = 0; int cellnum = 0; XSSFSheet sheet = workbook.getSheetAt(0); rownum = 0; for(Integer key : keyset){ List 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 listcriteria = new ArrayList (); 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" ); } }
我只是改变了void getList(List
上的代码所以数据
{1 = [ACSS Description1,ACSS Description2,ACSS Description3,SACSS Description4],2 = [11,1,4,12]}
将它放在hashmap上。其余代码仍然相同,你可以在Writesheet.xlsx上找到你想要的内容。
Map> hashmap = new HashMap>(); 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
所有代码都带有变化
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 listcriteria){ Map> hashmap = new HashMap>(); 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 keyset = hashmap.keySet(); int rownum = 1; int cellnum = 0; XSSFSheet sheet = workbook.getSheetAt(0); for(Integer key : keyset){ List 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 listcriteria = new ArrayList (); 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" ); } }
在这里结果
- 使用Apache POI基于csv表更新Excel工作表值
- 使用APACHE添加链接文件POI XSSF不接受目录地址并显示java.net.URISyntaxException
- 使用apache POI的java中的运行时错误
- org.apache.poi.POIXMLException:org.apache.poi.openxml4j.exceptions.InvalidFormatException:
- 阅读xlsx文件时,Apche POI获取单元格颜色
- 多个样式到Excel单元格POI
- 如何使用Java中的Apache POI XWPF将图片添加到.docx文档中
- java.lang.OutOfMemoryError:加载xlsx文件时超出了GC开销限制
- 使用Apache POI XSLF在指定位置的单张幻灯片中附加3张图像