oneNote 2013使用visual studio 2015编程c# [英] oneNote 2013 programing c# with visual studio 2015
问题描述
我正在尝试编写一个脚本,每次打开一个新的onenote 2013页面并将图像过去到该页面。
我正在使用视觉工作室2015.你能帮我解决一下我需要添加的图书馆才能让它工作。
这是我正在使用的代码:
static
应用程序onenoteApp =
new < span style ="font-size:small"> 应用程序();
静态 XNamespace ns
= null ;
静态 void Main( < span style ="color:#0000ff; font-size:small"> string []
args)
{
GetNamespace();
string notebookId = GetObjectId( null ,
HierarchyScope.hsNotebooks, "任务" );
  ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;
string sectionId = GetObjectId(notebookId,
HierarchyScope.hsSections, "注释" );
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
string pageId = CreatePage(sectionId,
" ;测试" );
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; }
静态 void GetNamespace()
{
string xml;
  ;&NBSP;&NBSP;&NBSP;&NBSP; onenoteApp.GetHierarchy(
null ,HierarchyScope.hsNotebooks,
out xml);
  ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
var doc =
XDocument 。Parse(xml);
  ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; ns = doc.Root.Name.Namespace;
}
静态 string GetObjectId( < span style ="color:#0000ff; font-size:small"> string parentId,
HierarchyScope范围, string objectName)
{
string xml;
  ;&NBSP;&NBSP;&NBSP;&NBSP; onenoteApp.GetHierarchy(parentId,scope,
out xml);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
var doc =
XDocument 。Parse(xml);
  ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
var nodeName =
"" ;
  ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
开关 (范围)
< span style ="font-size:small">
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; {
case (HierarchyScope.hsNotebooks):nodeName
= "笔记本" ;
break ;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
case (HierarchyScope.hsPages):nodeName
= "页面" ;
break ;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
case (HierarchyScope.hsSections):nodeName
= " Section" ;
break ;
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
默认 :
<跨度风格= "字体大小:小">
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
return null ;
<跨度风格=" 字体大小:小">
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; &NBSP;&NBSP; }
var node = doc.Descendants(ns + nodeName).Where(n
=> ; n.Attribute( " name" )。值
== objectName).FirstOrDefault();
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
return node.Attribute( <跨度风格=" 颜色:#a31515;字体大小:小 "> <跨度风格=" 颜色:#a31515;字体大小:小">" ID" 跨度> )。值;
&NBSP;&NBSP;&NBSP; }
静态 string CreatePage( < span style ="color:#0000ff; font-size:small"> string sectionId,
string pageName)
{
//创建新页面
<跨度风格=" 字体大小:小">
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;
string pageId;
  ;&NBSP;&NBSP;&NBSP;&NBSP; onenoteApp.CreateNewPage(sectionId,
out pageId,NewPageStyle.npsBlankPageWithTitle);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
//获取标题和集它到我们的页面名称
<跨度风格= "字体大小:小">
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;
string xml;
  ;&NBSP;&NBSP;&NBSP;&NBSP; onenoteApp.GetPageContent(pageId,
out xml,PageInfo.piAll);
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
var doc =
XDocument 。Parse(xml);
  ;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
var title = doc.Descendants(ns +
" T" )。First();
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; title.Value = pageName;
//更新页面
onenoteApp.UpdatePageContent(doc.ToString());
&NBSP;
return pageId;
  ; }
}
嗨sudelman ,
根据您的代码,您已创建新页面。
为了插入图像,我建议你尝试以下方法。
public void InsertImgById(string pageId)
{
string strNamespace =" http://schemas.microsoft.com/office/onenote/2013/onenote" ;;
string m_xmlImageContent =
"< one:Image>< one:Size width = \" {1} \"高度= \" {2} \" isSetByUser = \" true\" /><一个:数据与GT; {0}< /之一:数据与GT;< /之一:图像>英寸;
string m_xmlNewOutline =
"<?xml version = \" 1.0 \"?>< one:Page xmlns:one = \" {2} \" ; ID = \" {1} \"><一个:标题><一个:OE><一个:T>< [CDATA [{3}]]>< /一个:T>< /之一:OE>< /一个:标题> {0}< /之一:>英寸;
位图位图=新位图(@"C:\Users\your image path \ test.png");
MemoryStream stream = new MemoryStream();
bitmap.Save(stream,ImageFormat.Jpeg);
string fileString = Convert.ToBase64String(stream.ToArray());
string notebookXml;
onenoteApp.GetHierarchy(null,HierarchyScope.hsPages,out notebookXml);
var doc = XDocument.Parse(notebookXml);
// var ns = doc.Root.Name.Namespace;
var existingPageId = pageId;
var pageNodeName = doc.Descendants(ns +" Page")。其中(n => n.Attribute(" ID")。Value == existingPageId).FirstOrDefault();
string pageToBeChange = pageNodeName.Attribute(" name")。Value;
string imageXmlStr = string.Format(m_xmlImageContent,fileString,bitmap.Width,bitmap.Height);
// string pageChangesXml = string.Format(m_xmlNewOutline,new object [] {imageXmlStr,existingPageId,strNamespace,pageToBeChange});
string pageChangesXml = string.Format(m_xmlNewOutline,new object [] {imageXmlStr,existingPageId,ns,pageToBeChange});
onenoteApp.UpdatePageContent(pageChangesXml.ToString(),DateTime.MinValue);
}
//调用InsertImgById
GetNamespace();
string notebookId = GetObjectId(null,HierarchyScope.hsNotebooks,"your notebook");
string sectionId = GetObjectId(notebookId,HierarchyScope.hsSections,"your section");
string pageId = CreatePage(sectionId," Test");
InsertImgById(pageId);最好的问候,
Edward
hi, I'm trying to write a script that will open a new onenote 2013 page each time and past images to that page.
I'm using visual studio 2015. Can you please help me with the library's that I need to add in order for it to work.
this is the code i'm using:
static
Application onenoteApp = newApplication();
staticXNamespacens = null;
staticvoidMain(string[] args)
{
GetNamespace();
stringnotebookId = GetObjectId(null, HierarchyScope.hsNotebooks, "Tasks");
stringsectionId = GetObjectId(notebookId, HierarchyScope.hsSections, "Notes");
stringpageId = CreatePage(sectionId, "Test");
}
staticvoidGetNamespace()
{
stringxml;
onenoteApp.GetHierarchy(
null, HierarchyScope.hsNotebooks, outxml);
vardoc = XDocument.Parse(xml);
ns = doc.Root.Name.Namespace;
}
staticstringGetObjectId(stringparentId, HierarchyScope scope, stringobjectName)
{
stringxml;
onenoteApp.GetHierarchy(parentId, scope,
outxml);
vardoc = XDocument.Parse(xml);
varnodeName = "";
switch(scope)
{
case(HierarchyScope.hsNotebooks): nodeName = "Notebook"; break;
case(HierarchyScope.hsPages): nodeName = "Page"; break;
case(HierarchyScope.hsSections): nodeName = "Section"; break;
default:
returnnull;
}
varnode = doc.Descendants(ns + nodeName).Where(n => n.Attribute("name").Value == objectName).FirstOrDefault();
returnnode.Attribute("ID").Value;
}
staticstringCreatePage(stringsectionId, stringpageName)
{
// Create the new page
stringpageId;
onenoteApp.CreateNewPage(sectionId,
outpageId, NewPageStyle.npsBlankPageWithTitle);
// Get the title and set it to our page name
stringxml;
onenoteApp.GetPageContent(pageId,
outxml, PageInfo.piAll);
vardoc = XDocument.Parse(xml);
vartitle = doc.Descendants(ns + "T").First();
title.Value = pageName;
// Update the page
onenoteApp.UpdatePageContent(doc.ToString());
returnpageId;
}
}
Hi sudelman,
Based on your code, you have achieved creating a new page.
For inserting images, I suggest you try below methods.
public void InsertImgById(string pageId) { string strNamespace = "http://schemas.microsoft.com/office/onenote/2013/onenote"; string m_xmlImageContent = "<one:Image><one:Size width=\"{1}\" height=\"{2}\" isSetByUser=\"true\" /><one:Data>{0}</one:Data></one:Image>"; string m_xmlNewOutline = "<?xml version=\"1.0\"?><one:Page xmlns:one=\"{2}\" ID=\"{1}\"><one:Title><one:OE><one:T><![CDATA[{3}]]></one:T></one:OE></one:Title>{0}</one:Page>"; Bitmap bitmap = new Bitmap(@"C:\Users\your image path\test.png"); MemoryStream stream = new MemoryStream(); bitmap.Save(stream, ImageFormat.Jpeg); string fileString = Convert.ToBase64String(stream.ToArray()); string notebookXml; onenoteApp.GetHierarchy(null, HierarchyScope.hsPages, out notebookXml); var doc = XDocument.Parse(notebookXml); // var ns = doc.Root.Name.Namespace; var existingPageId = pageId; var pageNodeName = doc.Descendants(ns + "Page").Where(n => n.Attribute("ID").Value == existingPageId).FirstOrDefault(); string pageToBeChange = pageNodeName.Attribute("name").Value; string imageXmlStr = string.Format(m_xmlImageContent, fileString, bitmap.Width, bitmap.Height); //string pageChangesXml = string.Format(m_xmlNewOutline, new object[] { imageXmlStr, existingPageId, strNamespace, pageToBeChange }); string pageChangesXml = string.Format(m_xmlNewOutline, new object[] { imageXmlStr, existingPageId, ns, pageToBeChange }); onenoteApp.UpdatePageContent(pageChangesXml.ToString(), DateTime.MinValue); } //call InsertImgById GetNamespace(); string notebookId = GetObjectId(null, HierarchyScope.hsNotebooks, "your Notebook"); string sectionId = GetObjectId(notebookId, HierarchyScope.hsSections, "your section"); string pageId = CreatePage(sectionId, "Test"); InsertImgById(pageId);Best Regards,
Edward
这篇关于oneNote 2013使用visual studio 2015编程c#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!