Чтобы собрать выходные данные сценария ведения журнала, я хотел бы использовать 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-документа, полученного из OneNote с помощью метода GetPageContent
, как подробно описано в моем связанном предыдущем вопросе. Точное содержание 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 делает что-то другое при обращении к библиотеке. Как я могу проследить, в чем здесь настоящая проблема? Может быть, есть способ использовать встроенную поддержку Python в Visual Studio 2015, чтобы лучше понять разницу между кодом C# и Python?