OneNote
Ook hier zal er een verwijzing gemaakt moet worden naar een bibliotheek, in dit geval die van OneNote. Naast deze verwijzing zal er ook een verwijzing moeten worden gemaakt naar Microsoft XML V6 omdat OneNote met XML componenten werkt.
Van alle bronnen is OneNote wellicht het minst efficiënt als het gaat om het beheren van contactpersonen.
Zoals in de bovenstaande afbeelding is te zien bestaat de hiërarchie van OneNote uit een notitieblok, secties (tabblad Contactpersonen) en pagina's. De paginatitels worden gebruikt voor de namen van de contactpersonen. In dit artikel worden deze objecten nader toegelicht.
De onderstaande klassenmodule maakt inzichtelijk hoe de bovenstaande hiërarchie werkt.
'----------------------------------------------------------------------------------------------------------------------- ' Auteur : pascalterheege.nl ' Datum : 31-3-2017 ' Object : clsOnenote ' Doel : waarden laden, wijzigen en verwijderen uit OneNoteBestand ' Verwijzingen : Microsoft OneNote X Object library ' Microsoft XML, v6,0 ' Objecten : 1. OneNote applicatie ' 2. OneNote notitieboek ' 3. OneNote sectie ' 4. OneNote pagina ' Bronnen : https://code.msdn.microsoft.com/office/OneNote-2010-Create-New-880f8ee3 ' Opmerking : conventie pagina titel: "1. ter Heege, Pascal" '----------------------------------------------------------------------------------------------------------------------- Option Explicit Dim objOneNote As oneNote.Application 'OneNote Dim notID As String 'Notitieblok Dim secID As String 'Sectie Dim secXML As String Dim secDoc As MSXML2.DOMDocument Dim secNode As MSXML2.IXMLDOMNode Dim secNodes As MSXML2.IXMLDOMNodeList Dim pageID As String 'Pagina Dim pageXML As String Dim pageDoc As MSXML2.DOMDocument Dim pageNode As MSXML2.IXMLDOMNode Dim pageNodes As MSXML2.IXMLDOMNodeList Private Sub Class_Initialize() ' Initialisatie OneNote-objecten en sectie ID (secID) achterhalen van sectie Contacterpersonen Set objOneNote = New oneNote.Application Set secDoc = New MSXML2.DOMDocument Set pageDoc = New MSXML2.DOMDocument objOneNote.OpenHierarchy OneNoteLocatie, "", notID, cftNone objOneNote.GetHierarchy notID, hsSections, secXML If secDoc.LoadXML(secXML) Then Set secNodes = secDoc.DocumentElement.SelectNodes("//one:Section") If Not secNodes Is Nothing Then For Each secNode In secNodes If secNode.Attributes.getNamedItem("name").Text = "Contactpersonen" Then secID = secNode.Attributes.getNamedItem("ID").Text Exit For End If Next End If End If End Sub Public Sub Laden(lsb As ListBox) ' Waarden uitlezen Dim i As Integer Dim strPaginaTitel As String objOneNote.GetHierarchy secID, hsPages, pageXML If pageDoc.LoadXML(pageXML) Then Set pageNodes = pageDoc.DocumentElement.SelectNodes("//one:Page") If Not pageNodes Is Nothing Then For Each pageNode In pageNodes strPaginaTitel = pageNode.Attributes.getNamedItem("name").Text With lsb .AddItem .List(i, 0) = Nummer(strPaginaTitel) .List(i, 1) = Achternaam(strPaginaTitel) .List(i, 2) = Voornaam(strPaginaTitel) End With i = i + 1 Next End If End If End Sub Public Sub Toevoegen(strNummer As String, strVoornaam As String, strAchternaam As String, pageID As String) ' Indien pageID leeg wordt de nieuwe pagina 'naamloos' aangemaakt ' Indien pageID niet leeg wordt de pagina geladen met de betreffende pageID ' De titel van de pagina wordt gewijzigd Dim titelNode As MSXML2.IXMLDOMNode Dim dataNode As MSXML2.IXMLDOMNode Dim outXML As String If pageID = "" Then objOneNote.CreateNewPage secID, pageID, npsDefault objOneNote.GetPageContent pageID, outXML, piAll, xs2013 Set pageDoc = New MSXML2.DOMDocument If pageDoc.LoadXML(outXML) Then pageDoc.setProperty "SelectionLanguage", "XPath" pageDoc.setProperty "SelectionNamespaces", "xmlns:one='http://schemas.microsoft.com/office/onenote/2013/onenote'" Set pageNode = pageDoc.SelectSingleNode("//one:Page") Set titelNode = pageDoc.SelectSingleNode("//one:Page/one:Title/one:OE/one:T") Set dataNode = titelNode.SelectSingleNode("text()") dataNode.Text = strNummer & ". " & strAchternaam & ", " & strVoornaam objOneNote.UpdatePageContent (pageDoc.XML) End If End Sub Public Sub Wijzig(strNummer As String, strVoornaam As String, strAchternaam As String) ' Aan de hand van nummer pagina titel wijzigen via procedure toevoegen Dim i As Integer Dim strPaginaTitel As String objOneNote.GetHierarchy secID, hsPages, pageXML If pageDoc.LoadXML(pageXML) Then Set pageNodes = pageDoc.DocumentElement.SelectNodes("//one:Page") If Not pageNodes Is Nothing Then For Each pageNode In pageNodes strPaginaTitel = pageNode.Attributes.getNamedItem("name").Text pageID = pageNode.Attributes.getNamedItem("ID").Text If Nummer(strPaginaTitel) = strNummer Then Toevoegen strNummer, strVoornaam, strAchternaam, pageID End If i = i + 1 Next End If End If End Sub Public Sub Verwijder(strNummer As String, blnAlles As Boolean) ' Alle pagina's verwijderen of aan de hand van nummer Dim i As Integer Dim strPaginaTitel As String objOneNote.GetHierarchy secID, hsPages, pageXML If pageDoc.LoadXML(pageXML) Then Set pageNodes = pageDoc.DocumentElement.SelectNodes("//one:Page") If Not pageNodes Is Nothing Then For Each pageNode In pageNodes strPaginaTitel = pageNode.Attributes.getNamedItem("name").Text pageID = pageNode.Attributes.getNamedItem("ID").Text If blnAlles = True Then objOneNote.DeleteHierarchy pageID Else If Nummer(strPaginaTitel) = strNummer Then objOneNote.DeleteHierarchy pageID End If End If i = i + 1 Next End If End If End Sub Private Function Nummer(strPagina As String) ' Functie voor Nummer achterhalen: "1. ter Heege, Pascal" If Mid(strPagina, 2, 1) = "." Then Nummer = Left(strPagina, 1) Else Nummer = Left(strPagina, 2) End If End Function Private Function Voornaam(strPagina As String) ' Functie voor Voornaam achterhalen: "1. ter Heege, Pascal" Dim arrNaam() As String arrNaam = Split(strPagina, ",") Voornaam = arrNaam(0) Voornaam = Trim(Replace(Voornaam, Nummer(strPagina) & ".", "")) End Function Private Function Achternaam(strPagina As String) ' Functie voor Achternaam achterhalen: "1. ter Heege, Pascal" Dim arrNaam() As String arrNaam = Split(strPagina, ",") Achternaam = Trim(arrNaam(1)) End Function Private Sub Class_Terminate() ' Deinitialisatie Onenote-objecten ' objOneNote.CloseNotebook notID, False (levert problemen op) Set pageDoc = Nothing Set pageNode = Nothing Set pageNodes = Nothing Set secDoc = Nothing Set secNode = Nothing Set secNodes = Nothing Set objOneNote = Nothing End Sub