有没有办法在Excel中找到范围内的范围?
问题描述:
我有一个xls文件看起来是这样的:有没有办法在Excel中找到范围内的范围?
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'复制的范围并使用正确的信息。
我试过Range.Find,但它似乎是在一个范围内寻找一个独特的信息片段,并返回地址,但我没有发现任何东西可以让我在另一个范围内寻找Range内容一。
任何帮助表示赞赏!
答
我想我会在这种情况下做的是首先构造一个由每个头和它的位置组成的查找列表。对于列表中的关键字,我会将标题单元连接在一起以创建单个查找值。因此,紧随您的代码后:
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);
}
}
请记住,这是extempore,我没有测试过它。我不确定Range.get_Value
方法是如何将数据放入数组的,因此这些维度可能是错误的。另外,我正在根据您提供的数据的图像做出关于如何在电子表格中标识标题行的假设。
无论如何,一旦你建造可以执行简单的查找,提取头的行号:
string userSelectedHeader = "concatenation of whatever the user selected";
int rowNumber = lookUpList[userSelectedHeader];
这是否在一定程度上帮助回答你的问题?
这正是我最终解决问题的方式......不过,有点晚了,我检查了你的答案。无论如何,谢谢你。 – unmultimedio
没问题。无论如何,自己解决它总是更有意义! –