使用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
?
答案 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 );
}