TOP > blog > 17.インデザインスクリプト 初級講座(13)テーブル操作
インデザインスクリプト
2016/02/11

17.インデザインスクリプト 初級講座(13)テーブル操作

管理者用
blog

インデザインのテーブル操作をまとめてみました。
ちょっと、入れすぎた感じはしますが、インデザインで、スクリプトの実行結果を見ながら進めると機能が理解出来ると思います。

・表の作り方
・テキストフレームに、タブコードとCRコードを含んだ文字列を作りこのコードで表に変換
・文字を指定して表に変換(ここでは、カンマととセミコロンて区切り文字としての例です)
・表のサイズの変更
・表の分割・結合
・表のセルの指定のしかた。
・セルに文字を入力

スクリプトは、途中に MsgBoxのメッセージ表示させて止めています。
この時に、インデザインの実行結果を見やすくしておいた方が良いでしょう。
エクセル、VBA等のウインドウ表示位置をずらしておくと見やすいです。

NAVI_VBA_13_000.JPG

 

フォームをスタートします。

ボタンのクリックイベントに、ページの最後に記述している スクリプト全体を記入してください。コピーでも問題ありません。
ボタンのクリックで、スクリプトがスターとします。

 NAVI_VBA_13_001.JPG

  

NAVI_VBA_13_002.JPG

  

NAVI_VBA_13_003.JPG

表の作成

NAVI_VBA_13_004.JPG

 テキストフレームを作り、そこに 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

 

NAVI_VBA_13_005.JPG

表のサイズを設定します。

NAVI_VBA_13_006.JPG

 

MsgBox "テーブルサイズ"
myWidth = "100mm"
myHeight = "10mm"
myTable.Columns.Item(1).Width = myWidth
myTable.Rows.Item(2).Height = myHeight

NAVI_VBA_13_007.JPG

表の分割

ここから表の分割を 5ステップで行っていきます。

スクリプトとインデザインの実行結果を確認して見てください。

NAVI_VBA_13_008.JPG



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

 

NAVI_VBA_13_009.JPG

NAVI_VBA_13_010.JPG

表の分割 5 までの結果

NAVI_VBA_13_011.JPG

表の結合

NAVI_VBA_13_012.JPG

表の結合は 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)

NAVI_VBA_13_013.JPG

NAVI_VBA_13_014.JPG

NAVI_VBA_13_015.JPG

 テーブルの結合5 の結果です

NAVI_VBA_13_016.JPG

表の 行/列等の数を調べます。

 

MsgBox "Rows " & myTable.Rows.Count
MsgBox "Cells " & myTable.Cells.Count
MsgBox "Columns " & myTable.Columns.Count

  NAVI_VBA_13_017.JPGNAVI_VBA_13_018.JPG

 

セルに文字を入力

NAVI_VBA_13_020.JPG

 セルを指定しながら、文字を入力します。


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"

 NAVI_VBA_13_021.JPG

テーブル変換

まずは、変換対象となる文字列をテキストフレームに追加します。

NAVI_VBA_13_022.JPG

タブ・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

NAVI_VBA_13_029.JPG

 

タブ・CR行の表変換

NAVI_VBA_13_030.JPG

タブ・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

NAVI_VBA_13_031.JPG

 

カンマ、セミコロンを指定した表への変換

NAVI_VBA_13_032.JPG

カンマ、セミコロンの行を選択して、表に変換します。

 

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(",", ";")

NAVI_VBA_13_033.JPG

  

 

 スクリプト全体

 

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

 

 

関連記事