3

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

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

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

在 GUI 中,我有一些东西可以让用户从参数中进行选择,并且可以根据他们的选择从 xls 文件中加载信息,例如,他们可以选择:

写 | 随机 | 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 相同的顺序和格式存储用户的选择。让我们称那个 object[,] 为 'look4it'

我正在尝试找到一种我可以告诉的方法:我想在“valueArray”中找到“look4it”,该方法的答案将是 A22164:E22164,因此我可以计算从“valueArray”复制的范围并使用正确的信息。

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

任何帮助表示赞赏!

4

1 回答 1

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];

这是否有助于回答您的问题?

于 2012-11-01T16:27:10.423 回答