PowerShellでWord文書を開くには
PowerShellでWordの文書を「読み取り専用」で開く方法を教えてください。
高校で情報処理検定試験用の教材を作っています。ワープロ検定の中に「速度」の試験があります。見本の文書をみて、10分間に何文字入力できるかを計ります。その演習で生徒が作成したWordのファイルを見本ファイルと比較して、一致した文字数と文字列を調べたいと思っています。文書の比較は「diff(Compare-Object)」を使います。diffの基本的なルゴリズムを参考にしてWordのマクロでは一致した文字数だけを調べることはできました。一致した文字列(誤字・脱字も)を求める方法をいろいろ調べていました。「diff」そのものが使えるといいのに気づきました。たまたま他のことで「PowerShell」の勉強を始めていたので、スクリプトでも可能ではないかと試行錯誤しています。800個ぐらいのファイルを処理したいので、ファイル毎に人手がかからないようにしたいと考えています。
まず、次のようなスクリプトを作りました。
$word = New-Object -ComObject word.application
$word.visible = $true
$doc = $word.Documents.Open($full_name ) #(1)
#(2) $doc = $word.Documents.Open($full_name ,True,True) #(2)
#(3) $doc = $word.Documents.Open FileName:=$full_name,
ConfirmConversions:=True,ReadOnly:=True
#(1) の場合、該当ファイルを開く際にポップメニューが開き、3つのボタンから「読み取り専用」を選ぶことができます。この確認を不要にしたいのですが、その方法が分かりません。
#(2)の場合、以下のようなエラーが出ます。
<<
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:42
+ $doc = $word.Documents.Open($full_name ,True,True) #(2)
+ ~
',' の後に式が存在しません。
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:42
+ $doc = $word.Documents.Open($full_name ,True,True) #(2)
+ ~~~~
式またはステートメントのトークン 'True' を使用できません。
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:46
+ $doc = $word.Documents.Open($full_name ,True,True) #(2)
+ ~
パラメーター一覧に引数が存在しません。
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:30 文字:1
+ {
+ ~
ステートメント ブロックまたは型定義に終わりの '}' が存在しません。
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:33 文字:51
+ $doc = $word.Documents.Open($full_name ,True,True) #(2)
+ ~
式またはステートメントのトークン ')' を使用できません。
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:49 文字:1
+ }
+ ~
式またはステートメントのトークン '}' を使用できません。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterToken
>>
#(3)の場合、以下のようなエラーが出ます。
<<
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:34 文字:29
+ $doc = $word.Documents.Open FileName:=$full_name, ConfirmConversions: ...
+ ~~~~~~~~~~~~~~~~~~~~
式またはステートメントのトークン 'FileName:=$full_name' を使用できません。
発生場所 D:\1情報マクロ\CountWordCharacters.ps1:34 文字:49
+ $doc = $word.Documents.Open FileName:=$full_name, ConfirmConversions: ...
+ ~
パラメーター一覧に引数が存在しません。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
>>
スクリプトを作る際、以下の資料を参考にしました。
(1)参考サイト Office | Dev Center
・・・>Word VBA リファレンス >オブジェクト モデル > Documents コレクション オブジェクト
Documents.Open Method (Word)
Office 2013 and later
(2)参考書籍
「WindowsPowerShell ポケットリファレンス」改訂版 2015年7月1日初版
著者 牟田口 大介、出版社 技術評論社
(3)「うごかして学ぶWindowsPowwerShell」柏原 元基 kindle版
(4)「WindowsPowerShell超入門」【4.0対応】新丈 径 kindle版
PowerShellの勉強は始めて1週間ぐらい、Wordのマクロの勉強は6月からなのでほとんど知識がありませんので、よろしくお願いします。
お礼
有難う御座います。 ご紹介のURLをいろいろ開いて見ました。 試行前ですが、有効な手段ではないかと存じます。 今現在は、少しも時間がもったいなくて、こういうやり方があるだろうと、その勉強をするために、破損したものは違うドライブに保存し、全体が長い作業ですから、10年前の3.5フロッピーから拾い出して、作業に取り掛かっております。 有難う御座います。お礼申しあげます
補足
先ほど、九時ごろ お礼のコメント お昼ですが、これから試行に入ります。有難う御座いました