TOP > blog > Adobe InDesign vbs スクリプトによる表組操作 no2 (データ変換)
インデザイン
2020/06/14

Adobe InDesign vbs スクリプトによる表組操作 no2 (データ変換)

管理者用
blog

今回は、InDesign スクリプト 表組の 2回目 です。

テキストデータから表に変換の テーブル変換の使い方を紹介します。
スクリプトは、Excel VBAを使用してます。

スクリプトをダウンロード出来るようにZipファイルでアップしてます。

サンプル Excelファイル ⇒ ダウンロードはこちらから

下記、本文内には、インデザインの立ち上げ部分のスクリプトは、割愛しております。 

テーブル変換

テキストデータからテーブルへの変換を行います。
次の2つの変換モードが使えます。

① TAB/CRデータ を区切り文字
② ","と";" データを区切り文字

Excelファイルの保存時に、いくつかのフォーマットで書き出す事が出来ます。
その中に、TAB区切り文字の .txt テキストファイルへの書き出しと
.csv の ”,” カンマ区切り文字のCsvファイルへの書き出しがあります。
この2つのファイルから、Excelファイルの表をインデザインファイルへ取り込む事も出来そうです。
実際に、このNAVIの中で取り上げてみました。

下記、動画は、サンプルスクリプトを動画にしてみました。

 

1. TAB/CR文字から表への変換


Tab区切りのデータを作成して、表に変換します。
Excelファイルにて、Tab区切りの.txt ファイルへの書き出し機能があります。
取り込みに使えます。 

MsgBox "テーブル変換 TAB/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

myTextFrame.InsertionPoints.Item(-1).Contents = tableDT
MsgBox "TAB テーブルに変換"
Set myStartCharacter = myTextFrame.Paragraphs.Item(4).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(7).Characters.Item(-2)
Set myTableText = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)
Set myTable2 = myTableText.ConvertToTable

 

2.  ”、”/”;” 文字から表への変換

カンマ区切りのデータを作成し、表に変換し、ます。
カンマ区切りは、CSVファイルですが、Excelにcsv書き出しが行えます。
CSVファイルの取り込みに使えます。

MsgBox "テーブル変換 カンマ/セミコロン , ; "

tableDT = vbCr & vbCr & "社外協力会社" & vbCr
tableDT = tableDT & "担当業務,会社名,窓口担当;くるみ製本,㈱橋本製本,橋本課長;シール,藤本ラベル㈱,藤本;シルク印刷,加藤印刷,加藤" & vbCr
tableDT = tableDT & "テーブルテスト終了" & vbCr
myTextFrame.InsertionPoints.Item(-1).Contents = tableDT

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

 

3.外部データファイルを表に変換

外部テキストファイルをテーブル変換機能をつかって、表にしてみたいとと思います。
ファイルは、エクセルの住所データをTAB区切りファイルに書き出したものを使用します。
取り込んだ後、表の体裁を整えるところまで紹介してます。

3-1.ファイルの取り込み

 '.ファイルから読み込む
MsgBox "データファイル テーブル変換"

'MsgBox "表をデリートします"
myTable2.Delete
myTable3.Delete
myTextFrame.Contents = ""
dir_mei = ThisWorkbook.Path

n = FreeFile
    Open dir_mei & "\atena-Tab_DATA.txt" For Input As #n
    Do While Not EOF(n)
        i = i + 1
        Line Input #n, txtLine
        myTextFrame.InsertionPoints.Item(-1).Contents = txtLine & vbCr
    Loop

    Close #n
MsgBox "データファイル テーブル変換"
Set myStartCharacter = myTextFrame.Paragraphs.Item(1).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(-1).Characters.Item(-1)
Set myTableText4 = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)

Set myTable4 = myTableText4.ConvertToTable

 

3-2.セルの行の高さ指定値モード

外部ファイルから取り込んで表に変換しましたが、セルの高さ指定値モードが変動に設定されております。
従って、列幅に入りきれなかったセルは、文字が折り返しとなり、行の高さを広げてくれます。
しかし、場合によっては、高さを固定にしたい場合もあります。
セルの行の高さを固定値モードに指定します。
文字がセルをオーバフローした場合、セルの右下に赤い丸が表示されます。

・フォントサイズを5P
・列幅を設定
・赤いオーバフローのセルに対し、文字を細く長体にする

などを行っております。

 


'セルの指定値モード

MsgBox "セルの行モードを固定に設定"

Table_RowsCount = myTable4.Rows.Count
Table_ColumsCount = myTable4.Columns.Count
Table_CellsCount = myTable4.Cells.Count

For c = 1 To Table_RowsCount Step 1
    myTable4.Rows.Item(c).AutoGrow = False
    myTable4.Rows.Item(c).Height = "3mm"
Next

MsgBox "フォントサイズの設定"

For c = 1 To Table_CellsCount Step 1
    myTable4.Cells.Item(c).Texts.Item(1).AppliedFont = "MS ゴシック"
    myTable4.Cells.Item(c).Texts.Item(1).FontStyle = "Regular"
    myTable4.Cells.Item(c).Texts.Item(1).PointSize = 5
Next

MsgBox "列の幅を設定"

myTable4.Columns.Item(1).Width = "5mm"
myTable4.Columns.Item(2).Width = "32mm"
myTable4.Columns.Item(3).Width = "17mm"
myTable4.Columns.Item(4).Width = "17mm"
myTable4.Columns.Item(5).Width = "17mm"
myTable4.Columns.Item(6).Width = "10mm"
myTable4.Columns.Item(7).Width = "10mm"
myTable4.Columns.Item(8).Width = "30mm"
myTable4.Columns.Item(9).Width = "20mm"

MsgBox "セルの溢れ処理 長体をかける"

For roopB = 1 To Table_CellsCount Step 1
      BB = Ovf_TableExc(myTable4, roopB)
Next

 

4.CSVファイルを表に変換

3.項にて、TAB区切りのテキストファイルを使って、インデザインに表組しました。
まったく同じ要領で、.csv ファイルに対しても行って見ました。

Rem CSVファイル読み込み 表に変換
MsgBox "データファイル テーブル変換"

'MsgBox "表をデリートします"
myTable4.Delete
myTextFrame.Contents = ""
dir_mei = ThisWorkbook.Path

n = FreeFile
    Open dir_mei & "\atena-CSV_DATA.csv" For Input As #n
    Do While Not EOF(n)
        i = i + 1
        Line Input #n, txtLine
        myTextFrame.InsertionPoints.Item(-1).Contents = txtLine & ";"
    Loop
    Close #n
MsgBox "データファイル テーブル変換"
Set myStartCharacter = myTextFrame.Paragraphs.Item(1).Characters.Item(1)
Set myEndCharacter = myTextFrame.Paragraphs.Item(-1).Characters.Item(-1)
Set myTableText4 = myTextFrame.Texts.ItemByRange(myStartCharacter, myEndCharacter).Item(1)

Set myTable4 = myTableText4.ConvertToTable(",", ";")
'セルの指定値モード
MsgBox "セルの行モードを固定に設定"
Table_RowsCount = myTable4.Rows.Count
Table_ColumsCount = myTable4.Columns.Count
Table_CellsCount = myTable4.Cells.Count

For c = 1 To Table_RowsCount Step 1
    myTable4.Rows.Item(c).AutoGrow = False
    myTable4.Rows.Item(c).Height = "3mm"
Next

MsgBox "フォントサイズの設定"

For c = 1 To Table_CellsCount Step 1
    myTable4.Cells.Item(c).Texts.Item(1).AppliedFont = "MS ゴシック"
    myTable4.Cells.Item(c).Texts.Item(1).FontStyle = "Regular"
    myTable4.Cells.Item(c).Texts.Item(1).PointSize = 5
Next

MsgBox "列の幅を設定"

myTable4.Columns.Item(1).Width = "5mm"
myTable4.Columns.Item(2).Width = "32mm"
myTable4.Columns.Item(3).Width = "17mm"
myTable4.Columns.Item(4).Width = "17mm"
myTable4.Columns.Item(5).Width = "17mm"
myTable4.Columns.Item(6).Width = "10mm"
myTable4.Columns.Item(7).Width = "10mm"
myTable4.Columns.Item(8).Width = "30mm"
myTable4.Columns.Item(9).Width = "20mm"

MsgBox "セルの溢れ処理 長体をかける"

For roopB = 1 To Table_CellsCount Step 1
      BB = Ovf_TableExc(myTable4, roopB)
Next

 

5.溢れ処理の長体関数

セルの溢れ対応として、文字間の調整や、フォントサイズの調整、さらには、セルサイズの調整など、多くの方法が考えられる。
今回は、文字に長体をかけ、細くする処理を使用した。

Function Ovf_TableExc(myTable, CellsCunt)

     Font_OVF = 0
    If myTable.Cells.Item(CellsCunt).Overflows Then
              Font_OVF = 1
              moji_Hscale = 100
                
              Do While Font_OVF = 1
                   If myTable.Cells.Item(CellsCunt).Overflows Then
                        moji_Hscale = moji_Hscale - 1
                        myTable.Cells.Item(CellsCunt).Texts.Item(1).HorizontalScale = moji_Hscale
                   Else
                        Font_OVF = 0
                  End If
             Loop
    End If

    Ovf_TableExc = moji_Hscale

End Function

関連記事