poi写excel,按列写

我有一个excel表,表的第一行是每列的标头存到String[]中了,一个Map<String,List>数组,现在如果String[i]与Map中String相同,就把... 我有一个excel表,表的第一行是每列的标头存到String[]中了,一个Map<String,List>数组,现在如果String[i]与Map中String相同,就把Map中的List数组写入String[i]所在的那一列。所有List的长度都一样,我自己写了一段代码:
int k =1;
while (k<mapExcel.get(title[1]).size()) {
HSSFRow rowExcel = sheetCeshi.createRow(k);
for(int j=0;j<title.length;j++){
if(title[j].equals(String[i])){
List<String> list=mapExcel.get(title[j]);
rowExcel.createCell(i).setCellValue(list.get(k-1));

}
}
k++;
}

但是这段代码只能存储最后一列,前几列在存的时候每存下一列都把上一列给清空了,求大神帮忙写个代码,能实现 我前面说的目的
展开
 我来答
百度网友e9947c4ae
2013-09-30 · 超过14用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:40万
展开全部
//看到你的问题有点晚了,呵呵!以下是我写的小demo ,希望可以帮到你。	
public static void main(String[] args) throws IOException {

FileOutputStream fos = new FileOutputStream("D:\\12.xls");

String[] str=new String[]{"A1","B2","C3","D4","E5","F6"};

Workbook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("demo1");
//创建第一行
Row rowHeader = sheet.createRow(0);
for (int i = 0; i < str.length; i++) {
//写入列头
Cell cell = rowHeader.createCell(i);
cell.setCellValue(str[i]);

}
Map<String, List<String>> map = getExcelData();
//创建第二行
Row row = sheet.createRow(1);
int k=0;
for (String mapKey : map.keySet()) {
List<String> list = map.get(mapKey);
//比对列头
if (mapKey.equals(str[k])) {
Cell cell= row.createCell(k);
StringBuilder builder=new StringBuilder();
for (String listStr : list) {
builder.append(listStr);
}
cell.setCellValue(builder.toString());
}
k++;
}
workbook.write(fos);
fos.close();
}


public static Map<String, List<String>> getExcelData() {

Map<String, List<String>> map = new HashMap<String, List<String>>();
List<String> list1 = new ArrayList<String>();
list1.add("A1");
list1.add("B1");
list1.add("C1");
list1.add("D1");
list1.add("E1");
list1.add("F1");
map.put("A1", list1);
List<String> list2 = new ArrayList<String>();
list2.add("A2");
list2.add("B2");
list2.add("C2");
list2.add("D2");
list2.add("E2");
list2.add("F2");
map.put("B2", list2);
List<String> list3 = new ArrayList<String>();
list3.add("A3");
list3.add("B3");
list3.add("C3");
list3.add("D3");
list3.add("E3");
list3.add("F3");
map.put("C3", list3);
List<String> list4 = new ArrayList<String>();
list4.add("A4");
list4.add("B4");
list4.add("C4");
list4.add("D4");
list4.add("E4");
list4.add("F4");
map.put("D4", list4);
List<String> list5 = new ArrayList<String>();
list5.add("A5");
list5.add("B5");
list5.add("C5");
list5.add("D5");
list5.add("E5");
list5.add("F5");
map.put("E5", list5);
List<String> list6 = new ArrayList<String>();
list6.add("A6");
list6.add("B6");
list6.add("C6");
list6.add("D6");
list6.add("E6");
list6.add("F6");
map.put("F6", list6);
return map;
}
//分析了一下你失败的原因,可能是在每次循环都是在创建同一个row,这样的话每次都会覆盖上一个row 。修改方案将创建row放在循环之外。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式