Excel, Wordの自動操作のハードル削減計画・その5

~ Word文書の印刷イメージをpdfにする ~

2020年6月2日

[はじめに]

 今回は Wordにおいて印刷イメージを整えることにチャレンジします。

 JuseOffice05.zipにサンプルが入っています。

 印刷イメージは pdfとして書き出します。

 文書全体の書き出しのほか、ページ単位、指定ページの出力も行います。

 用紙サイズの調整、ページ番号の付加、段組数の調整にもふれます。

 印刷用の環境がない場合を考えて、
pdfの出力に絞ることにしました。


[目次へ]

1. Wordの文書をpdfとして書き出す

 まずは単純なpdfファイルの書き出しについて述べます。

 取り上げる文章は太宰 治(ダザイ オサム)の
「竹青」(ちくせい)の最初の部分です。

 むかしの中国の話。30歳になる貧しい書生の魚容くんが、
奥さんに邪険にされ、科挙(官僚登用試験)にも落ちて悲嘆に暮れる。

 そこにカラスでもあり美形の女性でもある竹青が現れて……

 青空文庫に登録されているものを部分的に使わせていただきました。

(1) ExportAsFixedFormatの利用

 Wordの文書をpdfとして書き出すには ExportAsFixedFormat を使います。

 たとえば次のようなスクリプト。

Include "const_wd.vbs"
pdfFile = "C:\work\test.pdf"
[ドキュメントを開く] "test.docx"
[ドキュメント].ExportAsFixedFormat pdfFile, wdExportFormatPDF
[ワードを終了]

 ExportAsFixedFormat の第1引数は出力ファイル(pdf)の名前、
第2引数は保存形式です。

 保存形式には pdfの他に xpsがあります。

定数名 数値 説明
wdExportFormatPDF 17 PDF形式で保存
wdExportFormatXPS 18 XPS形式で保存

 「竹青.txt」を読み込んで pdfとして書き出す pdf01.wsfの主要部分を掲げます。

Include "const_wd.vbs"
pdfFile = FullPath("竹青.pdf")
textFile = FullPath("竹青.txt")
[ドキュメントを開く] "test.docx"
Selection.InsertFile textFile
[ドキュメント].ExportAsFixedFormat pdfFile, wdExportFormatPDF
[ワードを終了]

 FullPath() はファイル名の絶対パスを返す関数で
JuseOfficeの中で定義しています。

 pdfファイルの名前をパス名なしで与えると、
ドキュメントフォルダに書き出されてしまいます。


(2) 1ページずつpdfファイルに書き出す

 1ページずつpdfファイルとして書き出してみます。

 「竹青.txt」を取り込むと3ページの文書になりますが、
「竹青page1.pdf」 ~ 「竹青page3.pdf」を出力します。

 スクリプトでの主な処理を列挙すると次のとおり。

 まずは pdf02.wsf の主要部分を掲げます。

 pdfのほか、参考まで「竹青.docx」も出力するようにしています。

Include "const_wd.vbs"
wordFile = "竹青.docx"
textFile = FullPath("竹青.txt")
[ドキュメントを開く] wordFile
Selection.InsertFile textFile
totalPage = Selection.Information(wdNumberOfPagesInDocument)
For pageNum = 1 To totalPage
    Selection.GoTo wdGoToPage, wdGoToAbsolute, pageNum  ' ページ先頭へ
    [ドキュメント].Bookmarks("\Page").Select  ' ページ全体を選択
    pdfFile = FullPath("竹青page" & pageNum & ".pdf")
    [ドキュメント].ExportAsFixedFormat pdfFile, wdExportFormatPDF, , , _
        wdExportSelection
Next
[ドキュメント].Range(0, 0).Select  ' 文書先頭へカーソル移動
[ドキュメントを保存]
[ワードを終了]

a. ExportAsFixedFormatの5番目の引:Range指定

 文書全体ではなく一部分を書き出したいときは 5番目の引数を指定します。

 指定できる定数は次のとおり。

定数名 数値 説明
wdExportAllDocument 0 文書全体(デフォルト)
wdExportSelection 1 現在の選択箇所
wdExportCurrentPage 2 現在のページ
wdExportFromTo 3 テキストの範囲。始点と終点を別途指定。

 今回は wdExportCurrentPage(現在のページ)を使う方が少し簡単になりますが、
応用範囲が広いので wdExportSelection(現在の選択箇所)にしました。

b. Informationプロパティ

 Selection.Information(……) によって
文書に関するいろいろな情報を得ることができます。

 Selectionはカーソル位置または選択範囲をあらわしますが、
幅のある選択範囲の場合は、その末尾位置に着目するものが多いようです。

 いっぱいあるので、参考まで一部だけ掲げておきます。

定数名 数値 説明
wdNumberOfPagesInDocument 4 総ページ数
wdActiveEndPageNumber 3 現在の物理的なページ番号
wdActiveEndAdjustedPageNumber 1 現在の形式的なページ番号
wdActiveEndSectionNumber 2 現在のセクション番号
wdFirstCharacterLineNumber 10 先頭文字の行番号

 ページ番号として「物理的」と「形式的」の表現を使いましたが、
たとえば物理的な1ページ目が表紙なのでページ番号を割り当てていない場合、
物理的な2ページ目が形式的には1ページ目となります。

 物理的ページ番号と形式的ページ番号が違ってきます。

c. GoToメソッド

 Selection.GoTo はカーソルを移動させるメソッドです。

 Selection.GoTo 1, 1, 2 とすれば、カーソルが2ページ目の先頭に移動します。

 総ページ数が3なのに 4 とか 5 を指定すると、
最終ページ(3ページ)の先頭に移動します。

d. Bookmarksプロパティ

 Bookmarks には定義済みのものがあり、
[ドキュメント].Bookmarks("\Page").Select とすれば
カーソルのあるページを1ページ分 選択することになります。

 引数として "\Para", "\Table", "\Section" などを指定できます。

 GoToでページ先頭にカーソルを移動してから Bookmarksを適用すると
目的のページ(1ページ分)を選択できます。


(3) 連続する指定ページをpdfとして書き出す

 2~3ページをpdfに書き出す場合、範囲の先頭と末尾を適切に得られれば
ExportAsFixedFormat の使い方は pdf02.wsf と同じです。

 各ページ(1ページ分)を選択した後で
Selection.Start, Selection.End によってその先頭・末尾を得られます。

 2~3ページの範囲を得るには、2ページの先頭と 3ページの末尾を取得すればいいことになります。

 GoTo, Bookmarks を使えば容易に行えそうです。

 ただし、Endプロパティが少々くせものです。

 たとえば 2ページのEndは、実は 3ページのStartと同じ値です。

 そうしたルールなので End-1 を用いる必要が出てきます。

 でも、これには例外があり、最終ページのEndは(次ページがないため)
End-1 ではなく End を使います。

 こうした統一性に欠ける仕様は扱いにくいですが、
スクリプトを書く側が対応せざるを得ません。

 2~3ページを書き出す pdf03.wsf は下のとおり。

Include "const_wd.vbs"
wordFile = "竹青.docx"
pdfFile = FullPath("竹青page2-3.pdf")
textFile = FullPath("竹青.txt")
[ドキュメントを開く] wordFile
With [ドキュメント]
    Selection.InsertFile textFile
    lastPos = .Content.End - 1  ' 文書の末尾位置
    Selection.GoTo wdGoToPage, wdGoToAbsolute, 2  ' 2ページの先頭に移動
    startPos = Selection.Start  ' 範囲の先頭
    Selection.GoTo wdGoToPage, wdGoToAbsolute, 3  ' 3ページの先頭に移動
    .Bookmarks("\Page").Select  ' 3ページ全体を選択
    endPos = Selection.End  ' 範囲の末尾
    If endPos < lastPos Then  ' 文書末尾よりも手前(次ページあり)
        endPos = endPos - 1
    End If
    .Range(startPos, endPos).Select  ' 出力範囲を選択
    .ExportAsFixedFormat pdfFile, wdExportFormatPDF, , , _
        wdExportSelection
    .Range(0, 0).Select  ' 文書先頭へカーソル移動
End With
[ドキュメントを保存]
[ワードを終了]

[目次へ]

2. Wordにおける印刷イメージの調整

 JuseOfficeでは Wordに関して次のサブルーチンが定義されています。

 それらについて以下で解説します。

 そのほか、「標準」 「表題」などのスタイルの適用にも触れます。

(1) [用紙サイズ]

 [ドキュメント] が指し示す文書の用紙サイズを調整します。

 用紙サイズは "A4" などの文字列で指定します。

 指定できるのは次のものです。

 A3, B3, A4, B4, A5, B5, A6, B6, ハガキ, レター, リーガル

 [用紙サイズ] "B5" のように記述。

 文書を複数開いていて、それぞれについて用紙サイズを指定したいときは
[用紙サイズon] を使って対象の文書を指定します。

 文書のオブジェクトが変数 Doc1, Doc2 にセットされている場合は下のとおり。

[用紙サイズon] Doc1, "A4"
[用紙サイズon] Doc2, "B4"

 なお、"A4L" のように L を付けると
縦長ではなく横長になります。

 横長のことを landscape というようなのでその頭文字です。


(2) [文字数と行数]

 [文字数と行数] は、引数として文字数と行数を数値で指定します。

 [文字数と行数] 40, 36 のように書きます。

 1行あたり40文字、1ページあたり36行の指定です。

 指定した値が可能な範囲から逸脱していると
指定どおりにはならないので注意してください。

 [文字数と行数] Null, 36 とすれば、行数の指定だけになります。

 文字数は標準の文字数となる。

 [文字数と行数] 40, Null だと文字数だけの指定です。

 Null の代わりに 0 (ゼロ)を書いてもかまいません。

 on をつけて [文字数と行数on] Doc1, 40, 36 のようにすれば
指定の文書について文字数と行数を設定できます。


(3) [ページ番号]

 [ページ番号] True とすればページ番号が付きます。

 番号は、フッターに中央そろえの形で 1/4 のように付きます。

 「該当のページ番号/総ページ数」の形式です。

 [ページ番号] False とすればフッターのページ番号が消去されます。

 これも on を付けて [ページ番号on] Doc1, True のように使えます。


(4) [段組数]

 通常は段組数 1 ですが、2段組にしたいとき
[段組数] 2 のように書きます。

 [段組数on] Doc1, 2 とすれば指定の文書 Doc1 についての設定になります。

 段組が 2以上の場合、段組の間隔は均等、段組の間の境界線あり
という形で設定されます。


(5) スタイルの適用

 1行目(正確には第1パラグラフ)を表題にするため文字を本文より大きくしたいという場合、1行目のフォントを直接いじるのではなく、1行目のスタイルを「表題」にします。

 「表題」のスタイルは、あらかじめWordに用意されています。

 通常、本文は明朝体・10.5ポイントですが、表題はゴシック体・16ポイントです。

 1行目を「表題」にするための記述は下のとおり。

[ドキュメント].Paragraphs(1).Style = "表題"

 スタイルを特に指定していなければ「標準」や「書式なし」だとおもいます。

 とりあえず全部の段落を「標準」にするには下のように書きます。

[ドキュメント].Paragraphs.Style = "標準"

 こうしておいた上で、1行目を「表題」、2行目を「副題」などに調整。

 なお、環境によっては規定のフォントの作用などによって
スタイルとは異なるフォントで表示されることもあります。

 その場合、下のような記述でスタイルに従った表示にできるようです。

For Each para In [ドキュメント].Paragraphs
     para.Style = para.Style
Next

 なんか無意味な感じの記述ではありますが…… 別のやり方もあるのかも。


(6) サンプルスクリプト

 pdf04.wsf は用紙サイズをA4横長、2段組、ページ番号付加の処理をした上で
全段落を「標準」にしてから、1~3行目をそれぞれ表題、副題、署名にします。

 そして、文書全体をpdfとして書き出します。

 以下、スクリプトです。

Include "const_wd.vbs"
wordFile = "竹青.docx"
pdfFile = FullPath("竹青.pdf")
textFile = FullPath("竹青.txt")
[ドキュメントを開く] wordFile
Selection.InsertFile textFile
[用紙サイズ] "A4L"
[段組数] 2
[ページ番号] True
With [ドキュメント]
    .Paragraphs.Style = "標準"  ' とりあえず全段落を標準に
    .Paragraphs(1).Style = "表題"
    .Paragraphs(2).Style = "副題"
    .Paragraphs(3).Style = "署名"
    .ExportAsFixedFormat pdfFile, wdExportFormatPDF
    .Range(0, 0).Select  ' 文書先頭へカーソル移動
End With
[ドキュメントを保存]
[ワードを終了]

[目次へ]

3. 補足

 補足として [用紙サイズon] などがセクションを対象にできること、
自分独自のスタイルをつくって適用する方法、
スタイルを wdStyleNormal などの定数でも指定できることを解説します。

(1) セクションに対する指定

 用紙サイズ、文字数と行数、ページ番号、段組数は
文書全体に対して指定できる他に、セクションを対象にすることもできます。

Set sect = [ドキュメント].Sections(1)  ' 文書中の第1セクション
Set sect = Selection.Sections(1)  ' カーソルがあるセクション

 上のようにするとセクションオブジェクトを得ることができます。

 このセクションオブジェクトを第1引数にできます。


(2) 独自スタイルをつくって適用する

 本文を明朝体・10.5ポイントではなく
ゴシック体・12ポイントに変更したいとします。

 標準スタイルのフォントを変更してしまうのも一つのやり方ですが、
独自のスタイルをつくってそれを適用してみます。

Set myStyle = [ドキュメント].Styles.Add("私の標準", 1)

 上のようにすると「私の標準」というスタイルが新たに追加されます。

 数字 1 はスタイルのタイプをあらわすもので、
1:段落、2:文字、3:表などがあります。

 「標準」スタイルのタイプは 1 なのでそれに倣うことにします。

 スタイルには、太線にするかどうか、下線をつけるかどうかなど
たくさんの属性があります。

 それらを設定するのは面倒なので、とりあえず「標準」と同じにします。

 その上でフォントの名前と大きさだけ変更。

 スクリプトとして書くと次のとおり。

myStyle.BaseStyle = "標準"  ' 標準スタイルを基盤にする
myStyle.Font.Name = "MS ゴシック"
myStyle.Font.Size = 12.0
[ドキュメント].Paragraphs.Style = myStyle.NameLocal

 myStyle.NameLocal"私の標準" と同じです。

 ここには掲げませんが、zipに pdf05.wsf を入れてあるので参考にしてください。

 pdf04.wsf を書き換えて「私の標準」スタイルを適用しています。


(3) スタイルと定数

 [ドキュメント].Paragraphs(1).Style = "標準" という記述は
 [ドキュメント].Paragraphs(1).Style = wdStyleNormal と書くことができます。

 wdStyleNormalは数値 -1 です。

 以下に関連の定数名一覧を掲げておきます。140個以上あります。

定数名 数値 スタイル名
wdStyleNormal -1 標準
wdStyleEnvelopeAddress -37 宛先
wdStyleEnvelopeReturn -38 差出人住所
wdStyleBodyText -67 本文
wdStyleHeading1 -2 見出し 1
wdStyleHeading2 -3 見出し 2
wdStyleHeading3 -4 見出し 3
wdStyleHeading4 -5 見出し 4
wdStyleHeading5 -6 見出し 5
wdStyleHeading6 -7 見出し 6
wdStyleHeading7 -8 見出し 7
wdStyleHeading8 -9 見出し 8
wdStyleHeading9 -10 見出し 9
wdStyleIndex1 -11 索引 1
wdStyleIndex2 -12 索引 2
wdStyleIndex3 -13 索引 3
wdStyleIndex4 -14 索引 4
wdStyleIndex5 -15 索引 5
wdStyleIndex6 -16 索引 6
wdStyleIndex7 -17 索引 7
wdStyleIndex8 -18 索引 8
wdStyleIndex9 -19 索引 9
wdStyleTOC1 -20 目次 1
wdStyleTOC2 -21 目次 2
wdStyleTOC3 -22 目次 3
wdStyleTOC4 -23 目次 4
wdStyleTOC5 -24 目次 5
wdStyleTOC6 -25 目次 6
wdStyleTOC7 -26 目次 7
wdStyleTOC8 -27 目次 8
wdStyleTOC9 -28 目次 9
wdStyleNormalIndent -29 標準インデント
wdStyleFootnoteText -30 脚注文字列
wdStyleCommentText -31 コメント文字列
wdStyleHeader -32 ヘッダー
wdStyleFooter -33 フッター
wdStyleIndexHeading -34 索引見出し
wdStyleCaption -35 図表番号
wdStyleTableOfFigures -36 図表目次
wdStyleFootnoteReference -39 脚注参照
wdStyleCommentReference -40 コメント参照
wdStyleLineNumber -41 行番号
wdStylePageNumber -42 ページ番号
wdStyleEndnoteReference -43 文末脚注参照
wdStyleEndnoteText -44 文末脚注文字列
wdStyleTableOfAuthorities -45 引用文献一覧
wdStyleMacroText -46 マクロ文字列
wdStyleTOAHeading -47 引用文献一覧見出し
wdStyleList -48 一覧
wdStyleListBullet -49 箇条書き
wdStyleListNumber -50 段落番号
wdStyleList2 -51 一覧 2
wdStyleList3 -52 一覧 3
wdStyleList4 -53 一覧 4
wdStyleList5 -54 一覧 5
wdStyleListBullet2 -55 箇条書き 2
wdStyleListBullet3 -56 箇条書き 3
wdStyleListBullet4 -57 箇条書き 4
wdStyleListBullet5 -58 箇条書き 5
wdStyleListNumber2 -59 段落番号 2
wdStyleListNumber3 -60 段落番号 3
wdStyleListNumber4 -61 段落番号 4
wdStyleListNumber5 -62 段落番号 5
wdStyleTitle -63 表題
wdStyleClosing -64 結語
wdStyleSignature -65 署名
wdStyleDefaultParagraphFont -66 段落フォント
wdStyleBodyTextIndent -68 本文インデント
wdStyleListContinue -69 箇条書き継続行
wdStyleListContinue2 -70 箇条書き継続行 2
wdStyleListContinue3 -71 箇条書き継続行 3
wdStyleListContinue4 -72 箇条書き継続行 4
wdStyleListContinue5 -73 箇条書き継続行 5
wdStyleMessageHeader -74 メッセージ見出し
wdStyleSubtitle -75 副題
wdStyleSalutation -76 挨拶文
wdStyleDate -77 日付
wdStyleBodyTextFirstIndent -78 本文字下げ
wdStyleBodyTextFirstIndent2 -79 本文字下げ 2
wdStyleNoteHeading -80
wdStyleBodyText2 -81 本文 2
wdStyleBodyText3 -82 本文 3
wdStyleBodyTextIndent2 -83 本文インデント 2
wdStyleBodyTextIndent3 -84 本文インデント 3
wdStyleBlockQuotation -85 ブロック
wdStyleHyperlink -86 ハイパーリンク
wdStyleHyperlinkFollowed -87 表示したハイパーリンク
wdStyleStrong -88 強調太字
wdStyleEmphasis -89 強調斜体
wdStyleNavPane -90 見出しマップ
wdStylePlainText -91 書式なし
wdStyleHtmlNormal -95 標準 (Web)
wdStyleHtmlAcronym -96 HTML 略語
wdStyleHtmlAddress -97 HTML アドレス
wdStyleHtmlCite -98 HTML 引用文
wdStyleHtmlCode -99 HTML コード
wdStyleHtmlDfn -100 HTML 定義
wdStyleHtmlKbd -101 HTML キーボード
wdStyleHtmlPre -102 HTML 書式付き
wdStyleHtmlSamp -103 HTML サンプル
wdStyleHtmlTt -104 HTML タイプライター
wdStyleHtmlVar -105 HTML 変数
wdStyleNormalTable -106 標準の表
wdStyleNormalObject -158 行間詰め
wdStyleTableLightShading -159 表 (モノトーン) 1
wdStyleTableLightList -160 表 (モノトーン) 2
wdStyleTableLightGrid -161 表 (モノトーン) 3
wdStyleTableMediumShading1 -162 表 (モノトーン) 4
wdStyleTableMediumShading2 -163 表 (モノトーン) 5
wdStyleTableMediumList1 -164 表 (モノトーン) 6
wdStyleTableMediumList2 -165 表 (モノトーン) 7
wdStyleTableMediumGrid1 -166 表 (モノトーン) 8
wdStyleTableMediumGrid2 -167 表 (モノトーン) 9
wdStyleTableMediumGrid3 -168 表 (モノトーン) 10
wdStyleTableDarkList -169 表 (モノトーン) 11
wdStyleTableColorfulShading -170 表 (モノトーン) 12
wdStyleTableColorfulList -171 表 (モノトーン) 13
wdStyleTableColorfulGrid -172 表 (モノトーン) 14
wdStyleTableLightShadingAccent1 -173 表 (青) 1
wdStyleTableLightListAccent1 -174 表 (青) 2
wdStyleTableLightGridAccent1 -175 表 (青) 3
wdStyleTableMediumShading1Accent1 -176 表 (青) 4
wdStyleTableMediumShading2Accent1 -177 表 (青) 5
wdStyleTableMediumList1Accent1 -178 表 (青) 6
wdStyleListParagraph -180 リスト段落
wdStyleQuote -181 引用文
wdStyleIntenseQuote -182 引用文 2
wdStyleSubtleEmphasis -261 斜体
wdStyleIntenseEmphasis -262 強調斜体 2
wdStyleSubtleReference -263 参照
wdStyleIntenseReference -264 参照 2
wdStyleBookTitle -265 書名
wdStyleBibliography -266 文献目録
wdStyleTocHeading -267 目次の見出し
wdStyleGalleryPath 15 グリッド (表) 1 淡色 - アクセント 2
wdStyleSheetLinkTypeImported 1 1 / 1.1 / 1.1.1
wdStyleSheetPrecedenceHigher -1 標準
wdStyleSheetPrecedenceLower -2 見出し 1
wdStyleSheetPrecedenceHighest 1 1 / 1.1 / 1.1.1
wdStyleSortRecommended 1 1 / 1.1 / 1.1.1
wdStyleSortByFont 2 1 / a / i
wdStyleSortByBasedOn 3 HTML アドレス
wdStyleSortByType 4 HTML キーボード

~ 以上 ~

Copyright (C) T. Yoshiizumi, 2020 All rights reserved.