1

我正在尝试选择“使用范围”。我得到了工作表的 UsedRange,然后在其上调用 Select 函数。我在选择调用中收到 HRESULT 0x800a03ec。

这是代码:

COleVariant 结果;

HRESULT hr = AutoWrap(DISPATCH_METHOD, &result, irange, L"Select", 0);

我不会费心发布 AutoWrap 功能的代码(除非有人问)。它非常有名,我没有修改它。

我很确定 irange 很好,因为我尝试了一些调用来验证它是否符合我的期望,并且确实如此。如果我遍历它,我可以看到每个单元格的内容(并且是正确的);返回的行数和列数是正确的,并且返回的“地址”属性签出。

工作表未锁定。

我已经看到发布与区域设置有关的其他问题,并且我的系统设置为美国英语,我的用户帐户也是如此。两者都没有改变。

希望有人能帮忙!

更新:我也试过

hr = iRange->Select(vResult);

这确实返回 S_OK,但它不选择范围。通常,我不能直接调用 iRange 结构中的函数;结果是 gpf 或访问冲突——所以我必须使用 autowrap 函数(来驱动 Invoke 调用)。我对这个电话不起作用并不感到惊讶。

我还尝试以非只读模式打开 excel 文件,以防我被锁定。这并没有解决问题。我可以通过从范围中获取单个项目(单元格)并调用其 Select 来选择单个单元格,但我无法选择范围。

4

1 回答 1

3

我找到了这个问题的答案。仅当在 DSOFRAME 示例 (Microsoft KB 311765) 中使用时才会出现问题。DSOFramer 是用于嵌入 MS Office 文档的通用 ActiveX 控件。该问题也仅发生在调试版本中;发布版本很好。

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

于 2008-11-14T19:21:37.170 回答