はじまり
Microsoft Word で原稿をやり取りするときに多用される「変更履歴の記録」ですが、上図のような書式変更の履歴で右欄が埋もれてしまうという事態がよくあると思います。実際のところ加筆・削除の記録以外は必要性が皆無なので、こうした書式変更関連の履歴だけを一括承諾してスッキリさせようと思います。
事前準備
今回は対象の Word 文書を開いた状態でコンソールからコマンドレット実行して一括処理します。
下記記事で紹介したコマンドレットを $profile
に書き込んでおくかドットソースで読み込んでおくなどして Get-ActiveDocument
で powershell から現在開いている文書を操作できるようにしておきます。
powershell で Office を捕まえてターミナルとして操作する
コード
VBA とは異なり、各種組み込み定数の値を指定してやる必要があります。
(参考: Word VBA 組み込み定数の値一覧)
function Approve-StyleRevisionOnActiveDocument {
<#
.SYNOPSIS
現在アクティブなWord文書中の書式関連の変更履歴を一括で承認する
#>
$doc = Get-ActiveDocument
if (-not $doc) {
return
}
$wdRevisionProperty = 3
$wdRevisionParagraphProperty = 10
$wdRevisionSectionProperty = 12
$wdRevisionStyleDefinition = 13
$n = 0
$revisions = $doc.Revisions
foreach ($rev in $revisions) {
if ($rev.Type -in @($wdRevisionProperty, $wdRevisionParagraphProperty, $wdRevisionSectionProperty, $wdRevisionStyleDefinition)) {
Write-Host $rev.FormatDescription -NoNewline -ForegroundColor White -BackgroundColor Green
Write-Host " by " -NoNewline -ForegroundColor DarkGray
Write-Host $rev.Author -ForegroundColor Cyan -NoNewline
Write-Host " on:" -ForegroundColor DarkGray
Write-Host ("{0}" -f $rev.Range.Text)
$rev.Accept()
$n++
}
}
if ($n -gt 0) {
Write-Host ("{0} style revisions are Accepted!" -f $n) -ForegroundColor Green
}
}
コンソール上での結果表示のために行数が増えていますが、 変更の承諾だけであれば .Accept()
のみで十分なのでコード自体はもっと簡素化できます。
実行イメージ
対象の Word 文書を開いた状態でコンソール上からコマンドレットを実行します。
実行後に Ctrl+Z で元に戻すことができます。