如何移植 OneNote 2010 vba 脚本(托管在 XLSM 文件中)以在 Onenote 2016 中工作
How to port OneNote 2010 vba scripts (hosted in a XLSM file) to work in Onenote 2016
我需要帮助才能从 Onenote 2010 移植到 OneNote 2016,我制作了 Excel VBA 主机工具包
TLDR:
a) 如果我想使用 Excel 2016 VBA 主机来自动化 OneNote 2016(桌面应用程序),我实际上应该 see/reference 什么对象库?我似乎只能 link 到 Onenote 12 对象库,有一个 V15 库但是当我尝试引用时会产生 "name conflict" 错误,即使我取消单击其余部分。我的安装错误吗? (Win10+Excel/ON 2016 32位)
b) OneNote 2016 中对 getpagecontent() 的 vba 调用应该如何,特别是模式参数是什么,一个字符串常量?我应该关心吗?
更长的版本
在 https://github.com/jceresearch/onenote_vba_host (public) 中,我维护了一个 Excel 电子表格,其中包含一些脚本来执行诸如作为个人 doc/pdf 批量导出页面之类的操作,包括它的嵌入式文件。还可以自动为页面编号,并自动在页面中添加内容。它在功能区中添加了一个菜单,您可以在那里看到选项。
代码比较乱,但在 Onenote 2010 下可以正常使用。 2016年我需要尽快上班
2016代码的关键部分在class代码中,调用OneNote:
Set app = New OneNote12.Application
我的2010code/installation已经是OneNote14.Application,但是我的office 365版本只能引用Onenote12对象库。
还有一个 "Microsoft OneNote 15.0 types" 库,但是当我点击它时它会产生名称冲突错误,即使我删除了旧库。还有一个扩展类型库,再次 Excel 不让我参考。
因此当前引用的库是:
- Microsoft Office 16.0 对象库(需要添加额外的功能区元素)
- Microsoft OneNote 12.0 对象库
- Microsoft XML, V3.0(我不得不从 Excel 默认建议的 V6 降级)
- Microsoft Forms 2.0 对象库
- Microsoft VBScript 正则表达式 5.5
有了这些,我可以 运行 宏并调用 OneNote 应用程序,甚至可以获得笔记本和分区的列表。
但是,当主机尝试 运行:
时,OneNote 崩溃得很惨
app.getPageContent sNodeID, sXML, piAll
我尝试了一些方法,比如只带基本数据但结果相同,还尝试了各种其他笔记本、页面、部分。
我认为问题可能与旧版本的对象库有关 and/or 在 getpagecontent 的文档中提到了使用 xsSchema 参数(xs2013 等)。参见 https://docs.microsoft.com/en-us/office/client-developer/onenote/application-interface-onenote
欢迎任何想法,顺便说一句,如果有人想帮助改进工具包,非常欢迎,请与我们联系。
谢谢!
这是我通过反复试验找到的解决方案:
一个。我犯了一个愚蠢的错误,直到我单独测试时才意识到。我认为我的 class 名称与其中一个较新的库(可能是 clsOneNoteHandler)发生冲突。更改为唯一名称似乎可以解决大部分问题,特别是防止加载最新的对象库并最终导致 OneNote 崩溃。
b。我设法 link 到 Onenote 15.0 对象库(不是扩展对象库),这似乎与我的 2010 代码兼容。我注意到它运行速度明显变慢(同一台机器在使用 office 2016 32 位重新成像到 windows 10 后)。
c。我仍然保留了 Microsoft XML、V3.0 库引用和解析 onenote XML 内容的语法,据我所知工作正常。
我需要继续对其进行回归测试,但对我来说最重要的功能是将页面导出为文档及其嵌入文件,这在 Onenote 2016 中仍然有效。
希望这对那里的某个人有所帮助。
欢迎并感谢您的评论!
我需要帮助才能从 Onenote 2010 移植到 OneNote 2016,我制作了 Excel VBA 主机工具包
TLDR:
a) 如果我想使用 Excel 2016 VBA 主机来自动化 OneNote 2016(桌面应用程序),我实际上应该 see/reference 什么对象库?我似乎只能 link 到 Onenote 12 对象库,有一个 V15 库但是当我尝试引用时会产生 "name conflict" 错误,即使我取消单击其余部分。我的安装错误吗? (Win10+Excel/ON 2016 32位)
b) OneNote 2016 中对 getpagecontent() 的 vba 调用应该如何,特别是模式参数是什么,一个字符串常量?我应该关心吗?
更长的版本
在 https://github.com/jceresearch/onenote_vba_host (public) 中,我维护了一个 Excel 电子表格,其中包含一些脚本来执行诸如作为个人 doc/pdf 批量导出页面之类的操作,包括它的嵌入式文件。还可以自动为页面编号,并自动在页面中添加内容。它在功能区中添加了一个菜单,您可以在那里看到选项。
代码比较乱,但在 Onenote 2010 下可以正常使用。 2016年我需要尽快上班
2016代码的关键部分在class代码中,调用OneNote:
Set app = New OneNote12.Application
我的2010code/installation已经是OneNote14.Application,但是我的office 365版本只能引用Onenote12对象库。
还有一个 "Microsoft OneNote 15.0 types" 库,但是当我点击它时它会产生名称冲突错误,即使我删除了旧库。还有一个扩展类型库,再次 Excel 不让我参考。
因此当前引用的库是:
- Microsoft Office 16.0 对象库(需要添加额外的功能区元素)
- Microsoft OneNote 12.0 对象库
- Microsoft XML, V3.0(我不得不从 Excel 默认建议的 V6 降级)
- Microsoft Forms 2.0 对象库
- Microsoft VBScript 正则表达式 5.5
有了这些,我可以 运行 宏并调用 OneNote 应用程序,甚至可以获得笔记本和分区的列表。
但是,当主机尝试 运行:
时,OneNote 崩溃得很惨app.getPageContent sNodeID, sXML, piAll
我尝试了一些方法,比如只带基本数据但结果相同,还尝试了各种其他笔记本、页面、部分。
我认为问题可能与旧版本的对象库有关 and/or 在 getpagecontent 的文档中提到了使用 xsSchema 参数(xs2013 等)。参见 https://docs.microsoft.com/en-us/office/client-developer/onenote/application-interface-onenote
欢迎任何想法,顺便说一句,如果有人想帮助改进工具包,非常欢迎,请与我们联系。
谢谢!
这是我通过反复试验找到的解决方案:
一个。我犯了一个愚蠢的错误,直到我单独测试时才意识到。我认为我的 class 名称与其中一个较新的库(可能是 clsOneNoteHandler)发生冲突。更改为唯一名称似乎可以解决大部分问题,特别是防止加载最新的对象库并最终导致 OneNote 崩溃。
b。我设法 link 到 Onenote 15.0 对象库(不是扩展对象库),这似乎与我的 2010 代码兼容。我注意到它运行速度明显变慢(同一台机器在使用 office 2016 32 位重新成像到 windows 10 后)。
c。我仍然保留了 Microsoft XML、V3.0 库引用和解析 onenote XML 内容的语法,据我所知工作正常。
我需要继续对其进行回归测试,但对我来说最重要的功能是将页面导出为文档及其嵌入文件,这在 Onenote 2016 中仍然有效。
希望这对那里的某个人有所帮助。
欢迎并感谢您的评论!