Создание новой страницы One Note 2010 из C # - PullRequest
4 голосов
/ 18 ноября 2011

Я относительный любитель 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 ]

9 голосов
/ 18 ноября 2011

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

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

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

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

Во-вторых, библиотека типов OneNote 14.0 несовместима с функцией Visual Studio 2010 «NOPIA» (в которую не встроены основные сборки взаимодействия).в приложении по умолчанию).Поэтому убедитесь, что для свойства Встроенные типы взаимодействия установлено значение False для ссылки на сборку взаимодействия 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;
        }
    }
}
0 голосов
/ 29 марта 2016

Если 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")
...