17.インデザインスクリプト 初級講座(13)テーブル操作
管理者用インデザインのテーブル操作をまとめてみました。
ちょっと、入れすぎた感じはしますが、インデザインで、スクリプトの実行結果を見ながら進めると機能が理解出来ると思います。
・表の作り方
・テキストフレームに、タブコードとCRコードを含んだ文字列を作りこのコードで表に変換
・文字を指定して表に変換(ここでは、カンマととセミコロンて区切り文字としての例です)
・表のサイズの変更
・表の分割・結合
・表のセルの指定のしかた。
・セルに文字を入力
スクリプトは、途中に MsgBoxのメッセージ表示させて止めています。
この時に、インデザインの実行結果を見やすくしておいた方が良いでしょう。
エクセル、VBA等のウインドウ表示位置をずらしておくと見やすいです。
フォームをスタートします。
ボタンのクリックイベントに、ページの最後に記述している スクリプト全体を記入してください。コピーでも問題ありません。
ボタンのクリックで、スクリプトがスターとします。
表の作成
テキストフレームを作り、そこに 2×2の表を作ります。
MsgBox "テキストフレームにテーブル2×2作成"
Rem テキストフレームサイズを設定
Set myTextFrame = myDocument.TextFrames.Add
Rem テキストフレームサイズを変更
haichi_1_YS = 100
haichi_1_XS = 20
haichi_1_YE = 200
haichi_1_XE = 180
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
tableDT = "テーブル操作" & vbCr
myTextFrame.Contents = tableDT 'テキストフレームにデータを書き込む
Set myTable = myTextFrame.InsertionPoints.Item(-1).Tables.Add
myTable.ColumnCount = 2
myTable.BodyRowCount = 2
表のサイズを設定します。
MsgBox "テーブルサイズ"
myWidth = "100mm"
myHeight = "10mm"
myTable.Columns.Item(1).Width = myWidth
myTable.Rows.Item(2).Height = myHeight
表の分割
ここから表の分割を 5ステップで行っていきます。
スクリプトとインデザインの実行結果を確認して見てください。
MsgBox "テーブル分割 1"
myTable.Cells.Item(1).Split idHorizontalOrVertical.idHorizontal
MsgBox "テーブル分割 2"
myTable.Columns.Item(1).Split idHorizontalOrVertical.idVertical
MsgBox "テーブル分割 3"
myTable.Cells.Item(1).Split idHorizontalOrVertical.idVertical
MsgBox "テーブル分割 4"
myTable.Rows.Item(-1).Split idHorizontalOrVertical.idHorizontal
MsgBox "テーブル分割 5"
myTable.Cells.Item(-1).Split idHorizontalOrVertical.idVertical
表の分割 5 までの結果
表の結合
表の結合は 1~5 のステップで実行します。
MsgBox "テーブル結合 1"
myTable.Cells.Item(4).Merge myTable.Columns.Item(4).Cells.Item(-1)
MsgBox "テーブル結合 2"
myTable.Columns.Item(3).Cells.Item(3).Merge myTable.Columns.Item(3).Cells.Item(4)
MsgBox "テーブル結合 3"
myTable.Columns.Item(1).Cells.Item(1).Merge myTable.Columns.Item(2).Cells.Item(1)
MsgBox "テーブル結合 4"
myTable.Rows.Item(2).Cells.Item(1).Merge myTable.Rows.Item(2).Cells.Item(-1)
MsgBox "テーブル結合 5"
myTable.Rows.Item(3).Cells.Item(-2).Merge myTable.Rows.Item(3).Cells.Item(-1)
テーブルの結合5 の結果です
表の 行/列等の数を調べます。
MsgBox "Rows " & myTable.Rows.Count
MsgBox "Cells " & myTable.Cells.Count
MsgBox "Columns " & myTable.Columns.Count
セルに文字を入力
セルを指定しながら、文字を入力します。
MsgBox "セルに文字を入力 "
Rem セルに文字を入力
myTable.Rows.Item(1).Cells.Item(1).Contents = "有限会社三栄ぷりんと"
myTable.Columns.Item(3).Cells.Item(1).Contents = "品川区の印刷屋さん"
myTable.Cells.Item(4).Contents = "TEL03-3785-4402"
テーブル変換
まずは、変換対象となる文字列をテキストフレームに追加します。
タブ・CR 変換用のデータ
tableDT = vbCr & vbCr & "三栄スタッフ一覧" & vbCr
tableDT = tableDT & "役職/担当" & vbTab & "名 前" & vbTab & "年齢" & vbCr
tableDT = tableDT & "事業部長" & vbTab & "宮本 武蔵" & vbTab & "63" & vbCr
tableDT = tableDT & "工場長" & vbTab & "坂本 竜馬" & vbTab & "33" & vbCr
tableDT = tableDT & "品質管理課長" & vbTab & "佐々木 小次郎" & vbTab & "45" & vbCr
変換文字指定、ここでは カンマ、セミコロンを使用してます。
tableDT = tableDT & vbCr & "社外協力会社" & vbCr
tableDT = tableDT & "担当業務,会社名,窓口担当;くるみ製本,㈱橋本製本,橋本課長;シール,藤本ラベル㈱,藤本;シルク印刷,加藤印刷,加藤" & vbCr
tableDT = tableDT & "テーブルテスト終了" & vbCr
myTextFrame.InsertionPoints.Item(-1).Contents = tableDT
タブ・CR行の表変換
タブ・CRの行を選択して、表に変換します
MsgBox "テーブル作成 タブ CR,;"
Set myStartCharacter = myTextFrame.Paragraphs.Item(-8).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(-5).Characters.Item(-2)
Set myTableText = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)
Set myTable2 = myTableText.ConvertToTable
カンマ、セミコロンを指定した表への変換
カンマ、セミコロンの行を選択して、表に変換します。
MsgBox "テーブル作成 , ; "
Set myStartCharacter = myTextFrame.Paragraphs.Item(-2).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(-2).Characters.Item(-2)
Set myTableText = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)
Set myTable3 = myTableText.ConvertToTable(",", ";")
スクリプト全体
Option Explicit
Private Sub CommandButton1_Click()
Dim myInDesign, myDocument, myTextFrame, myStory, myTable, myTable2, myTable3
Dim haichi_1_YS, haichi_1_XS, haichi_1_YE, haichi_1_XE
Dim tableDT
Dim dir_mei, INDD_name
Dim myWidth, myHeight
Dim myStartCharacter, myEndCharacter, myTableText
Set myInDesign = CreateObject("InDesign.Application.CS4_J") 'インデザインを起動する
MsgBox "ドキュメントを開きます!"
dir_mei = "M:\NAVI_VBA"
INDD_name = dir_mei & "\テストサンプル.indd"
Set myDocument = myInDesign.Open(INDD_name)
MsgBox "テキストフレームにテーブル2×2作成"
Rem テキストフレームサイズを設定
Set myTextFrame = myDocument.TextFrames.Add
Rem テキストフレームサイズを変更
haichi_1_YS = 100
haichi_1_XS = 20
haichi_1_YE = 200
haichi_1_XE = 180
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
tableDT = "テーブル操作" & vbCr
myTextFrame.Contents = tableDT 'テキストフレームにデータを書き込む
Set myTable = myTextFrame.InsertionPoints.Item(-1).Tables.Add
myTable.ColumnCount = 2
myTable.BodyRowCount = 2
MsgBox "テーブルサイズ"
myWidth = "100mm"
myHeight = "10mm"
myTable.Columns.Item(1).Width = myWidth
myTable.Rows.Item(2).Height = myHeight
MsgBox "テーブル分割 1"
myTable.Cells.Item(1).Split idHorizontalOrVertical.idHorizontal
MsgBox "テーブル分割 2"
myTable.Columns.Item(1).Split idHorizontalOrVertical.idVertical
MsgBox "テーブル分割 3"
myTable.Cells.Item(1).Split idHorizontalOrVertical.idVertical
MsgBox "テーブル分割 4"
myTable.Rows.Item(-1).Split idHorizontalOrVertical.idHorizontal
MsgBox "テーブル分割 5"
myTable.Cells.Item(-1).Split idHorizontalOrVertical.idVertical
MsgBox "テーブル結合 1"
myTable.Cells.Item(4).Merge myTable.Columns.Item(4).Cells.Item(-1)
MsgBox "テーブル結合 2"
myTable.Columns.Item(3).Cells.Item(3).Merge myTable.Columns.Item(3).Cells.Item(4)
MsgBox "テーブル結合 3"
myTable.Columns.Item(1).Cells.Item(1).Merge myTable.Columns.Item(2).Cells.Item(1)
MsgBox "テーブル結合 4"
myTable.Rows.Item(2).Cells.Item(1).Merge myTable.Rows.Item(2).Cells.Item(-1)
MsgBox "テーブル結合 5"
myTable.Rows.Item(3).Cells.Item(-2).Merge myTable.Rows.Item(3).Cells.Item(-1)
MsgBox "Rows " & myTable.Rows.Count
MsgBox "Cells " & myTable.Cells.Count
MsgBox "Rows " & myTable.Rows.Count
MsgBox "セルに文字を入力 "
Rem セルに文字を入力
myTable.Rows.Item(1).Cells.Item(1).Contents = "有限会社三栄ぷりんと"
myTable.Columns.Item(3).Cells.Item(1).Contents = "品川区の印刷屋さん"
myTable.Cells.Item(4).Contents = "TEL03-3785-4402"
MsgBox "テーブル変換用のデータ "
tableDT = vbCr & vbCr & "三栄スタッフ一覧" & vbCr
tableDT = tableDT & "役職/担当" & vbTab & "名 前" & vbTab & "年齢" & vbCr
tableDT = tableDT & "事業部長" & vbTab & "宮本 武蔵" & vbTab & "63" & vbCr
tableDT = tableDT & "工場長" & vbTab & "坂本 竜馬" & vbTab & "33" & vbCr
tableDT = tableDT & "品質管理課長" & vbTab & "佐々木 小次郎" & vbTab & "45" & vbCr
tableDT = tableDT & vbCr & "社外協力会社" & vbCr
tableDT = tableDT & "担当業務,会社名,窓口担当;くるみ製本,㈱橋本製本,橋本課長;シール,藤本ラベル㈱,藤本;シルク印刷,加藤印刷,加藤" & vbCr
tableDT = tableDT & "テーブルテスト終了" & vbCr
myTextFrame.InsertionPoints.Item(-1).Contents = tableDT
MsgBox "テーブル作成 タブ CR,;"
Set myStartCharacter = myTextFrame.Paragraphs.Item(-8).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(-5).Characters.Item(-2)
Set myTableText = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)
Set myTable2 = myTableText.ConvertToTable
MsgBox "テーブル作成 , ; "
Set myStartCharacter = myTextFrame.Paragraphs.Item(-2).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(-2).Characters.Item(-2)
Set myTableText = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)
Set myTable3 = myTableText.ConvertToTable(",", ";")
End Sub