Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApachePOI逐列写入_Java_Insert_Apache Poi_Multiple Columns - Fatal编程技术网

Java 使用ApachePOI逐列写入

Java 使用ApachePOI逐列写入,java,insert,apache-poi,multiple-columns,Java,Insert,Apache Poi,Multiple Columns,如何使用ApachePOI逐列编写 我有一个自定义映射,其中的键包含多个值 {a=[1, 2], b=[3, 4, 5]} 现在我想把这些东西写进excel,a和b作为列名,它们的值作为单元格值 Desired Output a b 1 3 2 4 5 我得到的只是使用ApachePOI逐行编写。有人能给我建议一个技巧,让我可以一列一列地写吗?我知道POI只支持添加行。您可以通过查看最长值列表来创建行数。在您的情况下,b。然后遍历单元格并插入值。

如何使用ApachePOI逐列编写

我有一个自定义映射,其中的键包含多个值

{a=[1, 2], b=[3, 4, 5]}
现在我想把这些东西写进excel,a和b作为列名,它们的值作为单元格值

Desired Output
a      b
1      3
2      4
       5

我得到的只是使用ApachePOI逐行编写。有人能给我建议一个技巧,让我可以一列一列地写吗?

我知道POI只支持添加行。您可以通过查看最长值列表来创建行数。在您的情况下,b。然后遍历单元格并插入值。

我找到了答案,实际上POI只支持逐行插入,所以为了逐列插入,我应用了这个逻辑

   HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet("sheet");
    //Create a new row in current sheet
    Row row = sheet.createRow(0);
    //Create a new cell in current row
    for(String key:map.keySet())
    {
        Cell cell1=row.createCell(columnNum);
        cell1.setCellValue(key);
        //System.out.println(map.get(key));
        List<Integer> columnValues = map.get(key);
        int tempHeight=columnValues.size();
        /*if(maxRows<tempHeight)
        {
            maxRows=tempHeight;
        }*/
        int temp=1;
        for(int i:columnValues)
        {
            Row row2;
            //System.out.println("no of rows:"+(sheet.getPhysicalNumberOfRows()-1)+", height:"+tempHeight);
            if(sheet.getPhysicalNumberOfRows()-1>temp-1)
            {
                //System.out.println("take row");
                row2=sheet.getRow(temp);

            }
            else
            {

                //System.out.println("Row inserted");
                row2=sheet.createRow(temp);
            }
            Cell cell2=row2.createCell(columnNum);
            cell2.setCellValue(i);
            temp=temp+1;
        }

        columnNum=columnNum+1;


    }
HSSFWorkbook工作簿=新的HSSFWorkbook();
HSSFSheet sheet=工作簿.createSheet(“工作表”);
//在当前图纸中创建新行
Row Row=sheet.createRow(0);
//在当前行中创建新单元格
for(字符串键:map.keySet())
{
Cell cell1=row.createCell(columnNum);
cell1.设置CellValue(键);
//System.out.println(map.get(key));
List columnValues=map.get(键);
int tempHeight=columnValues.size();
/*如果(maxRowstemp-1)
{
//System.out.println(“take row”);
第2行=表。getRow(温度);
}
其他的
{
//System.out.println(“插入行”);
row2=sheet.createRow(临时);
}
Cell cell2=row2.createCell(columnNum);
cell2.设置CellValue(i);
温度=温度+1;
}
columnNum=columnNum+1;
}

请不要忘记在问题中添加“?”!有些人在页面中搜索“?”,如果“问题”中不存在,则直接转到行中的下一个(实际)问题。好的@andrewhompson,我将从下次开始记住这一点,我也会按照相同的逻辑,查找特定的键集并找到其深度,然后将其与我们在excel中插入的maxRows进行比较,但我不能使它有效率,无论如何,你的建议是高度赞赏的