2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellでWordをいじる方法の備忘録

Last updated at Posted at 2024-05-06

この記事について

以前、PowerShellでExcelをいじる方法を書き留めましたが、今回Wordから情報を抜いてくる方法を調べる際に、同様にWordもPowerShellで操作できないか、試してみました。

本当は別の方法も模索したいんですが、諸事情により必ず入っているPowerShellと(ほぼ必ず入っている)Wordを使う方法を取っています…

例のごとく、寝かせていたら、数か月そのままになってしまっていたので、現時点で公開することにしました。適宜追記したいと思います。

備忘録

Wordファイルを開く

ファイルを開く
$word = New-Object -ComObject Word.Application
$word.Visible = $true #画面に表示させたい時
$FileName = "sample.docx"
$FullPath = (Get-Childitem -Path $FileName).FullName
$doc = $word.Documents.Open($FullPath)
ファイルを新規作成
$word = New-Object -ComObject Word.Application
$word.Visible = $true #画面に表示させたい時
$doc = $word.Documents.Add()

ページ設定

PageSetup
#ページの向き
$doc.PageSetup.Orientation = 1 #既定は0で縦向き、1で横向き

# 余白
## 標準
$doc.PageSetup.TopMargin = 99.25
$doc.PageSetup.BottomMargin = 85.05
$doc.PageSetup.LeftMargin = 85.05
$doc.PageSetup.RightMargin = 85.05

## やや狭い
$doc.PageSetup.TopMargin = 72
$doc.PageSetup.BottomMargin = 72
$doc.PageSetup.LeftMargin = 54
$doc.PageSetup.RightMargin = 54

入力関係

テキスト入力
$doc.Paragraphs(1).Range.Text = "第1段落のテキスト"#パラグラフのテキストを設定
$doc.Paragraphs(1).Range.InsertAfter("`r`n")#段落最後に改段落を挿入(パラグラフの追加)(WordでのEnter)
$doc.Paragraphs(1).Range.InsertBefore("`t")#段落頭にタブを挿入
$doc.Paragraphs(1).Range.InsertAfter("`v")#段落最後に改行を挿入(WordでのShift+Enter)

フォント周り

フォント等
下線・アンダーライン
$doc.Paragraphs(10).Range.Underline = 1
#1 下線、2 空白以外下線、3 二重線、4 点線、6 太い下線、7 破線、9 一点鎖線、10二点鎖線、11波線

$fontSerif = "BIZ UDP明朝 Medium" #変数にフォント名を入れる。
#Range.Font.Nameで設定
$doc.Paragraphs(10).Range.Font.Name = "$fontSerif"
フォントの色
# Colorで設定する方法
$doc.Paragraphs(1).Range.Text.Font.Color = 16776960 #wdTurquoise
$doc.Paragraphs(1).Range.Text.Font.Color = -16777216 #wdColorAutomatic(通常は黒)
# ColorIndexで設定する方法
$doc.Paragraphs(1).Range.Text.Font.ColorIndex = 3 #wdTurquoise
$doc.Paragraphs(1).Range.Text.Font.ColorIndex = 0 #wdAuto(通常は黒)

  • Colorでの指定は、WdColorにある10進数で行う。
    • RGB値で指定する場合は、「R + G * 256 + B * 256 * 256」で計算した値を用いることもできる模様。

  • ColorIndexでの指定は、WdColorIndexにある値で指定する。

表の挿入など
# 10行目に、3×3の表を挿入する
$newTable = $doc.Tables.Add($doc.Paragraphs(10).Range(), 3, 3)

# 表のスタイルの変更
$newTable.Style = "表 (格子)"

# 表全体のフォントの変更
$newTable.Range().Font.Name = "BIZ UDPゴシック"
$newTable.Range().Font.Size = 9
# 表のセルのフォントの変更
$newTable.Cell(1,1).Range.Font.name = "BIZ UDPゴシック"

# セルへのテキスト入力
$newTable.Cell(1,1).Range().Text = "1列1行目"

# セルのテキスト末尾に改段落を追加
$newTable.Cell(1,1).Range().InsertParagraphAfter()

# セルのテキスト末尾にテキストを追加
$newTable.Cell(1,1).Range().InsertAfter("追加のテキスト")

# セルの結合
$newTable.Cell(1,1).Merge($newTable.Cell(1,3)) #結合の開始セルと終了セルを指定する

# 表の位置
## 基準
$newTable.Rows.RelativeVerticalPosition = 0 #0がページ余白、1がページ、2が段落(文字列と一緒に移動する)

# セルのテキストの向き
$newTable.Cell(1,1).Range.Orientation = 0 #0で横書き、1で縦書き

# セルの文字の揃え
## 縦
## 0上揃え:wdCellAlignVerticalTop
## 1中央揃え:wdCellAlignVerticalCenter
## 3下揃え:wdCellAlignVerticalBottom
$newTable.Cell(1,1).Range.Cells.VerticalAlignment = 0

## 横
## 0左揃え: wdAlignParagraphLeft
## 1中央揃え: wdAlignParagraphCenter
## 2右揃え:wdAlignParagraphRight
## 3両端揃え: wdAlignParagraphJustify
## 4均等割り付け: wdAlignParagraphDistribute
$newTable.Cell(1,1).Range.ParagraphFormat.Alignment = 3


保存用ダイアログ

ファイルダイアログを開く
# Bing AIに聞きつつ調べました
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$dialog = New-Object System.Windows.Forms.SaveFileDialog
$dialog.Filter = "Wordファイル (*.docx)|*.docx" #ファイル形式の指定
$dialog.InitialDirectory = (Get-Location).Path #初期ディレクトリの指定(現在のディレクトリ)
$dialog.FileName = "既定のファイル名.docx"
if($dialog.ShowDialog() -eq "OK"){
    $dialog.FileName
}

参考

Bing AIに聞きつつ調べて、微修正しました。
Bing AIが参照したのは以下のページです。

終了する

ファイルを閉じて、終了する
$doc.Close()
$word.Quit()
オブジェクトのリリース
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($range) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($table) | Out-Null

# 解放する変数
Remove-Variable doc,word, range, table

# ガベージコレクション
[gc]::collect()
[gc]::WaitForPendingFinalizers()

参考

notes

  • 2024-05-06 公開
2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?