【发布时间】:2016-01-20 15:30:19
【问题描述】:
为了从日志记录脚本收集输出,我想使用onepy 将信息添加到 OneNote 2013 笔记本。不幸的是,onepy 提供的方法update_page_content() 对我不起作用。为了更深入地理解这个问题,我切换到了 C#,那里有许多 OneNote API 的在线示例,在一些 trouble 之后,我设法让以下简约的 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 文档获得的,该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 代码之间的区别?
【问题讨论】:
标签: c# python debugging onenote onenote-api