这个问题让我完全不解。
我有一个Excel文档加载得很好。 它有行,列和数据,我想遍历行。 但EPPLus很奇怪。
我采取第二行:
ExcelRange range1 = worksheet.Cells[2, worksheet.Dimension.Start.Column, 2, worksheet.Dimension.End.Column];
这给了我{A2:D2}
Splendid!到目前为止这么好,但后来我想要该行的第一个单元格:
ExcelRange range2 = range1[1,1];
哪个给了我{A1}
并且更糟糕的是,range1
的值也变为{A1}
而不是我选择的行。
如何解决此问题并从ExcelRange中获取ExcelRange?
这让我完全感到困惑....感谢anyhelp
答案 0 :(得分:3)
我确实遇到了同样的问题,以获得正确的起始单元格:
var range2 = worksheet.Cells[range1.Start.Row, range1.Start.Column];
右下角的细胞也一样:
var range3 = worksheet.Cells[range1.End.Row, range1.End.Column];
答案 1 :(得分:1)
如果查看ExcelRange
索引器后面的代码,您会看到get
实际上会设置基址(嵌套else
):
public ExcelRange this[string Address]
{
get
{
if (_worksheet.Names.ContainsKey(Address))
{
if (_worksheet.Names[Address].IsName)
{
return null;
}
else
{
base.Address = _worksheet.Names[Address].Address;
}
}
else
{
base.Address = Address;
}
_rtc = null;
return this;
}
}
为什么他们这样做我不确定(我假设它有一个实现细节)。但这可以解释为什么引用另一个地址会改变所选范围。因此,像Benexx所说,必须从Cells
的{{1}}集合中直接引用。
答案 2 :(得分:0)
您可以使用 Offset 方法获取 ExcelRange 的子范围。这将为您提供 ExcelRange 的新实例,并且不会修改原始实例。
这是一个例子:
public static void AlternateRowColor(ExcelRange range)
{
for (var rowOffset = 1; rowOffset < range.Rows; rowOffset += 2)
{
using (var rowRange = range.Offset(rowOffset, 0, 1, range.Columns))
{
rowRange.Style.Fill.PatternType = ExcelFillStyle.Solid;
rowRange.Style.Fill.BackgroundColor.SetColor(Color.Cornsilk);
}
}
}