我正在尝试选择“使用范围”。我得到工作表的UsedRange,然后我调用它上面的Select函数。我在select call上收到HRESULT 0x800a03ec。
以下是代码:
COleVariant结果;
HRESULT hr = AutoWrap(DISPATCH_METHOD,& result,irange,L“Select”,0);
我不打算发布AutoWrap功能的代码(除非有人问)。它非常有名,我没有修改它。
我很确定irange是好的,因为我尝试了一些调用它来验证它是否符合我的预期,而且确实如此。如果我遍历它,我可以看到每个单元格的内容(并且它是正确的);返回的行数和列数是正确的,返回的“Address”属性检出。
工作表未锁定。
我发现其他问题与Locale有关,我的系统设置为美国英语,我的用户帐户也是如此。两者都没有改变。
希望有人可以提供帮助!
更新:我也尝试了
hr = iRange->Select(vResult);
这会返回S_OK,但不会选择范围。通常,我不能直接调用iRange结构中的函数;结果是gpf或访问冲突 - 所以我必须使用autowrap函数(来驱动一个Invoke调用)。这个电话不起作用我并不感到惊讶。
我还尝试在非ReadOnly模式下打开excel文件,以防我被锁定。这并没有解决问题。我可以通过从范围中获取单个项目(单元格)来选择单个单元格,并调用其选择,但我无法选择范围。
答案 0 :(得分:3)
我找到了这个问题的答案。在DSOFRAMER示例(Microsoft KB 311765)中使用时,这似乎只是一个问题。 DSOFramer是用于嵌入MS Office文档的通用ActiveX控件。问题也只发生在调试版本中;发布版本很好。
我还发现了一个适用于发布或调试版本的解决方法:获取范围内的任何单元格(使用get_Item),然后调用该项目上的select,然后再次选择以取消选择它。完成后,可以在范围上调用选择。显然,如果已经选择了一个单元格(或者如果选择状态未定义),则无法在范围上调用select。