10

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

var cellRange = worksheet.Cells[1, column, 2, column];
cells.Merge = true;
cells.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
cells.Value = "Some Text Goes Here";
worksheet.Cells.AutoFitColumns();

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

任何帮助,将不胜感激。

4

1 回答 1

13

基本上...

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

Excel 中的自动调整也会忽略合并的单元格。

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

我只用 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对象)。

但最简单...

如果您的内容是静态的(或者至少是动态的,但长度变化不大),您可以简单地为相关列设置合理的固定宽度,按您的意愿分布。

于 2014-05-07T20:59:14.500 回答