Альтернативный способ отправки электронной почты из Outlook в OneNote
Я искал интернет, чтобы найти ответ, но не смог найти ответ. Вот моя проблема:
В моей организации есть ограничение на размер в почтовом ящике Outlook 2013. Таким образом, мы должны были найти возможные решения для сохранения этих электронных писем всеобъемлющим образом, который прост в управлении и легко найти способ.
Я слышал, что мы могли бы автоматически отправлять наши электронные письма непосредственно в OneNote 2013. Я использовал кнопку "Отправить в OneNote" в Outlook, однако мне было интересно, есть ли у кого-нибудь лучшее решение, которое может автоматически создать раздел с именем электронной почты имя отправителя, если оно не существует, и скопируйте письмо на новую страницу.
Единственный код VBA, который я нашел в своих поисках, - это создание страницы OneNote или поиск, однако мои очень ограниченные знания XML не позволяют мне идти дальше.
Может кто-то указать мне верное направление?
Вот часть кода, который я нашел:
Option Explicit
Sub CreateNewPage () "Подключиться к OneNote 2010." Чтобы увидеть результаты кода, "вы должны убедиться, что интерфейс пользователя OneNote 2010 видим.
Dim OneNote As OneNote.Application
Set OneNote = New OneNote.Application
' Get all of the Notebook nodes.
Dim nodes As MSXML2.IXMLDOMNodeList
Set nodes = GetFirstOneNoteNotebookNodes(OneNote)
If Not nodes Is Nothing Then
' Get the first OneNote Notebook in the XML document.
Dim node As MSXML2.IXMLDOMNode
Set node = nodes(2)
Dim noteBookName As String
noteBookName = node.Attributes.getNamedItem("name").Text
' Get the ID for the Notebook so the code can retrieve
' the list of sections.
Dim notebookID As String
notebookID = node.Attributes.getNamedItem("ID").Text
' Load the XML for the Sections for the Notebook requested.
Dim sectionsXml As String
OneNote.GetHierarchy notebookID, hsSections, sectionsXml, xs2013
' Dim a As MSXML2.DOMDocument60
Dim secDoc As MSXML2.DOMDocument60
Set secDoc = New MSXML2.DOMDocument60
If secDoc.LoadXML(sectionsXml) Then
' select the Section nodes
Dim secNodes As MSXML2.IXMLDOMNodeList
Debug.Print secDoc.DocumentElement.XML
Dim soapNS
soapNS = "xmlns:one='http://schemas.microsoft.com/office/onenote/2013/onenote'"
secDoc.SetProperty "SelectionNamespaces", soapNS
Set secNodes = secDoc.DocumentElement.SelectNodes("//one:Section")
If Not secNodes Is Nothing Then
' Get the first section.
Dim secNode As MSXML2.IXMLDOMNode
Set secNode = secNodes(0)
Dim sectionName As String
sectionName = secNode.Attributes.getNamedItem("name").Text
Dim sectionID As String
sectionID = secNode.Attributes.getNamedItem("ID").Text
' Create a new blank Page in the first Section
' using the default format.
Dim newPageID As String
OneNote.CreateNewPage sectionID, newPageID, npsDefault
' Get the contents of the page.
Dim outXML As String
OneNote.GetPageContent newPageID, outXML, piAll, xs2013
Dim doc As MSXML2.DOMDocument60
Set doc = New MSXML2.DOMDocument60
' Load Page's XML into a MSXML2.DOMDocument object.
If doc.LoadXML(outXML) Then
' Get Page Node.
Dim pageNode As MSXML2.IXMLDOMNode
soapNS = "xmlns:one='http://schemas.microsoft.com/office/onenote/2013/onenote'"
doc.SetProperty "SelectionNamespaces", soapNS
Set pageNode = doc.SelectSingleNode("//one:Page")
' Find the Title element.
Dim titleNode As MSXML2.IXMLDOMNode
Set titleNode = doc.SelectSingleNode("//one:Page/one:Title/one:OE/one:T")
' Get the CDataSection where OneNote store's the Title's text.
Dim cdataChild As MSXML2.IXMLDOMNode
Set cdataChild = titleNode.SelectSingleNode("text()")
' Change the title in the local XML copy.
cdataChild.Text = "A Page Created from VBA"
' Write the update to OneNote.
OneNote.UpdatePageContent doc.XML
Dim newElement As MSXML2.IXMLDOMElement
Dim newNode As MSXML2.IXMLDOMNode
' Create Outline node.
Set newElement = doc.createElement("one:Outline")
Set newNode = pageNode.appendChild(newElement)
' Create OEChildren.
Set newElement = doc.createElement("one:OEChildren")
Set newNode = newNode.appendChild(newElement)
' Create OE.
Set newElement = doc.createElement("one:OE")
Set newNode = newNode.appendChild(newElement)
' Create TE.
Set newElement = doc.createElement("one:T")
Set newNode = newNode.appendChild(newElement)
' Add the text for the Page's content.
Dim cd As MSXML2.IXMLDOMCDATASection
Set cd = doc.createCDATASection("Is this what I need to change?")
newNode.appendChild cd
' Update OneNote with the new content.
OneNote.UpdatePageContent doc.XML
' Print out information about the update.
Debug.Print "A new page was created in "
Debug.Print "Section " & sectionName & " in"
Debug.Print "Notebook " & noteBookName & "."
Debug.Print "Contents of new Page:"
Debug.Print doc.XML
End If
Else
MsgBox "OneNote 2010 Section nodes not found."
End If
Else
MsgBox "OneNote 2010 Section XML Data failed to load."
End If
Else
MsgBox "OneNote 2010 XML Data failed to load."
End If
End Sub
Private Function GetAttributeValueFromNode(node As MSXML2.IXMLDOMNode, attributeName As String) As String
If node.Attributes.getNamedItem(attributeName) Is Nothing Then
GetAttributeValueFromNode = "Not found."
Else
GetAttributeValueFromNode = node.Attributes.getNamedItem(attributeName).Text
End If
Конечная функция
Private Function GetFirstOneNoteNotebookNodes(OneNote As OneNote.Application) As MSXML2.IXMLDOMNodeList
' Get the XML that represents the OneNote notebooks available.
Dim notebookXml As String
' OneNote fills notebookXml with an XML document providing information
' about what OneNote notebooks are available.
' You want all the data and thus are providing an empty string
' for the bstrStartNodeID parameter.
OneNote.GetHierarchy "", hsNotebooks, notebookXml, xs2013
' Use the MSXML Library to parse the XML.
Dim doc As MSXML2.DOMDocument60
Set doc = New MSXML2.DOMDocument60
If doc.LoadXML(notebookXml) Then
Dim soapNS
soapNS = "xmlns:one='http://schemas.microsoft.com/office/onenote/2013/onenote'"
doc.SetProperty "SelectionNamespaces", soapNS
Set GetFirstOneNoteNotebookNodes = doc.DocumentElement.SelectNodes("//one:Notebook")
Debug.Print doc.DocumentElement.XML
Else
Set GetFirstOneNoteNotebookNodes = Nothing
End If
Конечная функция
Спасибо за вашу помощь.
1 ответ
Вы используете OneDrive для бизнеса? В этом случае эти шаблоны Microsoft Flow могут быть очень полезны: https://ms.flow.microsoft.com/en-us/services/shared_onenote/onenote-business/. В частности, один для отправки важных электронных писем в OneNote. Вы также можете создать свой собственный поток, который имеет различные триггеры, и указать имя страницы / раздела, который вы хотите создать.
Обратите внимание на кнопку "Добавить динамический контент". Это позволяет указать название и содержание раздела.
Если вы не используете O365, вы можете использовать Microsoft Graph API и OneNote REST API вместе для достижения желаемого. Нет примеров VBA, но есть много других.