如果需要将现有的web部件添加到VSTO外接程序中而不支持其他平台,则可以考虑将web浏览器控件放置到任务窗格或窗体区域中(在Outlook的情况下),您可以加载现有的Web应用程序并以编程方式与之通信。请在Introduction to Microsoft Edge WebView2文章中了解更多信息。Microsoft Edge WebView2控件允许您嵌入Web技术WebView2控件使用Microsoft Edge作为呈现引擎,在本机应用中显示Web内容。 最后,如果要重用Office Web加载项中的现有代码,可以考虑为此创建Web程序集。WebAssembly(缩写为Wasm)是用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为编程语言的可移植编译目标,支持在Web上部署客户端和服务器应用程序。Blazor可以帮助完成此类任务。
3条答案
按热度按时间wwtsj6pe1#
很抱歉,这是不可能的。您链接到的已接受答案中的注解是错误的。Office.js在其中运行的嵌入式webview控件经过特殊修改。(请参阅Runtimes in Office Add-ins。)Office.js无法在使用WinForms或WPF创建的普通嵌入式控件中初始化。
weylhg0b2#
令人沮丧的是,VSTO、Office任务窗格加载项和Office内容加载项涵盖了不同的功能,但并没有设计为一起工作。此外,用例看起来很自然(呈现基于HTML的报告),但由于某种原因,它不受支持。
尤金给出了很好的建议,但我想添加我的发现,以防您正在搜索与我相同的东西,嵌入电子表格中的Web浏览器控件。如果这是一个严格的要求,您的(不太好的)选项是:
1.通过worksheet. AddControl将winforms Web控件(或winforms控件中托管的WPF控件)嵌入到电子表格中。这不需要像手动将ActiveX WebBrowser添加到电子表格中那样修改注册表。但是,如果电子表格被放大或缩小,它将不会呈现,并且您必须滚动自己的移动/调整大小控件。
1.使用自定义ActiveX控件和OleObjects。添加以在工作表中嵌入winforms/WPF Web浏览器。这解决了缩放问题,但我不会开始详细说明在2023年创建ActiveX控件的问题。
1.创建一个自定义Web浏览器控件,并通过使用Win32将工作簿的HWND作为其父控件,将其“嵌入”到“电子表格”中。您必须根据电子表格显示的内容等手动处理控件的可见性。
1.将Office Content外接程序作为VSTO外接程序的“姐妹”应用程序。我没有研究如何将它们一起部署或一起启动。此外,UX流程不会很好,因为出于某种原因,Microsoft决定不允许用户以编程方式打开Content外接程序的示例。它需要通过功能区。
然而,如果这对你来说不是一个问题,我能够得到一个原型工作,我的VSTO应用程序告诉我的内容加载项的嵌入式Web浏览器渲染什么html,使用this page中详细说明的方法。
解决方案是使用文档作为通信媒介。在特定情况下,我们在文档中使用CustomXMLParts。它的工作原理如下:
一个外接程序需要向另一个外接程序发送更新,因此它将为文档编写一个具有特定名称空间和“上下文”(基本上,我就是正在通信的TaskPane)的CustomXMLPart。
这两个外接程序都将运行一个window.setInterval()线程,以检查给定名称空间中CustomXMLParts的文档。
ContentAdd-in上的计时器将触发,从任务窗格中找到新的customXMLPart,读取内容,然后根据需要进行自我更新,最后删除CustomXMLPart。
j8yoct9x3#
如果需要将现有的web部件添加到VSTO外接程序中而不支持其他平台,则可以考虑将web浏览器控件放置到任务窗格或窗体区域中(在Outlook的情况下),您可以加载现有的Web应用程序并以编程方式与之通信。请在Introduction to Microsoft Edge WebView2文章中了解更多信息。Microsoft Edge
WebView2
控件允许您嵌入Web技术WebView2
控件使用Microsoft Edge作为呈现引擎,在本机应用中显示Web内容。最后,如果要重用Office Web加载项中的现有代码,可以考虑为此创建Web程序集。WebAssembly(缩写为Wasm)是用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为编程语言的可移植编译目标,支持在Web上部署客户端和服务器应用程序。
Blazor
可以帮助完成此类任务。