调用Excel范围(IRange)时选择0x800a03ec。范围是从工作表的usedrange返回的

时间:2008-11-07 17:27:18

标签: excel automation ole dsoframer

我正在尝试选择“使用范围”。我得到工作表的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文件,以防我被锁定。这并没有解决问题。我可以通过从范围中获取单个项目(单元格)来选择单个单元格,并调用其选择,但我无法选择范围。

1 个答案:

答案 0 :(得分:3)

我找到了这个问题的答案。在DSOFRAMER示例(Microsoft KB 311765)中使用时,这似乎只是一个问题。 DSOFramer是用于嵌入MS Office文档的通用ActiveX控件。问题也只发生在调试版本中;发布版本很好。

我还发现了一个适用于发布或调试版本的解决方法:获取范围内的任何单元格(使用get_Item),然后调用该项目上的select,然后再次选择以取消选择它。完成后,可以在范围上调用选择。显然,如果已经选择了一个单元格(或者如果选择状态未定义),则无法在范围上调用select。