范围查找方法和列宽

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

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

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

发生了什么事情是,当我填充工作表时,有些值显示为######,因为列大小不够宽。 我注意到那些是无法find的价值。 在所有列上运行自动填充后,我可以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参数?

 Excel.XlFindLookIn.xlValues 

根据单元格的.Text属性的值进行search(我看过一些MS论坛post,他们说它是基于.Value2的,但是你的案例清楚地certificate了这个错误)

 Excel.XlFindLookIn.xlFormulas 

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

这一切都意味着您自己的解决scheme只适用于如果您的工作表只包含固定值,并且不会find值来自公式的单元格。

请注意,此search行为不是VSTO特定的。 它与Excel本身的查找对话框中的工作方式是一样的,而且如果您从VBA调用if也是如此。

最简单的testing用例:

  • 在单元格A1中input1234567
  • 在单元格A2中input= A1
  • 调整(缩小)列widht,直到获得1E + 06
  • 转到search对话框(ctrl + f)并打开展开选项
  • input1234567作为search值
  • 在“公式”中查找“查找所有”将返回“A1”
  • 在“值”中查找“查找所有”将不会返回任何内容
  • 现在调整列的大小,使整个值可见,并再次启动查找对话框
  • 在“公式”中查找“全部查找”仍将返回“A1”
  • 在“值”中查找“查找所有”现在将返回“A1”和“A2”