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

时间:2013-09-19 12:30:17

标签: c# .net excel epplus

我想知道是否有人提出解决此问题的方法。我注意到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()方法忽略该特定单元格。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:8)

基本上...

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

Excel中的AutoFit也会忽略合并的单元格。

显然可以通过Excel 2007,you cannot use the AutoFit feature for rows or columns that contain merged cells完成。

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

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

  • 自动调整列会忽略该列中所有列合并的单元格。

换句话说,您可以在包含合并单元格的行和列中使用AutoFit,它只会忽略已沿您自动拟合的相同维度合并的所有单元格。

AutoFit w / r / t合并单元的期望效果? (+解决方法)

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

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

如果需要这样的东西,我会插入内容,自动调整,然后才合并。

但是,如果您想在B列上自动调整,如下所示:

enter image description here

在这里,您可能希望B列足够宽,以便A1:B1中的所有内容都显示出来。 (内容只是文本“井问世界”。)

对此我没有任何一个班轮,我很害怕。不过,这是一种方法:

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

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

  3. 自动调整列。

  4. 保存新的列宽。

  5. 将列宽重置为您在步骤2中保存的内容。

  6. 合并要合并的单元格。

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

  8. 从您在步骤4中保存的宽度中减去此总数。

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

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

    要完成所有这些操作,您需要使用ExcelColumn.AutoFitExcelColumn.Width(和ExcelWorksheet.Column来抓取ExcelColumn个对象。

    但最简单......

    如果您的内容是静态的(或者至少是动态的,但长度不是太多),您只需为相关列设置合理的固定宽度,然后根据需要进行分发。