2013-06-25 54 views
0

我有一个关于C#自动化的问题,我希望你能帮助我。获取UsedRange的绝对偏移量

描述:
我必须在具有特定值的当前工作表的UsedRange中找到特定的单元格。为此我写了两种方法。第一个从excel工作表中获得UsedRange,第二个存储位置在UsedRange关系中的row/col列表中。

问题:
如果文件有空行或列开始的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; 
} 
+0

我不明白你的意思,“如果文件有空行或列开始的Excel表格比我知道这个具体的价值在工作表中的绝对位置......我如何得到那个位置?” - 你能解释一下你面临的问题吗? –

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

1

我使用ActiveSheet在下面的代码,因为我不喜欢争论名worksheet - 这只会造成混乱,并可能发生冲突(如果误用了错误的情况下键入它)。补一个更明智的名字;)

ActiveSheet.UsedRange.Row 
ActiveSheet.UsedRange.Column 

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

说明UsedRange按预期的方式返回工作表中的使用范围。但是,如果具有任何内容的第一个单元格是D4,则UsedRange将从此单元格开始,而不是从A1开始。