我正在使用Apache POI将Excel转换为HTML。我希望HTML表格与Excel中的表格完全一样。我看到很多情况下,Excel单元格中的数据会溢出到下一列。有没有一种方法可以找出数据跨越了多少列,因此我可以向colspan
标签添加一个TD
属性?从Excel中查看此屏幕截图:
在这种情况下,单元格A2中的数据溢出到单元格B2(A3也溢出到B3)。有没有办法发现对应于单元格A2的TD标签需要colspan="2"
属性?
数据溢出的单元格不会合并,因此我不能真正使用sheet.getNumMergedRegions()
之类的功能
如果我能以某种方式找出Excel中列的“可见”宽度,我想我也可以计算它。但是,sheet.getColumnWidth()
仅提供实际宽度。我没有找到一种方法来找出Excel中列的“可见”宽度。在屏幕截图链接上方,列A的可见宽度非常小。有没有办法找到“可见”宽度?
我正在使用Apache POI 3.17
答案 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);
...
。
让我们有一个完整的例子来说明原理:
表格:
代码:
columnWidth >= neededColunmnWidth
结果: