如何在自定义 OLE 对象中实现类似 Excel 的 OLE 链接行为

Posted

技术标签:

【中文标题】如何在自定义 OLE 对象中实现类似 Excel 的 OLE 链接行为【英文标题】:How to achieve Excel-like OLE link behaviour in a custom OLE object 【发布时间】:2011-03-28 21:16:47 【问题描述】:

在 Word 中,您可以链接到 Excel 电子表格中的特定单元格 - 它本身可以作为单独的文件存在,也可以作为 word doc 中的嵌入对象存在。 然后,您可以创建指向该电子表格中特定单元格的链接,通常通过从就地激活的电子表格中复制单元格,并使用选择性粘贴将链接粘贴到复制的单元格。该链接在链接名称中使用 excel 的 !Sheet1!R2C1 格式来标识单元格(您可以编辑此名称以链接到不同的单元格)。

如何为自定义 OLE 对象(使用 MFC OLE 类构建)实现相同的效果? 是否有可能,或者 Word 是否使用有关 Excel 的内置知识来执行此操作?

【问题讨论】:

【参考方案1】:

简短的回答是Item Moniker。您需要实现 IOleItemContainer 来执行此操作。

http://msdn.microsoft.com/en-us/library/ms693722(VS.85).aspx

当与文件名字对象结合时,项目名字对象形成一个完整的路径。因此,项目名字对象将路径名的概念扩展到文件系统之外,定义路径名来标识单个对象,而不仅仅是文件。

长答案是否定的,Word 不使用有关 Excel 的秘密知识(反之亦然),尽管我确信 OLE 是通过将 Excel 嵌入 Word 作为主要用例来构建的。

您还可以在 Internet Explorer 中嵌入 Excel 范围,或者几乎任何支持嵌入的东西。您可以使用Set oRange = GetObject("c:\path\to\spreadsheet.xls!Sheet1!R2C1") 或类似方法从VBScript 访问范围对象并更改其属性。

【讨论】:

好的,所以在创建了 Item Moniker 之后,您如何“分发”它,正如 CreateItemMoniker 的文档所说的那样?你在ROT中注册了吗? 嗨,没有 ROT 是针对主要对象的,而不是其中的项目。对于 OLE 链接行为,您需要提供 CF_LINKSOURCE。通常它通过特殊粘贴从剪贴板到达目的地。 探索 MSDN 的良好起点在这里:msdn.microsoft.com/en-us/library/838a3whf(VS.80).aspx

以上是关于如何在自定义 OLE 对象中实现类似 Excel 的 OLE 链接行为的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义 UIButton 中实现 .isHighlighted 动画?

如何在自定义相机中实现“捏放大”

如何在自定义 delphi 组件中实现 stringlist 属性?

如何使用edittexts在自定义ListView中实现监听器文本更改?

在自定义指令 angular 4 中实现 onclick()

如何在自定义文件浏览对话框Qt C++中实现返回和下一步按钮