Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

20230521




今日も期待通りにはならなかった。


OneNote + PowerShell

impsbl.hatenablog.jp

この話題をまとめて今日の話題にするはずだったのに、再び機会を逸してしまった。そして、ましても怠慢、加えて些細なところで時間を浪費するのだった。

詰まった点の一つは、PowerShellでの関数定義と呼び出し方だった。ノートの構造を取得し列記する。構造に応じたインデントを挿入するところで、それが期待通りにならず悩んでいた。不具合の原因は関数の呼び出し方だった。
一般的なプログラム的な記述で呼び出しており、PowerShell流の書き方を全く失念してしまっていたものだから、何が悪いのか全く分からなかった。

function printAll($hierarchy){
  foreach ($notebook in $hierarchy.Notebooks.Notebook){
    printName $notebook 0 $False

    foreach ($sectiongroup in $notebook.SectionGroup){
      printName $sectiongroup 1 $False
    }

    foreach ($section in $notebook.Section){
      printName $section 1 $False

      foreach ($page in $section.Page){
        #printName $page 2 $True
        printName $page 2 $False
      }
    }
  }  
}

function printName($items, [int]$indent_level, [bool]$printID){
  $indent = "`t" * $indent_level
  
  if ($printID){
      foreach($item in $items){
        Write-Host ($indent + $item.name + "`t" + $item.ID)
      }
  }
  else{
    foreach($item in $items){
        Write-Host ($indent + $item.name)
      }
  }
}

$OneNote = New-Object -ComObject OneNote.Application

#Add-Type -path "C:\Program Files\PowerToys\modules\launcher\Interop.Microsoft.Office.Interop.OneNote.dll"
#Add-Type -AssemblyName Microsoft.Office.Interop.OneNote 
Add-Type -assembly Microsoft.Office.Interop.OneNote 

[xml]$Hierarchy = ""
$OneNote.GetHierarchy(
  $Hierarchy.Notebooks.Notebook.ID,
  [Microsoft.Office.InterOp.OneNote.HierarchyScope]::hsPages,
  [ref]$Hierarchy,
  [Microsoft.Office.InterOp.OneNote.XMLSchema]::xsCurrent)

printAll($Hierarchy)

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($OneNote) | Out-Null

ここにたどり着くために、また一日を費やした。ここからやっとスタートラインを一歩踏み出したところ。

learn.microsoft.com