获取范围内的列宽列表?

时间:2015-04-23 20:00:51

标签: c# epplus

使用EPPlus,有没有办法确定范围内列的宽度?

假设我想在执行AutoFit后得到第1列到第10列的宽度:

// autofit columns 1 through 10 based on all data
worksheet.Cells[2, 1, numberOfRows + 2, 10].AutoFitColumns(22, 50);
// determine resulting widths
List<double> columnWidths = worksheet.Cells[2, 1, 2, 10]
    .Select(s=> s.Width/* doesn't work, no Width property */ ).ToList();

这不起作用,因为.Cells生成IEnumerable<ExcelRangeBase>,ExcelRangeBase中的每个项本身都是一个嵌套的ExcelRangeBase,它似乎永远存在。因此,.Select的任何数量都不会到达单元格列表。细胞索引被精心设计为仅生成单行单元格,我希望为每个单元格获得宽度。不确定是否有一种优雅的方法来实现这一目标。

如何使用第1列到第10列的宽度列表填充columnWidths

2 个答案:

答案 0 :(得分:3)

嗯,您可以在ExcelCellAddress对象的.Start属性范围内找到第一个单元格的ExcelRangeBase对象。

这导致了这种替代方法:

List<double> columnWidths = worksheet.Cells[2, 1, 2, 10]
    .Select(s => worksheet.Column(s.Start.Column).Width)
    .ToList(); 

我认为它的稍微更好,但优雅是在旁观者的眼中! : - )

答案 1 :(得分:0)

这就是我现在想出来的,但欢迎任何提出更优雅的答案:

List<double> dataWidths = new List<double>(10);
for(int i= 0; i < 10; ++i)
{
    dataWidths.Add( worksheet.Column(i + 1).Width );
}