当列合并了单元格时,EPPlus-AutoFitColumns()方法失败

我想知道是否有人想出了解决这个问题的办法。我注意到AutoFitColumns()方法在合并单元格的列上失败。我在下面包含了一个基本代码示例:

var cellRange=worksheet.Cells[1,column,2,column];
cells.Merge=true;
cells.Style.HorizontalAlignment=OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
cells.Value=“此处有一些文本”;
worksheet.Cells.AutoFitColumns();

生成的工作表将合并(正确)column变量中列的第1行和第2行中的单元格,但AutoFitColumns()方法将忽略该特定单元格

任何帮助都将不胜感激

基本上

AutoFitColumns被记录为忽略合并的单元格。它没有失败,至少在有缺陷的意义上是如此

Excel中的自动拟合也会忽略合并的单元格

显然,通过Excel 2007,您根本无法对包含合并单元格的行或列使用自动调整功能

我只使用Excel 2013进行了测试,它的表现似乎有所不同:

  • 自动调整行将忽略该行中所有行合并的单元格

  • 自动拟合列将忽略该列中所有合并的列单元格

换句话说,您可以在行和列中对合并的单元格使用AutoFit,它只会忽略沿自动拟合的同一尺寸合并的任何单元格

AutoFit w/r/t合并单元格的预期效果?(+变通办法)

最后,我不确定是否看到自动适应合并单元格的意义。例如,假设在A1:B1处有一个合并单元格,其中的内容填充默认的两列宽度

如果在A列上自动拟合,会发生什么情况?A列是否应该变得足够宽以适应所有A1:B1,有点像将合并单元格视为其内容仅存在于A1(左上角的原始单元格)中?这可能是合理的,因为我无法立即看出在某些情况下是否会暗示奇怪的行为

如果需要类似的东西,我会插入内容,自动调整,然后合并

但是,如果您想在如下情况下自动适应B列,该怎么办:

在这里,您可能希望B列足够宽,以便A1:B1中的所有内容都显示出来。(内容仅为文本“well hello world”。)

恐怕这件事没有一条班轮。不过,这里有一种方法:

  1. 在尚未合并的左上角单元格中插入内容

  2. 保存此单元格列的当前宽度

  3. 自动调整柱

  4. 保存新列宽

  5. 将列宽重置为步骤2中保存的列宽

  6. 合并要合并的单元格

  7. 合计所有合并列的宽度,但最后一列除外

  8. 从步骤4中保存的宽度中减去该总宽度

  9. 将最后一个合并列的宽度设置为步骤8的结果

更一般地说,您可以在合并的列中以任何您认为合适的方式拆分步骤4中的总自动调整宽度

要执行所有这些操作,您需要使用ExcelColumn.AutoFitExcelColumn.Width(和ExcelWorksheet.Column来获取ExcelColumn对象)

但最简单的是

如果您的内容是静态的(或者至少是动态的,但长度不太可变),您可以简单地为所讨论的列设置合理的固定宽度,以您喜欢的方式分布

发表评论