我想在POI中形成如下的excel输出:
如图所示,我在Header3、Header4和Header5下分别有3个子列。
名单如下:
ListA-包含列A的值
ListB-包含列B的值
List1-是数据库行的列表,每行有3列。第一列位于标题3下,第二列位于标题4下,第三列位于标题5下,即分别为C、F和i列。
List2和List3-与List1相似,每个值分别位于Header3、4和5之下。列表2列在D、G和J栏下,而列表3列分别列在E、H和K栏下。
问题1:
我将标题名存储为一个包含5个值的列表。
如何迭代此列表以将值分配给合并区域?
我正在做下面的事情,但没有工作:
// first two headers
for (int i = 0; i < headers.size() - 3; i++) {
headerCell = headerRow.createCell(i);
headerCell.setCellValue(allHeaders.get(i).toUpperCase());
headerCell.setCellStyle(styles.get("header"));
}
// Merging
sheet.addMergedRegion(org.apache.poi.ss.util.CellRangeAddress.valueOf("$C$1:$E$1"));
sheet.addMergedRegion(org.apache.poi.ss.util.CellRangeAddress.valueOf("$F$1:$H$1"));
sheet.addMergedRegion(org.apache.poi.ss.util.CellRangeAddress.valueOf("$I$1:$K$1"));
for (int i = 3; i < headers.size(); i++) {
headerCell = headerRow.createCell(i);
headerCell.setCellValue(allHeaders.get(i).toUpperCase());
headerCell.setCellStyle(styles.get("header"));
}
问题二:
如何遍历ListA到List3以输入我上面解释过的值?
感谢阅读!
事实上,我并没有完全理解你的问题,但是我有一些关键点,我认为会对你有所帮助。
>
sheet.getNumMergedRegions()
返回整数,该整数将是工作表中合并区域的总数。您也可以使用循环对其进行迭代。
CellRangeAddress merge=sheet.getMergedRegion(int索引)
将为您提供从getNumMergedRegions()
现在
merge.getFirstRow()
,merge.getLastRow()
,merge.getFirstColumn()
,merge.getLastColumn()
,merge.getNumberOfCells()
,都是同样的方法。
对包含合并单元格的行和不包含任何合并单元格的行的迭代没有太大不同。希望这将帮助你解决你的问题。
而且,当不为c1和c2设置任何CellValue时,实际上可以将它们的CellType设置为Numeric,突然之间代码又可以工作了。它在没有CTTable的情况下也可以工作。 有什么想法或变通办法吗?还是POI的一个bug(因为它尝试从任何单元格中获取字符串值,而不管它的单元格类型如何)?
我正在尝试使用Apache POI XSSF将表导出为xlsx。表有5列。 我尝试了和。的问题,它返回所有行中数据的最高宽度。因此,如果表中某些数据的宽度越大,表头的宽度就会变得越大。对于第二个,我需要知道标题单元格的宽度,以便将其设置为工作表。但是如何找到特定单元格的宽度呢?还没有弄清楚怎么做。你知道怎么做吗?
问题内容: 还有其他方法可以使用Apache POI库在Excel中合并单元格? 我正在尝试使用以下内容,但无法正常工作 问题答案: 您可以使用 该示例将从B2合并到E2。请记住,它是基于零的索引(例如POI版本3.12)。 有关详细信息,请参见《BusyDeveloper指南》。
我试着用下面的方法,但它不起作用
谁能解释一下如何使用Apache POI为合并的单元格创建边框吗? 我使用的代码只影响一个单元格。
我们正在使用ApachePOI库创建excel表格。 我们如何限制单元格只接受数值?在ApachePOI库中是否有只限于数字的类? 感谢 Rama Krishna