从C#创建新的One Note 2010页面

时间:2011-11-18 17:57:45

标签: c# onenote

我是一名亲戚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

但我基本上还是输了。我不需要找到任何部分或任何部分的名称,我知道我的新页面将始终进入名为Notes的笔记本中,至少在第一个版本/我还在学习时。 / p>

我正在寻找有关如何使用C#创建新的One Note页面的精彩,有针对性的解释。 MSDN文章假设我没有的各种先验知识,而且我宁愿得到一个快速的开始并通过实践来学习,而不是花一个月的时间阅读。一旦基本程序工作,我会花很多时间调整它,这应该是一个很好的学习方法。

2 个答案:

答案 0 :(得分:9)

有关详细文章,请查看此MSDN Magazine link

我在那里使用示例代码创建了一个快速代码段,供您在给定笔记本中的给定部分中创建新页面。

如果您使用的是Visual Studio 2010,则文章中列出了几个“陷阱”:

  

首先,由于发运的OneNote互操作程序集不匹配   使用Visual Studio 2010,您不应该直接引用
  Add的.NET选项卡上的Microsoft.Office.Interop.OneNote组件   引用对话框,但引用Microsoft OneNote 14.0   “COM”选项卡上的“类型库”组件。这仍然导致了   在项目的参考文献中添加OneNote互操作程序集。

     

其次,OneNote 14.0类型库与   Visual Studio 2010“NOPIA”功能(其中主要互操作   默认情况下,程序集未嵌入应用程序中)。因此,   确保将Embed Interop Types属性设置为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;
        }
    }
}

答案 1 :(得分:0)

如果您不想选择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")