Создание новой страницы One Note 2010 из C#

Я относительный любитель C#, и у меня возникают проблемы с ускорением при работе с Office Interop (поправьте меня, если я ошибаюсь):

Я хочу иметь консольное приложение, которое создает новую страницу в One Note 2010. Новая страница всегда будет переходить в тот же раздел, который уже существует. Заголовок страницы будет строкой в ​​буфере обмена Windows. Я знаю, как сделать часть буфера обмена (программа также создает папку по указанному пути и называет ее, используя строку в буфере обмена), но у меня возникают проблемы с началом работы с частью One Note.

Я пытался понять эти статьи (у второй есть примеры только на VB, так что я также должен разобраться с этим):

http://msdn.microsoft.com/en-us/library/gg649853.aspx

http://code.msdn.microsoft.com/windowsdesktop/OneNote-2010-Create-New-880f8ee3

Но я все еще в основном потерян. Мне не нужно находить названия каких-либо разделов или чего-либо еще, я знаю, что мои новые страницы всегда будут попадать в блокнот под названием "Задачи" в разделе "Примечания", по крайней мере, в первой версии / пока я еще учусь.

Я ищу хорошее, сфокусированное объяснение того, как создать новую страницу One Note из C#. Статьи MSDN предполагают всевозможные предварительные знания, которых у меня нет, и я предпочел бы начать работу и учиться на практике, чем тратить месяц на чтение. Как только основная программа заработает, я потрачу много времени на ее настройку, что должно стать отличным способом обучения.

2 ответа

Подробную статью можно найти по этой ссылке в журнале MSDN.

Я использовал пример кода там, чтобы создать быстрый фрагмент для вас, чтобы создать новую страницу в данном разделе в данной записной книжке.

Если вы используете Visual Studio 2010, в статье перечислены несколько "ошибок":

Во-первых, из-за несоответствия сборки взаимодействия OneNote, поставляемой с Visual Studio 2010, не следует напрямую ссылаться на
Компонент Microsoft.Office.Interop.OneNote на вкладке.NET диалогового окна "Добавить ссылку", но вместо этого ссылается на компонент "Библиотека типов Microsoft OneNote 14.0" на вкладке "COM". Это по-прежнему приводит к добавлению сборки взаимодействия OneNote к ссылкам вашего проекта.

Во-вторых, библиотека типов OneNote 14.0 несовместима с функцией "NOPIA" Visual Studio 2010 (в которой первичные сборки взаимодействия по умолчанию не встроены в приложение). Поэтому для свойства сборки взаимодействия OneNote обязательно установите для свойства "Внедрить типы взаимодействий" значение "Ложь".

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Microsoft.Office.Interop.OneNote;

namespace OneNote
{
    class Program
    {
        static Application onenoteApp = new Application();
        static XNamespace ns = null;

        static void Main(string[] args)
        {
            GetNamespace();
            string notebookId = GetObjectId(null, HierarchyScope.hsNotebooks, "Tasks");
            string sectionId = GetObjectId(notebookId, HierarchyScope.hsSections, "Notes");
            string pageId = CreatePage(sectionId, "Test");          
        }

        static void GetNamespace()
        {
            string xml;
            onenoteApp.GetHierarchy(null, HierarchyScope.hsNotebooks, out xml);

            var doc = XDocument.Parse(xml);
            ns = doc.Root.Name.Namespace;
        }

        static string GetObjectId(string parentId, HierarchyScope scope, string objectName)
        {
            string xml;
            onenoteApp.GetHierarchy(parentId, scope, out xml);

            var doc = XDocument.Parse(xml);
            var nodeName = "";

            switch (scope)
            {
                case (HierarchyScope.hsNotebooks): nodeName = "Notebook"; break;
                case (HierarchyScope.hsPages): nodeName = "Page"; break;
                case (HierarchyScope.hsSections): nodeName = "Section"; break;
                default:
                    return null;
            }

            var node = doc.Descendants(ns + nodeName).Where(n => n.Attribute("name").Value == objectName).FirstOrDefault();

            return node.Attribute("ID").Value;
        }

        static string CreatePage(string sectionId, string pageName)
        {
            // Create the new page
            string pageId;
            onenoteApp.CreateNewPage(sectionId, out pageId, NewPageStyle.npsBlankPageWithTitle);

            // Get the title and set it to our page name
            string xml;
            onenoteApp.GetPageContent(pageId, out xml, PageInfo.piAll);
            var doc = XDocument.Parse(xml);
            var title = doc.Descendants(ns + "T").First();
            title.Value = pageName;

            // Update the page
            onenoteApp.UpdatePageContent(doc.ToString());

            return pageId;
        }
    }
}

Если MS Interop не подходит, попробуйте поискать на Aspose.Note. Создать новую страницу довольно легко:

var doc = new Document();
var page = new Page(doc);
page.Title = new Title(doc)
{
    TitleText = new RichText(doc)
                    {
                        Text = "Title text.",
                        DefaultStyle = TextStyle.DefaultMsOneNoteTitleTextStyle
                    },
    TitleDate = new RichText(doc)
                    {
                        Text = new DateTime(2011, 11, 11).ToString("D", CultureInfo.InvariantCulture),
                        DefaultStyle = TextStyle.DefaultMsOneNoteTitleDateStyle
                    },
    TitleTime = new RichText(doc)
                    {
                        Text = "12:34",
                        DefaultStyle = TextStyle.DefaultMsOneNoteTitleTimeStyle
                    }
};
page.AppendChild(outline);
doc.AppendChild(page);
doc.Save("output.one")
Другие вопросы по тегам