范围查找方法和列宽

时间:2012-10-12 20:24:59

标签: excel vsto

我遇到了一个我无法找到文档的问题。

我一直在用数据填充电子表格。然后我在我的工作表中搜索特定值,我发现其中一些找不到。

我“解决”了我的问题,但我对Range.Find的行为感到非常惊讶。

当我填充表单时,一些值显示为######,因为列大小不够宽。我注意到那些是无法找到的值。 在所有列上运行自动调整后,我能够找到所有值。

除了调整列的大小之外,还有什么我可以做的吗?

编辑更新:

我第一次有这个:

find.Find(day.ToShortDateString(), Type.Missing, Excel.XlFindLookIn.xlValues, 
Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);

我把它改为:

find.Find(day.ToShortDateString(), Type.Missing, Excel.XlFindLookIn.xlFormulas, 
Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, 
Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);

现在列宽不是问题。

在哪种情况下会使用不同的.XlFindLookIn参数?

1 个答案:

答案 0 :(得分:2)

Excel.XlFindLookIn.xlValues

基于单元格的.Text属性的值进行搜索(我看过一些MS论坛帖子,他们说这是基于.Value2,但是你的案例清楚地证明了这个错误)

Excel.XlFindLookIn.xlFormulas

根据单元格的.Formula属性的值进行搜索。如果单元格具有固定值或用于该单元格的实际公式,则此属性包含与.Value2属性相同的值。

这意味着您自己的解决方案仅在您的工作表仅包含固定值且无法找到值来自公式的单元格时才有效。

请注意,此搜索行为不是特定于VSTO的。它与Excel本身的查找对话框中的工作方式相同,如果从VBA调用,也是如此。

最简单的测试用例:

  • 在单元格A1中输入1234567
  • 在单元格A2中输入= A1
  • 调整(收缩)列直到达到1E + 06
  • 转到搜索对话框(ctrl + f)并打开展开选项
  • 输入1234567作为搜索值
  • '查找全部',看看'公式'将返回“A1”
  • '查找全部'并查看'值'将不会返回任何内容
  • 现在调整列的大小以使整个值可见并再次启动查找对话框
  • '查找所有',看看'公式'仍然会返回“A1”
  • '查找全部',查看'值'现在将返回“A1”和“A2”
相关问题