用c#创建新的One Note 2010页面

本文关键字:One Note 2010页面 创建 | 更新日期: 2023-09-27 18:15:03

我是一个c#业余爱好者,我在跟上我猜是Office互操作的速度方面遇到了麻烦(如果我错了请纠正我):

我想有一个控制台应用程序,在One Note 2010中创建一个新页面。新页面将始终进入已经存在的相同部分。页面标题将是Windows剪贴板中的字符串。我知道如何做剪贴板部分(该程序还在指定路径中创建一个文件夹,并使用剪贴板中的字符串为其命名),但我在开始使用One Note部分时遇到了麻烦。

我一直在努力理解这些文章(第二篇文章只有VB的例子,所以我也必须处理这个问题):

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

http://code.msdn.microsoft.com/windowsdesktop/onenote - 2010 -新建- - 880 f8ee3

但我基本上还是迷路了。我不需要找到任何部分的名称或任何东西,我知道我的新页面总是会被记录在一个名为任务的笔记本中,在一个名为笔记的部分,至少在第一个版本中/当我还在学习的时候。

我正在寻找如何从c#创建一个新的One Note页面的好,集中的解释。MSDN的文章假定了我没有的各种先验知识,我宁愿从实践中开始学习,而不是花一个月的时间阅读。一旦基本程序工作了,我会花很多时间来调整它,这应该是一个很好的学习方式。

用c#创建新的One Note 2010页面

有关详细文章,请查看此MSDN杂志链接。

我使用这里的示例代码来创建一个快速代码片段,以便您在给定笔记本的给定部分中创建新页面。

如果你使用的是Visual Studio 2010,文章中列出了几个"陷阱":

首先,由于附带的OneNote互操作程序集不匹配在Visual Studio 2010中,你不应该直接引用
.NET选项卡上的Microsoft.Office.Interop.OneNote组件引用对话框,而不是引用Microsoft OneNote 14.0COM选项卡上的"类型库"组件。这仍然导致在项目的引用中添加OneNote互操作程序集。

第二,OneNote 14.0类型库不兼容Visual Studio 2010"NOPIA"特性(其中主要的互操作默认情况下,程序集不会嵌入到应用程序中)。因此,的嵌入互操作类型属性设置为FalseOneNote互操作程序集参考。

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;
        }
    }
}