【问题标题】:Office 365 Excel can't be embed in place inside Windows native applicationOffice 365 Excel 无法嵌入到 Windows 本机应用程序中
【发布时间】:2022-10-06 14:26:12
【问题描述】:

我使用 MFC COleDocObjectItem 在 Win32 应用程序中嵌入了 Office Excel。我使用DoVerb(OLEIVERB_SHOW,...) 来显示 Excel。在Office 365 2002(12527.22060) 版本中,Excel 可以正常嵌入到应用程序中。但在较新版本的 Office 365 中,Excel 总是从应用程序中弹出。我尝试DoVerb(OLEIVERB_INPLACEACTIVATE,...) 强制 Excel 显示到位,但它不起作用。

Office 365 Excel 是否不再支持就地嵌入?是否有任何方法可以将 Excel 嵌入到新版本的 Office 365 中?

    标签: c++ excel office365


    【解决方案1】:

    您是否尝试将显示设置从“优化以获得最佳外观”更改为“优化兼容性”?

    Display Settings in Office

    【讨论】:

      【解决方案2】:

      我们遇到了同样的问题。 我们曾经检查过“兼容性优化”,它在 Office 版本 2202(内部版本 16.0 14931.20132)之前运行良好,并且从 Office 版本 2203(内部版本 16.0 15028.20160)开始停止工作。现在,Word 被取代。 知道如何解决这个问题吗?

      我们使用 C++ 和 OLE 组件进行开发。 Step1:创建Word组件如下: https://learn.microsoft.com/en-us/windows/win32/api/ole2/nf-ole2-olecreatefromfile

      CIStorage ciStorage(pStorage); IFT(!ciStorage.IsEmpty() || COMCALL(StgCreateDocfile(NULL, STGM_SHARE_DENY_WRITE|STGM_DELETEONRELEASE|STGM_READWRITE|STGM_TRANSACTED|STGM_CREATE, 0,顺存储))) { CIOleObject ciOleObject; IFCOM(OleCreateFromFile(CLSID_NULL,cbsFileName,ciOleObject.iidOf(),renderopt,pFormatetc,pSite,ciStorage, ciOleObject)) {

      CLSID_NULL:如记录的 cbsFileName:{m_bstr=0x0000027a33146098 L"C:\ProgramData\MEGA\Hopex 应用程序 服务器\5000\.shadowFiles\hopex.core\15.5.0+6267\Mega_Std\megastyl620.dot" } renderopt : null pFormatetc : null pSite : 我们的站点组件 实现以下接口:public IOleClientSite, 公共 IOleInPlaceSite, 公共 IOleDocumentSite, 公共 IAdviseSink, 公共 IServiceProvider, 公共 IInternetSecurityManager, 公共 IDocHostUIHandler ciStorage:存储

      步骤 2:显示嵌入在我们的 windows 应用程序中的 Word https://learn.microsoft.com/en-us/windows/win32/api/oleidl/nf-oleidl-ioleobject-doverb

      if(!(bOK = (m_ciOleObject.DoVerb(lVerb, &stMsg, m_pSite, 0L , m_pSite->m_hWndSite, m_pSite->m_rcClip) == S_OK)))

      lVerb:-1(匹配 OLEIVERB_SHOW) sMsg:空 m_pSite:我们的站点 m_pSite->m_hWndSite :必须嵌入单词的父 HWND。 m_pSite->m_rcClip : 我们想要的区域的坐标 插入 OLE 对象(单词)。例如:{LT(0, 0) RB(943, 437) [943 x 437]}。

      需要注意的是DoVerb是在OLE Object创建之后直接调用的。 我们尝试了以下不同的动词,但没有成功。 OLEIVERB_PRIMARY (0L) OLEIVERB_SHOW (-1) OLEIVERB_UIACTIVATE (-4)

      始终支持这些 API。 我们想知道如何解决这个问题。

      【讨论】:

        猜你喜欢
        • 2016-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多