PowerShell & OneNote: Seiten (Vorlagen) kopieren

Neulich erhielt ich von einem Leser eine sehr interessante Anfrage zum Thema ‘Seite aus Vorlage erstellen’.
Da ich bisher noch keinen Weg gefunden habe, eine “OneNote Seitenvorlage” als neue Seite einzufügen, verwende ich folgenden Workaround:
Zuerst lege ich einen neuen Abschnitt “Vorlagen” an, um dort eine Seite als Vorlage mit dem gewünschten Inhalt zu erstellen. Der Inhalt dieser Seite lässt sich dann in die neu erstellte Seite kopieren.

Vorlagen-Abschnitt
# div. Vorbereitungen
$NotebookName = 'MeinNotizbuch'
$TemplateSectionName = 'Vorlagen'
$TemplatePageTitle = 'Vorlage Tagesplaner'

$TargetSectionName = 'MeineNotizen'
$TargetPageTitle = 'Seite aus Vorlage erstellt'

# OneNote Struktur einlesen und Vorlage suchen
[void][reflection.assembly]::LoadWithPartialName("Microsoft.Office.Interop.Onenote")
$OneNote = New-Object Microsoft.Office.Interop.Onenote.ApplicationClass

[Xml]$ONXml = $Null
$Onenote.GetHierarchy($Null, [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages, [ref]$ONXml)

$MyNotebook = $ONXml.Notebooks.Notebook | where name -eq $NoteBookName
$MyTemplateSection = $MyNotebook.Section | where name -eq $TemplateSectionName
$MyTemplatePage = $MyTemplateSection.Page | where name -eq $TemplatePageTitle

[ref]$TemplatePageXML = ''
$OneNote.GetPageContent($MyTemplatePage.ID,[ref]$TemplatePageXML,[Microsoft.Office.Interop.OneNote.PageInfo]::piAll)
$null = [Reflection.Assembly]::LoadWithPartialName('System.Xml.Linq')

# neue Seite erstellen
$MyTargetSection = $MyNotebook.Section | where name -eq $TargetSectionName
[ref]$newpageID = ''
$OneNote.CreateNewPage($MyTargetSection.ID,[ref]$newpageID,[Microsoft.Office.Interop.OneNote.NewPageStyle]::npsBlankPageWithTitle)

# Inhalt der Vorlage auslesen und kopieren
[String]$NewContent = $TemplatePageXML.Value
$NewContent = $NewContent.Replace($MyTemplatePage.ID, $newpageID.Value)

$null = [Reflection.Assembly]::LoadWithPartialName('System.Xml.Linq')
$NewDoc = [System.Xml.Linq.XDocument]::Parse($NewContent)
$Nodes = $NewDoc.Descendants()

# da jedes Objekt eine eigene ID hat, muss diese vor dem einfügen entfernt werden
foreach ($Node in $Nodes) {
  if ($Node.Attribute("objectID") -ne $null) {
    $Node.Attributes("objectID").Remove()
  }
}

# neuen Notiztitel setzen
[string]$NewContent = $NewDoc.ToString()
$NewContent = $NewContent.Replace($TemplatePageTitle,$TargetPageTitle)

# neu erstellte Seite updaten
$onenote.UpdatePageContent($NewContent)
Notizen Abschnitt mit der kopierten Seite
Print Friendly, PDF & Email