如何使用 POI 在 Java 中添加边框单元格

How to add border cells in Java with POI

提问人:tamilanban 提问时间:11/16/2023 最后编辑:Olaf Kocktamilanban 更新时间:11/17/2023 访问量:91

问:

0

我正在尝试使用apache poi使用下面的Java代码在excel中添加边框。应用边界需要数小时的时间。我知道我使用了循环,因为边界必须基于它来制作,因为有要求。有没有其他方法可以减少时间消耗? x1,x2 将根据迭代不断变化

static int x1 = 1
static int x2 = 0
XSSFCellStyle style = report.createCellStyle();
style.setBorderTop(BorderStyle.MEDIUM);
style.setBorderBottom(BorderStyle.MEDIUM);
style.setBorderLeft(BorderStyle.MEDIUM);
style.setBorderRight(BorderStyle.MEDIUM);
PropertyTemplate pt = new PropertyTemplate();  
for (Object cellValues : rowsSet) {
    x2 = x2 + rowsSet.size();   
    pt.drawBorders(new CellRangeAddress(x1, x2, 1, 1),  
    BorderStyle.MEDIUM, BorderExtent.OUTER);   
    x1 = rowsSet.size() + 1;
    pt.applyBorders(sheet);
}
Java Excel Apache - POI

评论

3赞 PeterJ 11/16/2023
这回答了你的问题吗?如何在更短的时间内使用Java添加边框单元格?
2赞 aled 11/16/2023
问题标题非常令人困惑。请对其进行编辑以专注于手头的问题,而不是向读者提供指导。
1赞 Olaf Kock 11/17/2023
参观并阅读如何提问。删除/重新提出问题无济于事。而是(在代码之上)提供您的观察和期望。此外,鉴于您删除的问题有一个解决方案,但您坚持“使用循环”:考虑您可能正在陈述一个 x-y 问题。此外,考虑到您的工作表的一定尺寸,我预计任何循环都需要一段时间。
0赞 Olaf Kock 11/17/2023
注意:在我写了上面的评论后,我在您的代码中发现了一个问题,并在我的回答中进行了描述。但是,由于您只是要求“添加边框”,但没有明确描述要将它们应用于哪些单元格,因此我在您的代码中停止了对问题的描述。你仍然需要自己进行适当的更正,因为这个问题没有描述你想要实现的目标(除了“边界”)。在调试器中运行代码(并检查值)确实可以帮助您了解自己的代码。
2赞 trashgod 11/17/2023
您的问题似乎是重复的;请不要删除它,而是编辑问题以详细说明为什么您不能使用建议的方法

答:

1赞 Olaf Kock 11/17/2023 #1

你希望你的循环做什么?您是否已调试过代码?

鉴于

for (Object cellValues : rowsSet) {
    x2 = x2 + rowsSet.size();   
    pt.drawBorders(new CellRangeAddress(x1, x2, 1, 1),  
         BorderStyle.MEDIUM, BorderExtent.OUTER);   
    x1 = rowsSet.size() + 1;
    pt.applyBorders(sheet);
}

如果 rowSet 的大小为 100,则 x1 和 x2 值在迭代中将如下所示:

迭 代 x1 开始 x1 结束 x2 启动 x2 结束
0 1 101 0 100
1 101 101 100 200
2 101 101 200 300
3 101 101 300 400
... ... ... ... ...
99 101 101 9900 10000

这是意料之中的吗?(假设:否)

鉴于您解决了一个 ,这很容易失控,并生成一个巨大的电子表格 - 因此需要时间(但不能提供您期望的输出)CellRangeAddress(x1, x2, 1, 1)

在顶部,请注意 - 的接口,尤其是参数名称。 在您的情况下始终为 1。 总是(除了第一次迭代)101,而急剧上升CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)firstCollastColfirstRowlastRow