InDesignデータからExcelでグラフを作成し、貼り込む

InDesignの表をExcelに転記し、そこでグラフを作成。作成されたグラフをコピー&ペーストでInDesignに貼り込むものです。コピーされるデータはWMF形式(色はRGB)になります。

労多くして実少なし、の見本のようなプログラムです。実用になるのかどうか、さっぱり分かりません。印刷品質をそれほど問わないもので、かつ、ほぼ定型の表がいくつもある場合に使えるかも知れません。

これは実験なので、作成されるグラフは1種類です。他の形のグラフが欲しい場合はプログラムを書き換える必要があります。その場合はInDesignではなくExcel VBAの勉強をしなければなりません。


動作環境・注意

InDesign CS、CS2およびExcel 2000で検証しました(OSはWindows 2000)。

InDesign のバージョンによって Set myInDesign = CreateObject (... の行を書き換えてください。

Excelが複数バージョンインストールされている場合は、Set myExcel = CreateObject (... の行を、適宜書き換えてください( Excel 2000 の場合は Excel.Application.9 )。

InDesignの動作が多少不安定になることがあります(なぜ?)。できればInDesignの起動直後に実行してください。

Excelのオブジェクトについては、Excel VBAの参考書等を参照してください。

このプログラムは実験用なので、ドキュメントの最上位のテキストフレームにある最初の表にしか対応していません。それ以外の条件の時は適宜変更する必要があります。

セルが結合されていた場合のテストは行っていません。予期せぬ結果になる可能性があります。


ダウンロード

ファイルはzip形式で圧縮してあります。ダウンロードはこちらからお願いします。


使用方法

ダウンロードした「idExcelchart.zip」ファイルを解凍すると「chart.vbs」「chartsample.vbs」の2つのファイルが作られます。これは実行用ファイル(chart.vbs)と、サンプルデータ作成用のファイル(chartsample.vbs)です。

このプログラムは直接実行しても、スクリプトパレットから実行しても構いません。

先にサンプルデータ作成用のファイル(chartsample.vbs)を実行し、サンプルデータを作成してください。でき上がったサンプルデータを適当に変更しても構いません。


サンプルデータ作成後の図

サンプルデータを開いた状態で、実行用ファイル(chart.vbs)を実行してください。


実行後の図


ソース

Dim myInDesign 'As InDesign.Application
Dim iddoc 'As InDesign.Document
Dim tbl 'As InDesign.Table
Dim myExcel 'As Excel.Application
Dim exdoc 'As Excel.Workbook
Dim cht 'As Excel.Chart

Set myInDesign = CreateObject("InDesign.Application.CS")
Set iddoc = myInDesign.ActiveDocument
Set tbl = iddoc.TextFrames(1).Tables(1)

Set myExcel = CreateObject("Excel.Application")
myExcel.Visible = True
Set exdoc = myExcel.Workbooks.Add

For i = 1 To tbl.Rows.Count
    For j = 1 To tbl.Columns.Count
        exdoc.Sheets(1).Cells(i, j) _
            = tbl.Rows(i).Cells(j).Contents
    Next 'j
Next 'i
str1 = exdoc.Sheets(1).Name
str2 = "A1:" & Chr(64 + j - 1) & CStr(i - 1)

Set cht = exdoc.Charts.Add
cht.ChartType = 97 'xlCylinderBarStacked100
cht.SetSourceData exdoc.Sheets(str1).Range(str2), 1 'xlRows
cht.Location 1 'xlLocationAsNewSheet
cht.HasLegend = True
cht.Legend.Position = -4107 'xlBottom
cht.HasDataTable = False
cht.ChartGroups(1).GapWidth = 50
cht.DepthPercent = 100
cht.GapDepth = 0
cht.ChartArea.Font.Name = "MS ゴシック"
With cht.Legend
    .Border.ColorIndex = 57
    .Border.Weight = 2 'xlThin
    .Interior.ColorIndex = -4142 'xlNone
End With
With cht.Axes(1) 'xlCategory
    .Border.ColorIndex = 57
    .Border.Weight = 2 'xlThin
    .TickLabels.Font.Name = "MS ゴシック"
    .TickLabels.Font.Size = 16
End With
With cht.Axes(2) 'xlValue
    .Border.ColorIndex = 57
    .Border.Weight = 2 'xlThin
    .TickLabels.Font.Name = "MS ゴシック"
    .TickLabels.Font.Size = 14
    .MajorGridlines.Border.ColorIndex = 57
    .MajorGridlines.Border.Weight = 2 'xlThin
End With
With cht.Walls
    .Border.ColorIndex = 57
    .Border.Weight = 2 'xlThin
    .Interior.ColorIndex = -4142 'xlNone
End With
With cht.Floor
    .Border.ColorIndex = 57
    .Border.Weight = 2 'xlThin
    .Interior.ColorIndex = -4142 'xlNone
End With
cht.ChartArea.Copy
exdoc.Close False
myExcel.Quit

myInDesign.Activate
myInDesign.Paste
myInDesign.Selection(1).GeometricBounds _
    = Array(20, 110, 80, 190) 'rectangle
myInDesign.Selection(1).Fit 1668247152 'idProportionally
myInDesign.Selection(1).Fit 1667591779 'idCenterContent
myInDesign.Selection(1).WMFs(1).LocalDisplaySetting _
    = 1346922866 'idHighQuality
MsgBox "グラフを作成しました。"

[HOME]