Ben*_*Ben 9 .net c# 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();
Run Code Online (Sandbox Code Playgroud)
生成的工作表将使第1行和第2行中的单元格合并(正确)为列变量中的列,但AutoFitColumns()方法将忽略该特定单元格.
任何帮助,将不胜感激.
Wil*_*iam 10
AutoFitColumns被记录忽略合并单元格.它没有失败,至少在有缺陷的意义上.
显然,通过Excel 2007,您无法对包含合并单元格的行或列使用AutoFit功能.
我只测试了Excel 2013,它看起来表现不同:
自动调整行会忽略该行中所有行合并的单元格.
自动拟合列会忽略该列中所有列合并的单元格.
换句话说,您可以在包含合并单元格的行和列中使用AutoFit,它将忽略已沿您自动拟合的相同维度合并的任何单元格.
最后,我不确定我是否看到自动适应合并单元格是否合理.例如,假设您在A1:B1处有一个合并的单元格,其内容填充默认的两列宽度.
如果您自动适应A列,应该发生什么?A列是否应该足够宽以适应所有的A1:B1,有点像处理合并的单元格,好像它的内容只存在于左上角的原始单元格A1中?这可能是合理的,因为我无法立即看到在某些情况下是否可能隐含奇怪的行为.
如果需要这样的东西,我会插入内容,自动适应,然后才合并.
但是,如果你想在B列上自动调整,在这种情况下怎么办:

在这里,您可能希望B列足够宽,以便A1:B1中的所有内容都显示出来.(内容只是文本"井问世界".)
我担心,没有任何一个班轮.不过,这是一种方法:
将内容插入尚未合并的左上角单元格中.
保存此单元格列的当前宽度.
自动调整列.
保存新的列宽.
将列宽重置为您在步骤2中保存的值.
合并要合并的单元格.
总计所有合并列的宽度,但最后一列.
从您在步骤4中保存的宽度中减去此总和.
将最后一个合并列的宽度设置为步骤8的结果.
更一般地说,您可以以您认为合适的任何方式从合并列中拆分步骤4中的总自动装配宽度.
要做到这一切,你需要使用ExcelColumn.AutoFit和ExcelColumn.Width(并ExcelWorksheet.Column抓住ExcelColumn对象).
如果您的内容是静态的(或者至少是动态的,但长度不是太多),您可以简单地为相关列设置合理的固定宽度,然后根据您的需要进行分配.