范围查找方法和列宽
我遇到了一个我一直无法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”