获取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;
}

获取UsedRange的绝对偏移量

我在下面的代码中使用ActiveSheet,因为我不喜欢参数名称worksheet——这只会导致混淆,并可能发生冲突(如果您错误地键入了错误的大小写)。编一个更合理的名字;)

ActiveSheet.UsedRange.Row
ActiveSheet.UsedRange.Column

这将返回UsedRange中第一个单元格的行号和列号。这些是您正在寻找的偏移量。将它们存储在变量中,并根据需要进行加法或减法运算。

解释UsedRange按预期返回工作表中使用的范围。然而,如果具有任何内容的第一个小区是D4,则UsedRange将从该小区开始,而不是从A1开始。