用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.aspxhttp://code.msdn.microsoft.com/windowsdesktop/onenote - 2010 -新建- - 880 f8ee3
但我基本上还是迷路了。我不需要找到任何部分的名称或任何东西,我知道我的新页面总是会被记录在一个名为任务的笔记本中,在一个名为笔记的部分,至少在第一个版本中/当我还在学习的时候。
我正在寻找如何从c#创建一个新的One Note页面的好,集中的解释。MSDN的文章假定了我没有的各种先验知识,我宁愿从实践中开始学习,而不是花一个月的时间阅读。一旦基本程序工作了,我会花很多时间来调整它,这应该是一个很好的学习方式。
有关详细文章,请查看此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;
}
}
}