PowerShellでWord文書を開く方法とは?

このQ&Aのポイント
  • PowerShellでWordの文書を「読み取り専用」で開く方法を教えてください。
  • 演習で生徒が作成したWordのファイルを見本ファイルと比較して、一致した文字数と文字列を調べたいと思っています。
  • 800個ぐらいのファイルを処理したいので、ファイル毎に人手がかからないようにしたいと考えています。
回答を見る
  • ベストアンサー

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月からなのでほとんど知識がありませんので、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

$book = $word.Documents.Open("c:\sample.docx",$false, $true) でうまくいくと思います。 http://stackoverflow.com/questions/19683973/is-there-a-way-to-force-powershell-to-open-a-document-as-read-only-and-close-wit

EulerKnowsNo
質問者

お礼

oboroxxさん、ありがとうございます。シェル変数$true があったのですね。ご紹介のサイトものぞいて勉強します。

関連するQ&A

  • Excelマクロで、WORDを閉じるには。

    Excel2000のマクロ内で、Word2000を起動してファイルを開き、それを別名保存した後Wordを閉じてExcelに戻る…という処理を行いたいのですが、Wordを閉じる所がうまく出来ません。 [現在のマクロ]------------------------------ Set wd = CreateObject("word.Application") wd.Visible = True wd.documents.Open Filename:= _ "C:\aaa.doc" wd.ActiveDocument.SaveAs Filename:= _ "C:\test\bbb.doc" wd.Close SaveChanges:=False -------------------------------------------- これで実行すると、開いたファイル(aaa.doc)は閉じるのですが、別名保存したファイル(bbb.doc)が閉じません。両方のファイルおよびWORDアプリケーションを閉じたければどう記述すればよいのでしょうか? どなたか教えてください。

  • 新規ワード文書が正常に開かないです

    新規ワード文書が毎回正常に開かないです。 新規でつくろうとすると毎回 「ドキュメント新規マイクロソフトワード文書docを前回開いた 時に重大なエラーが発生しました。このドキュメントを引き続き 開きますか」という言葉が出てきます。 「開きます」にすると真っ白で正常な文書になっていません。 これはどうすれば治るでしょうか。

  • 新規で作ろうとするワード文書が毎回正常に開きません。

    新規ワード文書が毎回正常に開かないです。 新規でつくろうとすると毎回 「ドキュメント新規マイクロソフトワード文書docを前回開いた 時に重大なエラーが発生しました。このドキュメントを引き続き 開きますか」という言葉が出てきます。 「開きます」にすると真っ白で正常な文書になっていません。 これはどうすれば治るでしょうか。 オフィスを再インストールしてみたのですが直りません。

  • AccessVBAからWordのマクロを実行するには

    [環境]Access2000,Word2000 AccessVBAでWordのオブジェクトをつくりファイルを開くところまでは たどり着いたのですが、開いたWordファイルにあるマクロを実行させる ことが出来ずに困っています。 WordオブジェクトのApplicationとDocumentsオブジェクトの関係も把握 しきれていないため、おかしなソースになっているかも知れません。 よろしくお願いします。 sub DoMacro() Dim oWrd as Word.Application Dim oDoc as Word.Document Set oWrd = New Word.Application With oWrd Set oDoc = oWrd.Documents.Open("c:\test.doc") .Visible = True .Application.Run ("Macro1") oDoc.SaveAs "c:\newTest.doc" .Quit End With End Sub

  • ワード文書が毎回正常に開かないです。

    新規ワード文書が毎回正常に開かないです。 オフィスを再インストールしてみたのですが直りません。 新規でつくろうとすると毎回毎回 「ドキュメント新規マイクロソフトワード文書docを前回開いた 時に重大なエラーが発生しました。このドキュメントを引き続き 開きますか」という言葉が出てきます。 毎回「開きます」にすると真っ白で正常な文書になっていません。 これはどうすれば治るでしょうか。

  • 新規ワード文書が毎回正常に開かないです。

    新規ワード文書が毎回正常に開かないです。 新規でつくろうとすると毎回毎回 「ドキュメント新規マイクロソフトワード文書docを前回開いた 時に重大なエラーが発生しました。このドキュメントを引き続き 開きますか」という言葉が出てきます。 毎回「開きます」にすると真っ白で正常な文書になっていません。 これはどうすれば治るでしょうか。 オフィスを再インストールしてみたのですが直りません。

  • excel  VBA ワード文書テンプレートに転送

    下記のコードを作成したのですがうまくいきません指導願います Sub () Dim wd As Word.Application Dim WDoc As Word.Document res = MsgBox("?", vbYesNo) If res = vbYes Then nissi = "C:\Documents and Settings\○○ \デスクトップ\文書1.doc" Else nissi = "C:\Documents and Settings\○○ \デスクトップ\文書2.doc" End If Set wd = CreateObject("Word.Application.11") wd.Visible = True Set WDoc = wd.Documents. _ Open(nissi) With WDoc.Tables(1) Set crange = Sheets("aq").Cells(1, 1) WDoc.Tables(1).Cell(1, 2).Range.Text = crange If Sheets("aq").Range("d2") = "D" Then 中略 end With wd.Quit Set wd = Nothing Set WDoc = Nothing End Sub

  • Excel VBAで呼び出したWordが文書への差し込みボタンが効かない状態で開く

    以下のExcel VBAでWordは開くのですが、新規文書への差し込みボタンが、活きていないです。参照設定は、Microsoft Word 11.0 Object Libraryを入れています。 どうしたらいいのでしょうか?困っています。 Sub Wordを開き、差し込み印刷する() Dim ワード As Object Dim ワード文書 As Object Dim フルパス As String フルパス = "D:\案内状.doc"          'フルパスを作成 Set ワード = CreateObject("Word.Application") 'Wordを起動 ワード.Visible =True 'Wordを表示 Set ワード文書 = ワード.documents.Open(フルパス) 'Word文書を開く End Sub

  • エクセルVBAでワード文書印刷(2)

    先日、こちらで、VBAを記述したエクセルのブックと同一フォルダーにおいておいたABC.DOCをプリントし、ABC.DOCを閉じる方法を教えていただき、Excel2003でためしたら、下記でうまくいきました。(その際、回答者のchie65536さん、手が滑ってポイントをつけず締め切ってしまいました、申し訳ございません。) ところが今、会社のExcel2000でやったところ、「印刷中です。Wordを終了すると印刷待ちのすべてのジョブがキャンセルされます。」と出てしまいます。 ABC.DOCをプリントしおわったら、ABC.DOCを閉じ、ワードを終了するようにしたいのです。 ためしに、wd.Quitの代わりに、wd.ActiveDocument.Close とすれば印刷はされましたが、ワードが終了しません。 wd.ActiveDocument.Close のあとに wd.Quitを入れると、「印刷中です。Wordを終了すると・・・・」が出てしまいます。 どうなおせばよいのでしょうか? Sub Word_Print() Dim wd As Object Set wd = CreateObject("Word.application") wd.Visible = True wd.documents.Open Filename:=ThisWorkbook.Path & "\ABC.doc" wd.ActiveDocument.PrintOut wd.Quit Set wd = Nothing End Sub よろしくお願いいたします。

  • ATコマンドでWord文書を開きたい

    WindowsXP Pro, Microsoft Office Professional Edition2003 です。よろしくお願いします。 指定した時間にWord文書を開きたくて、ネットで調べると コマンドプロンプトでATコマンドを実行する方法がありました。 以下のコマンドを実行したところ、 at 16:50 /interactive /every:Su "D:\dolist.doc" 「問題が発生したため、Microsoft Office Wordを終了します。 ご不便をおかけして申し訳ありません。」 というダイアログが表示され、実行できませんでした。 何が原因なのでしょうか。 通常のWordの起動、doc文書のオープンは何も問題ありません。 Excelでやってみても、同じメッセージが表示されました。 よろしくお願い致します。

専門家に質問してみよう