获取UsedRange的绝对偏移量
本文关键字:偏移量 UsedRange 获取 | 更新日期: 2023-09-27 18:20:03
我有一个关于用C#实现excel自动化的问题,希望你能帮助我。
描述:
我必须在当前工作表的UsedRange中找到具有特定值的特定单元格。为此我写了两种方法。第一个从excel工作表中获取UsedRange,第二个将查找结果的位置存储在一个列表中,该列表中的行/列与UsedRange有关。
问题:
如果文件在excel工作表的开头有空的行或列,我就会知道这个特定值在工作表中的绝对位置。。。我是怎么得到那个职位的?
public object[,] GetUsedRangeFromWorksheet(Worksheet worksheet)
{
if (worksheet == null)
throw new ArgumentNullException();
Range usedRange = null;
object[,] usedRangeValues = null;
usedRange = worksheet.UsedRange;
usedRangeValues = (object[,])usedRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
return usedRangeValues;
}
public IList<Tuple<int, int>> FindPositionsOfValue(string name, object[,] usedRange)
{
if (name == null || name == string.Empty)
throw new ArgumentNullException();
if (usedRange == null)
throw new ArgumentNullException();
int iRowMax = usedRange.GetLength(0);
int iColumnMax = usedRange.GetLength(1);
IList<Tuple<int, int>> lFounds = new List<Tuple<int, int>>();
for (int iRow = 1; iRow < iRowMax; iRow++)
{
for (int iColumn = 1; iColumn < iColumnMax; iColumn++)
if(usedRange[iRow, iColumn] != null)
if (usedRange[iRow, iColumn].ToString() == name)
lFounds.Add(Tuple.Create(iRow, iColumn));
}
return lFounds;
}
我在下面的代码中使用ActiveSheet
,因为我不喜欢参数名称worksheet
——这只会导致混淆,并可能发生冲突(如果您错误地键入了错误的大小写)。编一个更合理的名字;)
ActiveSheet.UsedRange.Row
ActiveSheet.UsedRange.Column
这将返回UsedRange中第一个单元格的行号和列号。这些是您正在寻找的偏移量。将它们存储在变量中,并根据需要进行加法或减法运算。
解释:UsedRange
按预期返回工作表中使用的范围。然而,如果具有任何内容的第一个小区是D4,则UsedRange
将从该小区开始,而不是从A1开始。