gpt4 book ai didi

c# - 如何使用 C# 和 OneNote Interop 写入 OneNote 2013 页面

转载 作者:太空狗 更新时间:2023-10-29 17:40:12 25 4
gpt4 key购买 nike

我看过很多关于此的文章,但所有文章要么不完整,要么没有回答我的问题。使用 C# 和 OneNote Interop,我想简单地将文本写入现有的 OneNote 2013 页面。目前我有一个 OneNote 笔记本,其中有一个名为 "Sample_Section"的 Section 和一个名为 "MyPage" 的 Page。

我需要能够使用 C# 代码将文本写入此页面,但我不知道如何或找不到任何资源来这样做。我查看了网络上的所有代码示例,但没有人回答这个简单的问题或能够做到这一点。此外,许多代码示例已过时,并且在尝试运行它们时会中断。

我使用了显示如何更改部分名称的 Microsoft 代码示例,但我找不到任何代码来将文本写入 Page。我可以看到没有简单的方法可以做到这一点。我花了很多时间来研究这个并在线查看不同的例子,但没有人能提供帮助。

我也已经在 OneNote Interop 上查看了 MSDN 文章。我模糊地理解 OneNote Interop 如何通过 XML 工作,但任何额外的帮助理解也将不胜感激。最重要的是,我非常感谢演示如何将文本写入 OneNote 2013 Notebook Page 的代码示例。

我尝试使用这个 Stack Overflow 答案: Creating new One Note 2010 page from C#

但是,这个解决方案有两点没有回答我的问题:

1) 标记的解决方案显示了如何创建新页面,而不是如何向其写入文本或如何使用任何信息填充页面。

2) 当我尝试运行标记为解决方案的代码时,在以下行出现错误:

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

原因是“节点”的值为空,任何帮助将不胜感激。

最佳答案

我在 MSDN 论坛上问过同样的问题,得到了这个很好的答案。下面是一个很好、干净的示例,说明如何使用 C# 和 OneNote 互操作写入 OneNote。我希望这可以帮助将来的人们。

    static Application onenoteApp = new Application();
static XNamespace ns = null;

static void Main(string[] args)
{
GetNamespace();
string notebookId = GetObjectId(null, OneNote.HierarchyScope.hsNotebooks, "MyNotebook");
string sectionId = GetObjectId(notebookId, OneNote.HierarchyScope.hsSections, "Sample_Section");
string firstPageId = GetObjectId(sectionId, OneNote.HierarchyScope.hsPages, "MyPage");
GetPageContent(firstPageId);
Console.Read();
}
static void GetNamespace()
{
string xml;

onenoteApp.GetHierarchy(null, OneNote.HierarchyScope.hsNotebooks, out xml);
var doc = XDocument.Parse(xml);
ns = doc.Root.Name.Namespace;
}

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

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

switch (scope)
{
case (OneNote.HierarchyScope.hsNotebooks): nodeName = "Notebook"; break;
case (OneNote.HierarchyScope.hsPages): nodeName = "Page"; break;
case (OneNote.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 GetPageContent(string pageId)
{
string xml;
onenoteApp.GetPageContent(pageId, out xml, OneNote.PageInfo.piAll);
var doc = XDocument.Parse(xml);
var outLine = doc.Descendants(ns + "Outline").First();
var content = outLine.Descendants(ns + "T").First();
string contentVal = content.Value;
content.Value = "modified";
onenoteApp.UpdatePageContent(doc.ToString());
return null;
}

关于c# - 如何使用 C# 和 OneNote Interop 写入 OneNote 2013 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27294510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com