在 Excel 范围 (IRange) 上调用 Select 时为 0x800a03ec。 范围是从工作表的使用范围返回的

发布于 2024-07-08 17:34:14 字数 827 浏览 7 评论 0原文

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

代码如下:

COleVariant 结果;

HRESULT hr = AutoWrap(DISPATCH_METHOD, &结果, irange, L"选择", 0);

我不会费心发布 AutoWrap 函数的代码(除非有人问)。 这是众所周知的,我没有修改它。

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

工作表未锁定。

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

希望有人可以帮忙!

更新:我也尝试过

hr = iRange->Select(vResult);

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

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

I'm trying to select the "used range". I get the worksheet's UsedRange, then I invoke the Select function on it. I receive HRESULT 0x800a03ec on the select call.

Here's the code:

COleVariant result;

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

I won't bother posting the code for the AutoWrap function (unless someone asks). It's pretty well-known and I haven't modified it.

I'm pretty sure that irange is good, because I tried some calls on it to verify that it has what I expect, and it does. If I iterate through it, I can see the content of each cell (and it's correct); the number of rows and columns returned is correct, and the "Address" property returned checks out.

Worksheet is not locked.

I've seen other problems posted having to do with Locale, and my system is set to U.S. English as is my user account. Neither has been changed.

Hope someone can help!

Update: I have also tried

hr = iRange->Select(vResult);

This does return S_OK, but it does not select the range. Normally, I can't directly call the functions in the iRange struct; the result is a gpf or access violation -- so I have to use the autowrap function (to drive an Invoke call). I'm not surprised this call doesn't work.

I have also tried opening the excel file in non-ReadOnly mode, in case I was locked. This didn't fix the problem. I can select individual cells by getting a single item (cell) from the range, and calling its Select, but I can't select the range.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼趣 2024-07-15 17:34:14

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

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

I found the answer to this question. This only appears to be a problem when used in the DSOFRAMER sample (Microsoft KB 311765). DSOFramer is a general purpose ActiveX control for embedding MS Office documents. The problem also only happens in a debug build; release builds are fine.

I also found a workaround that works on release or debug build: get any cell in the range (using get_Item), then call select on that item, then select again to de-select it. Once that's done, the select can be called on the range. Apparently, select cannot be called on the range if there is a cell already selected (or perhaps if the selection state is undefined).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文