来自 ExcelRange 的单元格
Cell from ExcelRange
这个问题让我百思不得其解。
我有一份 Excel 文件,可以正常加载。
它有行、列和数据,我想遍历这些行。
但是 EPPLus 很奇怪。
我坐第二排:
ExcelRange range1 = worksheet.Cells[2, worksheet.Dimension.Start.Column, 2, worksheet.Dimension.End.Column];
这给了我 {A2:D2}
太棒了!到目前为止一切顺利,但我想要该行的第一个单元格:
ExcelRange range2 = range1[1,1];
这给我 {A1}
更糟糕的是,range1
的值也更改为 {A1}
而不是我选择的行。
如何解决此问题并从 Excel 范围中获取 Excel 范围?
这让我完全困惑....感谢您的帮助
我确实遇到了同样的问题,获取正确的起始单元格:
var range2 = worksheet.Cells[range1.Start.Row, range1.Start.Column];
右下角的单元格也是如此:
var range3 = worksheet.Cells[range1.End.Row, range1.End.Column];
如果您查看 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 所说的那样,必须从 Worksheet
.
的 Cells
集合中直接引用
您可以使用 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);
}
}
}
这个问题让我百思不得其解。
我有一份 Excel 文件,可以正常加载。 它有行、列和数据,我想遍历这些行。 但是 EPPLus 很奇怪。
我坐第二排:
ExcelRange range1 = worksheet.Cells[2, worksheet.Dimension.Start.Column, 2, worksheet.Dimension.End.Column];
这给了我 {A2:D2}
太棒了!到目前为止一切顺利,但我想要该行的第一个单元格:
ExcelRange range2 = range1[1,1];
这给我 {A1}
更糟糕的是,range1
的值也更改为 {A1}
而不是我选择的行。
如何解决此问题并从 Excel 范围中获取 Excel 范围?
这让我完全困惑....感谢您的帮助
我确实遇到了同样的问题,获取正确的起始单元格:
var range2 = worksheet.Cells[range1.Start.Row, range1.Start.Column];
右下角的单元格也是如此:
var range3 = worksheet.Cells[range1.End.Row, range1.End.Column];
如果您查看 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 所说的那样,必须从 Worksheet
.
Cells
集合中直接引用
您可以使用 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);
}
}
}