我遇到了一个我无法找到文档的问题。
我一直在用数据填充电子表格。然后我在我的工作表中搜索特定值,我发现其中一些找不到。
我“解决”了我的问题,但我对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参数?
答案 0 :(得分:2)
Excel.XlFindLookIn.xlValues
基于单元格的.Text属性的值进行搜索(我看过一些MS论坛帖子,他们说这是基于.Value2,但是你的案例清楚地证明了这个错误)
Excel.XlFindLookIn.xlFormulas
根据单元格的.Formula属性的值进行搜索。如果单元格具有固定值或用于该单元格的实际公式,则此属性包含与.Value2属性相同的值。
这意味着您自己的解决方案仅在您的工作表仅包含固定值且无法找到值来自公式的单元格时才有效。
请注意,此搜索行为不是特定于VSTO的。它与Excel本身的查找对话框中的工作方式相同,如果从VBA调用,也是如此。
最简单的测试用例: