有没有办法在Excel中找到范围内的范围?

时间:2012-10-18 06:27:18

标签: c# excel range

我有一个看起来像这样的xls文件:

http://i.stack.imgur.com/d2fux.png

嗯,这就像依赖于标题的同一条信息一样,在这种情况下,标题是行22164,下一个标题是22178,依此类推。

在GUI中,我有一些东西可以让用户从参数中选择,并且可以选择从xls文件加载信息,具体取决于他们的选择,例如,他们可以选择:

  

WR |随机| 4 | 6 | 15

查看存储在A22165中的信息:O22177

我已经拥有工作簿中所有信息的工作表,让我们调用该对象[,]'valueArray':

Workbook workBook = _excelApp.Workbooks.Open(censFilePath);
        Worksheet sheet = (Worksheet)workBook.Sheets[1];
        Range sheetRange = sheet.UsedRange;
        object[,] valueArray = 
            (object[,])sheetRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);

我创建了另一个对象,它以xls所具有的相同顺序和格式存储用户的选择。让我们称这个对象[,]就像'look4it'

我正在尝试找到一个我可以告诉的方法:我想在'valueArray'中找到'look4it',该方法的答案是A22164:E22164所以我可以在那之后计算从'valueArray复制的范围'并使用正确的信息。

我已经尝试了Range.Find,但它似乎是在一个Range中查找一个独特的信息,并返回地址,但我发现没有任何东西可以让我在另一个范围内查找Range的内容

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下我要做的是首先构建一个由每个标题及其位置组成的查找列表。对于列表中的键,我会将标题单元连接在一起以生成单个查找值。所以紧跟在您的代码之后:

Dictionary<string, int> lookUpList = new Dictionary<string, int>();

// Loop through the rows

for (int i = 0; i < valueArray.GetLength(0); i++)
{
    // Identify the header rows

    if (valueArray[i, 0].ToString() == "WR")
    {
        // Concatenate the header strings into a single string

        string header = "";

        for (int j = 0; j < valueArray.GetLength(1); j++)
        {
            header += valueArray[i, j].ToString();
        }

        // Store the header location

        lookUpList.Add(header, i + 1);
    }
}

请记住,这是临时的,我还没有测试过。我不确定Range.get_Value方法究竟是如何将数据放入数组中的,因此维度可能是错误的。此外,我正在假设如何根据您提供的数据图像识别电子表格中的标题行。

无论如何,构建完成后,您可以执行简单的查找以提取标题的行号:

string userSelectedHeader = "concatenation of whatever the user selected";
int rowNumber = lookUpList[userSelectedHeader];

这有助于回答你的问题吗?