OneNote:通过VBA创建新笔记本

时间:2015-05-05 21:35:15

标签: xml vba excel-vba onenote excel

我试图在VBA的OneNote中创建一个新笔记本。最终,excel中的记录将自动拉到预定义笔记本中预定义部分内的新笔记。如果笔记本和/或部分不存在,则会创建它。

我尝试使用UpdateHierarchy方法上传新笔记本的新XML架构。我不能完全放下PATH,因为我希望这个脚本能够适应任何使用它的用户(除非我可以从上下文中获取路径?)。

根据MSDN

  

如果只传递部分OneNote XML字符串... OneNote会尝试   推断出你想要的变化。例如,如果您包含一个笔记本   只包含一个部分的元素,OneNote后面添加了部分   任何现有的部分。

我认为这意味着我可以提供部分XML,OneNote将自动填充其余部分。我无法找到添加新笔记本的最小值,以下代码会生成:

  

hrNotebookDoesNotExist 0x80042015笔记本不存在。

以下是代码:

Dim oneNote As OneNote14.Application
Set oneNote = New OneNote14.Application

Dim targetNotebook As String, targetSection As String, targetPage As String
targetNotebook = "The Notes"
targetSection = "Notes"

Dim notebookXml As String

oneNote.GetHierarchy "", hsNotebooks, notebookXml, xs2010

Dim doc As MSXML2.DOMDocument
Set doc = New MSXML2.DOMDocument

If doc.LoadXML(notebookXml) Then
    Dim nodes As MSXML2.IXMLDOMNodeList, node As MSXML2.IXMLDOMNode
    Dim notebookName As String, notebookPath As String, notebookId As String

    Set nodes = doc.DocumentElement.SelectNodes("one:Notebook")

    For Each node In nodes
        notebookName = node.Attributes.getNamedItem("name").Text

        If notebookName = targetNotebook Then
            notebookPath = node.Attributes.getNamedItem("path").Text
            notebookId = node.Attributes.getNamedItem("ID").Text
        End If

    Next

If notebookId = vbNullString Then

            'create new notebook
            Dim newNotebookXml As String
            newNotebookXml = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>" _
                            & "<one:Notebooks xmlns:one=" & Chr(34) & "http://schemas.microsoft.com/office/onenote/2010/onenote" & Chr(34) & ">" _
                                & "<one:Notebook name=" & Chr(34) & "HUD Notes" & Chr(34) & ">" _
                                & "</one:Notebook>" _
                            & "</one:Notebooks>"
            Debug.Print (newNotebookXml)
            oneNote.UpdateHierarchy newNotebookXml  'This is where the error hits
End If

...

代码仍在继续,但与此问题无关。

如果找不到并且notebookId为null,我如何更改代码来创建名为targetNotebook的笔记本?

谢谢!

0 个答案:

没有答案