TOP > blog > インデザイン テーブルの溢れ処理
インデザイン
2018/04/21

インデザイン テーブルの溢れ処理

管理者用
blog

エクセルの表をインデザインに取り込む方法を前回紹介しました。
単純にコピペで出来ますと言うものでした。
今回は、その続きとして、セルに入り切れない(溢れ)場合にどうするについてお話しします。

まず、インデザインの表の設定を見て見ます。
セルの高さの指定が、「最小限度」/「指定値を使用」のどちらになっているか確認します。
セルを溢れた時の動作が違ってきます。

 


「最小値限度」 に指定している場合、セルに入りきれない時には、自動的に行の高さを広げてくれます。
そして、折り返し2行で表示します。

 


また、「指定値を使用」 に設定している場合には、セルの右下に 赤●マークを表示して溢れている事を知らせてます。

 

「最小値限度」の行の高さ拡張するモードの場合は、問題ありません。
しかし、「指定値を使用」の高さ固定の赤●の場合は、何かしらの操作が必要です。
文字フォントサイズを下げる・文字の幅を細く、また文字間を詰める等の方法が考えれれます。

次の図の例では、「ケンタッキーと食肉卸向け」のセルに赤●が消えるまで、長体をかけて、溢れを解消してます。
まだ、赤●は多数あります。
手作業で行うのは、大変な作業です。

  

 ここで登場するのがスクリプトです。

ネット上を見てもこの問題に対する関心は高いようで、対策スクリプトも紹介されてます。

私も、vbsで作って見ました。
最後に、スクリプトファイルを紹介してますので、参照してください。
実際に使ったもので、テーブル以外にもテキストフレームが配置されているドキメントでした。
5番目のテキストフレームにテーブルが配置されていたため

Set myTextFrame = myDocument.TextFrames(5)'----①

の記述としてます。

インデザインで表を表示した状態で、vbsを実行します。
紹介した、スクリプトでは、1列、3列、5列に対し、溢れていたら、文字幅を細くします。


また、1列に対しては、〃 処理を入れてます

 

 

更に、5列、6列は電話、FAXの記述列でしたが、ハイフォンの文字フォントを変えてる処理も入れてます。

 

VBスクリプトサンプルコードを記載しました。
本スクリプトは、実際の仕事の中で使ったものです。
したがって、対象のセル列の指定など、変更して使用してください。

===============================


Private Sub CommandButton1_Click()
Set myInDesign = CreateObject("InDesign.Application") 'インデザインを起動する
MsgBox "開いておく事"

Set myDocument = myInDesign.ActiveDocument
Set myTextFrame = myDocument.TextFrames(5) '----①
Set myTable = myTextFrame.Tables(1)

RowCunt = myTable.Rows.Count
'MsgBox "Cells " & myTable.Cells.Count
'MsgBox "Rows " & myTable.Columns.Count
YakusyokuA = ""
YakusyokuB = ""
YakusyokuOut = ""

For roopA = 1 To RowCunt - 1 Step 1
' ・・・・〃処理 前列と同じ内容の場合「 〃 」
   YakusyokuA = myTable.Rows.Item(roopA + 1).Cells.Item(1).Contents
   
    If YakusyokuA = YakusyokuB Then
        YakusyokuOut = "〃"
    Else
        YakusyokuB = YakusyokuA
        YakusyokuOut = YakusyokuA
    End If
 
    myTable.Rows.Item(roopA + 1).Cells.Item(1).Contents = YakusyokuOut
'・・・・・・・・
    aa = cyhotai(myTable, roopA + 1, 3) '3列に溢れ処理長体
    aa = cyhotai(myTable, roopA + 1, 5) '5列にに溢れ処理長体
    bb = HaiPhonA(myTable, roopA + 1, 5) '5列 ハイフォン書体変更
    bb = HaiPhonA(myTable, roopA + 1, 6) '6列 ハイフォン書体変更
    bb = HaiPhonA(myTable, roopA + 1, 7) '7列 ハイフォン書体変更

Next 'roopA

MsgBox "終了しました"

End Sub

'*************************************************************************************

'*********** 溢れ 長体処理 ************************************************************
Function chyotai(myTable, cuntB, celA)

    moji_Hscale = 100
    Font_OVF = 0
    If myTable.Rows.Item(cuntB).Cells.Item(celA).Overflows Then

        Font_OVF = 1
            moji_Hscale = 100
             Do While Font_OVF = 1
                   If myTable.Rows.Item(cuntB).Cells.Item(celA).Overflows Then
                        moji_Hscale = moji_Hscale - 1
                        myTable.Rows.Item(cuntB).Cells.Item(celA).Texts.Item(1).HorizontalScale = moji_Hscale
                        '.VerticalScale = moji_Hscale
                   Else
                        Font_OVF = 0
                  End If
             Loop
    End If

    cyhotai = moji_Hscale

End Function

'**************ハイフォンフォントの変更 **************************************************
Function HaiPhonA(myTable, Excel_linCunt, celA)

     fafonDat = myTable.Rows.Item(Excel_linCunt).Cells.Item(celA).Contents
     n = 1
     RoopFaifun = 0
     Do While RoopFaifun = 0
               sp = InStr(n, fafonDat, "-", 1)
                    
                   If sp = 0 Then
                        RoopFaifun = 1
                    HaiPhonA = 0
                   Else
                  myTable.Rows.Item(Excel_linCunt).Cells.Item(celA).Characters.Item(sp).AppliedFont = "MS ゴシック"
                  myTable.Rows.Item(Excel_linCunt).Cells.Item(celA).Characters.Item(sp).FontStyle = "Regular"
                   n = sp + 1
                    HaiPhonA = 1
                    End If
     Loop
     aa = cyotai(myTable, Excel_linCunt, celA)

End Function
'**************************************************************************************

関連記事