有没有办法找到Excel中的一个范围内的范围?(Is there a way to find a r

2019-09-24 06:11发布

我有一个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但它似乎是查找的范围内唯一的一块信息,并返回该地址,但我发现没有什么可以让我看起来一个又一个的范围内的内容。

任何帮助表示赞赏!

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

这是否在一定程度上帮助回答你的问题?



文章来源: Is there a way to find a range within a range in Excel?
标签: c# excel range