0

我有一个关于用 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;
}
4

1 回答 1

1

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

ActiveSheet.UsedRange.Row
ActiveSheet.UsedRange.Column

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

解释UsedRange按预期返回工作表中的已用范围。但是,如果第一个包含任何内容的单元格是 D4,UsedRange则将从该单元格开始,而不是从 A1 开始。

于 2013-06-25T20:32:08.750 回答