📖
Python で Microsoft Word の脚注テキスト情報を抽出する
前回 の記事の内容を応用して、開いている Microsoft Word 文書から脚注のテキスト情報を一括で抜き出してみます。
コード
標準出力でテキスト情報をやり取りするとエスケープ文字や空白の処理、文字コードの処理などが煩雑になるのでファイルに書き出す方式を採用しました。 Python で辞書型のリストとして書き出すと JSON に近くなるので取り回しに便利です。
コマンドライン引数の処理には pip で入手できる fire がとても便利です。
import win32com.client
import fire
def main(out_path):
wdApp = win32com.client.Dispatch("Word.Application")
if wdApp.Documents.Count < 1:
if not wdApp.Visible:
wdApp.Quit()
return
doc = wdApp.ActiveDocument
note_list = []
for nt in doc.FootNotes:
note_list.append({"Id": nt.Index, "Note": nt.Range.Text})
with open(out_path, mode = "w", encoding = "utf-8") as output_file:
output_file.write(str(note_list))
if __name__ == "__main__":
fire.Fire(main)
呼び出し側の PowerShell コマンドレット
普段は PowerShell がメインなので呼び出し用のコマンドレットも書いています。
こういうときに一時ファイルを作ってくれる New-TemporaryFile
が便利です。
function Get-NotationTextOnActiveWordDocumentWithPython {
if ((Get-Process | Where-Object ProcessName -EQ "winword").Count -lt 1) {
return
}
$tmp = New-TemporaryFile
$pyCodePath = "(ファイルへのパスを指定)"
'python -B "{0}" "{1}"' -f $pyCodePath, $tmp.FullName | Invoke-Expression
$result = Get-Content -Path $tmp.FullName -Encoding utf8NoBOM
Remove-Item -Path $tmp.FullName
return $($result | ConvertFrom-Json)
}
脚注を章末注に変換するような仕事で使えるかもしれません。
Discussion