0

我想弄清楚如何在 OneNote 2010 中添加笔记本。我找不到任何代码示例来显示如何使用 UpdateHiarchy API 添加新笔记本。我正在尝试从 VB6 应用程序中执行此操作。我是从 VB 使用 xml 的新手。代码如下:

Private Function GetFirstOneNoteNotebookNodes(oneNote As OneNote14.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, xs2010

    ' Use the MSXML Library to parse the XML.
    Dim doc As MSXML2.DOMDocument
    Set doc = New MSXML2.DOMDocument

    Dim elem As MSXML2.IXMLDOMElement

    If doc.loadXML(notebookXml) Then
        ' Here is search for a notebook that i know is not there.     mvarpAssignment.pClient.Name    is a program variable that contains a text name.
        Set GetFirstOneNoteNotebookNodes = doc.documentElement.selectNodes("//one:Notebook[@name='" & mvarpAssignment.pClient.Name & "']")
' I test the length for zero to see if anything was returned:         
If GetFirstOneNoteNotebookNodes.Length = 0 Then
' I want to create a notebook, so i beleive i need to add an element to the xml returned from the GetHiearchy API:           
Set elem = doc.createElement("ROC")
           doc.documentElement.appendChild elem
'I print out the xml and i can see the element added at the end of the xml document.            
            Debug.Print doc.XML

' 下一步是调用 UpdateHiarchy API,但我不知道我将哪个对象传递给 API。我尝试的一切都失败了。我显然对此理解不够,但我找不到任何代码示例或任何描述如何添加笔记本的文本。任何帮助或任何信息链接将不胜感激!

4

2 回答 2

0

我终于让这个工作了。我有两件事错了,需要在更新层次结构之前定义路径。这需要使用 GetSpecialLocation API。此外,属性名称是区分大小写的,我有骆驼大小写而不是小写。我对发布的原始代码进行了一些其他更改,但对我的应用程序来说更多。有兴趣的人可以修改代码:

Private Function GetClientOneNoteNotebookNode(oneNote As OneNote14.Application,     ClientName As String) As MSXML2.IXMLDOMNodeList
Dim notebookXml As String
Dim doc As MSXML2.DOMDocument
Dim elem As MSXML2.IXMLDOMElement
Dim newNotebookPath As String
Dim defaultNotebookFolder 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, xs2010
' Use the MSXML Library to parse the XML.
Set doc = New MSXML2.DOMDocument
If doc.loadXML(notebookXml) Then
Set GetClientOneNoteNotebookNode = doc.documentElement.selectNodes("//one:Notebook[@name='" & ClientName & "']")
If GetClientOneNoteNotebookNode.Length = 0 Then
'Get the default location for the notebooks
oneNote.GetSpecialLocation slDefaultNotebookFolder, defaultNotebookFolder
newNotebookPath = defaultNotebookFolder + "\\" + ClientName
'Create new notebook for cleint
Set elem = doc.createElement("one:Notebook")
elem.setAttribute "name", ClientName
elem.setAttribute "path", newNotebookPath
' add new elelement to the document tree
doc.documentElement.appendChild elem
oneNote.UpdateHierarchy doc.XML
End If
Else
Set GetClientOneNoteNotebookNode = Nothing
End If
End Function
于 2012-03-23T14:49:12.320 回答
0

This works for me, simple.

Public Sub OneNoteMoM()
    Dim OneNote As New Microsoft.Office.Interop.OneNote.Application

    Dim Path As String = "E:\ISO\VB Test folder\OneNoteTest"
    Dim NoteBookID As String = "TestON2"
    Dim FullID As String = ""

    Dim Dir 'As New IO.DirectoryInfo("")
    Dim File 'As New IO.FileInfo("")

    Dim objFSO
    Dim parentFolder As String = ""

    objFSO = CreateObject("Scripting.FileSystemObject")

    FullID = Path & "\\" & NoteBookID
    Dir = New System.IO.DirectoryInfo(FullID)
    ' Check if folder exists & Create folder
    If Not objFSO.FolderExists(FullID) Then
        objFSO.CreateFolder(FullID)
    End If

    FullID = Path & "\\" & NoteBookID
    OneNote.OpenHierarchy(FullID, "", "", Microsoft.Office.Interop.OneNote.CreateFileType.cftNone)

    FullID = Path & "\\" & NoteBookID & "\\" & "Open Notebook"
    File = New IO.FileInfo(FullID & ".onetoc2")
    If Not File.Exists Then
        OneNote.OpenHierarchy(FullID, "", "", Microsoft.Office.Interop.OneNote.CreateFileType.cftNotebook)
    End If

    FullID = Path & "\\" & NoteBookID & "\\" & "Actionlists.one"
    File = New IO.FileInfo(FullID)
    If Not File.Exists Then
        OneNote.OpenHierarchy(FullID, "", "", Microsoft.Office.Interop.OneNote.CreateFileType.cftSection)
    End If

    FullID = Path & "\\" & NoteBookID & "\\" & "MeetingReports.one"
    File = New IO.FileInfo(FullID)
    If Not File.Exists Then
        OneNote.OpenHierarchy(FullID, "", "", Microsoft.Office.Interop.OneNote.CreateFileType.cftSection)
    End If

End Sub
于 2018-09-21T05:49:39.707 回答