Код: Выделить всё
using Microsoft.Office.Interop.OneNote;
class Program
{
public static void ProcessOnenoteFile()
{
Application onenoteApp = new Application();
string filepath = @"C:\Users\Admin\Documents\OneNote Notebooks\My Notebook\testsection.one";
string sectionId;
onenoteApp.OpenHierarchy(filepath, null, out sectionId);
string hierarchy;
onenoteApp.GetHierarchy(sectionId, HierarchyScope.hsPages, out hierarchy);
File.WriteAllText(@"C:\hierarchy.txt", hierarchy);
}
}
Однако проблема в том, что я хочу сделать это с файлами, которые я получаю от кого-то другого и никогда раньше не открывал. Когда я запускаю тот же код в этих файлах, я не могу найти идентификаторы страниц в иерархии и, следовательно, не могу обрабатывать ни одну страницу. Решение, которое, похоже, работает, — использовать метод NavigationTo, чтобы открыть файл раздела в OneNote, прежде чем пытаться получить иерархию.
Код: Выделить всё
...
string sectionId;
onenoteApp.OpenHierarchy(filepath, null, out sectionId);
onenoteApp.NavigateTo(sectionId);
string hierarchy
...
ОБНОВЛЕНИЕ:
Я только что заметил, что использование команды «Опубликовать» также обновляет иерархию с помощью идентификаторов страниц, однако это решение по-прежнему не идеально, поскольку требует от меня создания другого файла.
Кроме того, присмотревшись к экспорту XML, я увидел, что существует атрибут под названием «areAllPagesAvailable», для которого у меня установлено значение false во всех файлах, которые мне еще предстоит открыть в OneNote.
Подробнее здесь: https://stackoverflow.com/questions/318 ... -a-onenote