Apache POI:找出溢出到下一列的文本列

时间:2019-05-31 16:54:17

标签: java apache-poi xssf

我正在使用Apache POI将Excel转换为HTML。我希望HTML表格与Excel中的表格完全一样。我看到很多情况下,Excel单元格中的数据会溢出到下一列。有没有一种方法可以找出数据跨越了多少列,因此我可以向colspan标签添加一个TD属性?从Excel中查看此屏幕截图:

enter image description here

在这种情况下,单元格A2中的数据溢出到单元格B2(A3也溢出到B3)。有没有办法发现对应于单元格A2的TD标签需要colspan="2"属性?

数据溢出的单元格不会合并,因此我不能真正使用sheet.getNumMergedRegions()之类的功能

如果我能以某种方式找出Excel中列的“可见”宽度,我想我也可以计算它。但是,sheet.getColumnWidth()仅提供实际宽度。我没有找到一种方法来找出Excel中列的“可见”宽度。在屏幕截图链接上方,列A的可见宽度非常小。有没有办法找到“可见”宽度?

我正在使用Apache POI 3.17

1 个答案:

答案 0 :(得分:1)

declare @Text1 nvarchar(500) = 'apple, orange, pear' declare @Text2 nvarchar(500) = 'banana, apple' 能够根据列的内容自动调整其大小。因此,它需要能够计算特殊内容所需的列宽。 SheetUtil.getCellWidth就是这样做的。

另外,我们需要了解Apache poi中为列宽引入的非常特殊的度量单位Microsoft。在Excel的{​​{1}}中,列宽为10表示例如默认字符宽度的10个字符适合单元格宽度。但是在内部,宽度是以默认字符宽度的1/256的单位计算的。这就是Excel决定以字符宽度的1/256为单位获得Sheet.getColumnWidth的原因。

因此,如果您有一个GUI,其单元格索引为apache poi,并且内容特殊,则使用

Cell cell

您可以确定内容是否适合该单元格。如果c适用,否则不适用,必须使用Workbook workbook... ... DataFormatter dataFormatter = new DataFormatter(); ... int defaultCharWidth = SheetUtil.getDefaultCharWidth(workbook); ... double cellValueWidth = SheetUtil.getCellWidth(cell, defaultCharWidth, dataFormatter, false); int neededColunmnWidth = (int)cellValueWidth*256; int columnWidth = sheet.getColumnWidth(c); ...

让我们有一个完整的例子来说明原理:

表格:

enter image description here

代码:

columnWidth >= neededColunmnWidth

结果:

enter image description here