使用apache poi时,如何调整excel单元格大小以适应内容大小的问题

28

我是Apache POI api的新手。我正在尝试使用arraylist创建Excel工作表。

我的Java代码如下所示。

HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet("new sheet");
     HSSFCellStyle style = wb.createCellStyle();
        style.setFillForegroundColor(HSSFColor.LIME.index);
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

    HSSFRow row4 = sheet.createRow(4);
    row4.createCell(4).setCellValue("name");
    row4.createCell(5).setCellValue("emailId");
    sheet.autoSizeColumn(5);
    List<Bean> nameList = this.getArrayList();

    Iterator<Bean> nameListIterator = nameList.iterator();


    sheet.autoSizeColumn(5);

    int i=5;
    HSSFRow row = null;


    while(nameListIterator.hasNext())
    {
        Bean bean = nameListIterator.next();

        row = sheet.createRow(i);
        row.createCell(4).setCellValue(bean.getName());


        row.createCell(5).setCellValue(bean.getMailId());
        i++;
    }
  • 数组列表如下:
List<Bean> beanList = new ArrayList<Bean>();
    beanList.add(new Bean("Amy","g@y.comrtyrtyrtyrtyrtyr"));
    beanList.add(new Bean("Joan","p@y.comrtyrtyrtyrtyrtyr"));
    beanList.add(new Bean("Megan","r@y.comrtyrtyrtyrtyrtyr"));
    beanList.add(new Bean("Joe","m@y.comrtyrtyrtyrtyrtyr"));
    beanList.add(new Bean("Febi","j@y.comrtyrtyrtyrtyrtyr"));
当Excel表格生成时,列宽不能正确地适应内容大小。我在谷歌上搜索了相关问题并发现sheet.autoSizeColumn(5);是解决我的问题的方法。我按照上面的代码添加了它,但问题仍然存在。我是否使用正确?还有其他解决方案吗?请帮忙,谢谢。
附注:我正在使用Apache Poi 3.6。

3
在写入数据之前,你已经设置了自动列大小,因此它无法确定如何调整大小。把它放在循环之后。 - Sean
@Sean 对于像我这样的初学者来说,非常有用的解释。谢谢! - mvg
https://dev59.com/Z2Ij5IYBdhLWcg3wflQy - gavenkoa
@gavenkoa,您提供的链接与本页面的讨论有何关联? - mvg
@mvg 它提供了与你的问题相同的答案。 - gavenkoa
1个回答

60

你只需要将调用移动到

sheet.autoSizeColumn(5);

要指向已添加数据后的代码位置,因此在 while 循环之后紧接着的位置应该可以实现。


1
谢谢你的回答。你的答案解决了我的问题。我只是把autosizecolumn调用放在while循环之后,现在它可以工作了。再次感谢。 - mvg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接