为了从日志记录脚本收集输出,我想使用onepy将信息添加到 OneNote 2013 笔记本。不幸的是,update_page_content()
onepy提供的方法对我不起作用。为了更深入地理解这个问题,我切换到 C#,那里有许多 OneNote API 的在线示例,经过一些麻烦,我设法让以下简约 C# 示例工作:
using System;
using OneNote = Microsoft.Office.Interop.OneNote;
class Program
{
static void Main(string[] args)
{
OneNote.Application onenoteApp = new OneNote.Application();
string xml = "<one:Page xmlns:one=\"http://schemas.microsoft.com/office/onenote/2013/onenote\" ...> ... </one:Page>";
onenoteApp.UpdatePageContent(xml, DateTime.MinValue);
}
}
该字符串xml
是通过修改 XML 文档获得的,该文档是使用该GetPageContent
方法从 OneNote 中检索的,如我之前链接的问题中所述。这个问题的具体内容xml
无关紧要,唯一重要的是,上述程序多次运行都没有问题,并且对现有 OneNote 页面的更改总是成功执行。
现在转到 Python,我尝试在不进行实质性更改的情况下翻译我的简约程序。我的结果如下所示:
import win32com
import pytz
import datetime
onenote_app = win32com.client.Dispatch('OneNote.Application.15')
xml = "<one:Page xmlns:one=\"http://schemas.microsoft.com/office/onenote/2013/onenote\" ...> ... </one:Page>"
date = pytz.utc.localize(datetime.datetime.fromordinal(1))
onenote_app.UpdatePageContent(xml, date)
我试图非常小心地为这两个变量使用相同的值。当然,这两个字符串的内容xml
是相同的(复制粘贴)。此外,根据 VS2015 调试器,两者都DateTime.MinValue
指date
同一日期。但是,当我执行 python 程序时,我收到了这个非常无益的错误。
135 def UpdatePageContent(self, bstrPageChangesXmlIn=defaultNamedNotOptArg, dateExpectedLastModified=(1899, 12, 30, 0, 0, 0, 5, 364, 0), xsSchema=2, force=False):
136 return self._oleobj_.InvokeTypes(1610743816, LCID, 1, (24, 0), ((8, 1), (7, 49), (3, 49), (11, 49)),bstrPageChangesXmlIn
--> 137 , dateExpectedLastModified, xsSchema, force)
138
139 _prop_map_get_ = {
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147213296), None)
据我了解,C# 和 Python 实际上都使用同一个库来执行它们的调用(都称为Microsoft OneNote 15.0 Object Library
)。因此,原则上这两个程序都应该可以正常工作。如果我在这一点上没有记错的话,我会假设 Python在调用库时做了一些不同的事情。我如何进一步追踪这里的实际问题是什么?有没有办法使用 Visual Studio 2015 的内置 Python 支持来更好地理解 C# 和 Python 代码之间的区别?