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

11

我想知道是否有人找到了解决这个问题的方法。我注意到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();

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

任何帮助都将不胜感激。


不要合并单元格。而是使用水平对齐方式 跨所选区域居中 - tigeravatar
这种情况下那样做行不通,注意我想要合并的单元格在同一列的前两个单元格顶部。为了使这个Excel文档看起来专业,我需要它们被合并。 - Ben
当我使用ws.Cells["AA"].Value而不是ws.Cells["AA1"].Value时,我遇到了相同的错误。 - Muflix
1个回答

14

基本上...

AutoFitColumns 在文档中 说明 忽略合并的单元格。它没有出错,至少在存在缺陷的意义上来说。

Excel自身的AutoFit功能也会忽略合并单元格。

显然,在 Excel 2007 及之前的版本中,无法对包含合并单元格的行或列使用自动调整大小功能

我只测试了 Excel 2013,它似乎有所不同:

  • 自适应行高度会忽略该行中所有被合并的单元格。

  • 自适应列宽度会忽略该列中所有被合并的单元格。

换句话说,您可以在包含合并单元格的行和列中使用 AutoFit 功能,它将忽略在同一维度上进行合并的任何单元格。

AutoFit 对于合并单元格的期望效果?(+ 解决方法)

最后,我不确定自适应大小功能在合并单元格方面是否有意义。例如,假设您在 A1:B1 中有一个合并单元格,其中的内容填充了默认的两列宽度。

如果您在列 A 上使用 AutoFit,会发生什么?列 A 会变得足够宽以适应 A1:B1 的所有内容吗?这就像把合并单元格视为仅存在于 A1 的左上角原始单元格的内容一样。这可能是合理的,因为我无法立即看到某些情况下可能会出现奇怪的行为。

如果确实需要这样,请先插入内容,然后进行自适应和合并。

但如果您想在类似以下情况下对 B 列进行自适应调整:

enter image description here

在这里,您可能希望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 对象)。

但最简单的方法是...

如果您的内容是静态的(或至少在长度上不会太变化),您可以为相关列设置合理的固定宽度,按任何您喜欢的方式分布。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接