首页 文章

获取UsedRange的绝对偏移量

提问于
浏览
0

我对C#的Excel自动化有疑问,希望你能帮到我 .

描述:
我必须在当前工作表中的UsedRange中找到具有特定值的特定单元格 . 因此我写了两种方法 . 第一个从excel工作表中获取UsedRange,第二个存储在一个列表中的founds的位置,其中row / col与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;
}

1 回答

  • 1

    我在以下代码中使用 ActiveSheet ,因为我不喜欢参数名称 worksheet - 这只会引起混淆,并且可能会发生冲突(如果您错误地输入了错误的情况) . 组成一个更明智的名字;)

    ActiveSheet.UsedRange.Row
    ActiveSheet.UsedRange.Column
    

    这些将返回UsedRange中第一个单元格的行号和列号 . 这些是您正在寻找的补偿 . 将它们存储在变量中,并根据需要添加或减去它们 .

    ExplanationUsedRange 按预期返回工作表中的used-range . 但是,如果具有任何内容的第一个单元格是D4,则 UsedRange 将从此单元格开始,而不是从A1开始 .

相关问题