Excelデータを使用しての自動化
- ホーム
- リソース
- ユーザーマニュアル
- think-cell グラフ:データ可視化
- 高度なレポート自動化
- Excelデータを使用しての自動化
Windows では、think-cell API 関数を使って、Excelのデータから think-cell プレゼンテーションをプログラム的に作成することができます。
Excel データによる自動化の概要
Excel の自動化は、毎回手動でデータを更新することなく、大規模なレポートを定期的に生成する必要がある場合に最も役立ちます。小規模な、または特定の目的のためのグラフ作成タスクの場合は、Excel から要素を作成するを使用することをお勧めします。
PowerPoint テンプレートのコピーを作成し、Excel ワークブックにリンクされているコピーされたプレゼンテーションのすべての think-cell 要素を更新するには(Excel から要素を作成するを参照)、PresentationFromTemplate 関数を使用します。
PowerPoint テンプレート内の特定の think-cell 要素を更新するには、Excel にリンクされているかどうかにかかわらず、UpdateBatch API を使用します。UpdateBatch が UpdateChart を置き換えました (廃止)。ただし、既存のコードが UpdateChart を使用している場合は、このコードは機能します。
think-cell API と Office Automation
think-cell API は Microsoft の Component Object Model (COM) に統合されているため、Visual Basic for Applications (VBA) や C# など、Office をプログラムできる任意の言語から API にアクセスできます。VBA と C# の使用方法については、think‑cell API の使用を開始する を参照してください。
think-cell へのエントリーポイントは think-cell アドインオブジェクトです。Application.COMAddIns コレクションからオブジェクトにアクセスできます。think-cell への呼び出しは、常に遅延結合です。(Microsoft Learnを参照)。このように、think-cell アドインオブジェクトのタイプは単に Object であり、タイプライブラリまたは参照を追加する必要はありません。オブジェクトを取得すると、呼び出す準備が整います。たとえば、Excel の VBA では、次のコードを使用します。
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
C# では、think-cell アドインオブジェクトへの参照をdynamic と宣言することで、遅延バインディングを実現することができます。参照を var として宣言すると、コンパイラはオブジェクトが dynamic タイプ であると推測するため、次のコードを使用できます。ここで、xlapp は Excel.Application オブジェクトへの参照であり、think-cell を読み込みます。
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
Excel とテンプレートのデータレイアウトを一致させる
対応するグラフにデータを正しく表示するには、Excel のデータレイアウトがテンプレートのグラフのデータシートレイアウトと一致している必要があります(リンクされた範囲のデータレイアウトを転置および編集するを参照)。たとえば、テンプレートグラフに 100%= 行を追加すると、 think-cellは Excel データの 2 行目が、割合の計算元となる合計として解釈されます。
次の表は、一般的なデータレイアウトオプション、そのデータレイアウト内での位置、およびデフォルト設定をまとめたものです。特定のグラフのデータレイアウトを確認するには、グラフをダブルクリックしてデータシートを開きます。
|
Data layout option |
Contents |
Position |
Default setting |
|---|---|---|---|
|
Series |
系列ラベル |
1 列目 |
選択済み |
|
Category |
カテゴリラベル |
1 行目 |
選択済み |
|
100%= |
パーセント計算用の合計値 |
2 行目(Categoryが選択されている場合) |
選択されていない |
要素の書式設定を Excel に一致させる
数値形式、塗りつぶし、フォントの色などの要素の書式を、Excel ワークブックの書式に一致させることができます。PresentationFromTemplate または UpdateBatch を呼び出す前に、Excel ワークブックで、必要な書式を適用します。次に、PowerPoint テンプレートで、要素の数値形式、フォントの書式設定、塗りつぶし、または罫線を Excel ワークブックに一致させます(要素の書式設定をリンクされたデータ範囲に一致させるを参照)。
PresentationFromTemplate
PresentationFromTemplate 関数は、PowerPoint テンプレートのコピーを作成し、Excel ワークブックにリンクされているコピーされたプレゼンテーションのすべての think-cell 要素を更新します。リンクされた think-cell 要素の詳細については、Excel から要素を作成するを参照してください。
PresentationFromTemplate 署名
VBA
tcXlAddIn.PresentationFromTemplate( _
Workbook As Excel.Workbook, _
Template As String, _
PpApplication As PowerPoint.Application _
) As PowerPoint.Presentation
C#
PowerPoint.Presentation tcXlAddIn.PresentationFromTemplate(
Excel.Workbook Workbook,
string Template,
PowerPoint.Application PpApplication
);
PresentationFromTemplate の説明
PresentationFromTemplate は、次の引数を取ります。
Workbookは、データを含む Excel ワークブックを参照します。Templateは、データで埋める要素を含む PowerPoint テンプレートを参照します。要素をデータで埋めるには、Workbookの範囲にリンクする必要があります(Excel から要素を作成するを参照)。Templateは、Workbookまたは絶対パスの場所から相対パスを指定できます。PpApplicationは、新しいプレゼンテーションを生成する PowerPoint インスタンスを参照します。
PresentationAsTemplate は、要素を自動的に更新するように設定しているかどうかにかかわらず、Template のコピーを作成し、Workbook にリンクされているコピーされたプレゼンテーションのすべての要素を更新します(リンクされた要素のデータを管理するを参照)。
新しいプレゼンテーションでは、PresentationFromTemplate が意図的に更新された要素の Excel リンクを切断し、不注意による更新を防ぎます。ただし、関数が更新しない要素は、Excel リンクを保持します。つまり、複数の Excel ワークブックのリンクを更新できます。これを行うには、新しいプレゼンテーションを作成した後、次のワークブックで PresentationFromTemplate を再度呼び出して、さっき作成したプレゼンテーションをテンプレートとして使用します。
PresentationFromTemplate の例
これらの例を使用するには、まず Excel ワークブックの最初のシートにある範囲G1:K4にリンクされた積み上げ縦棒グラフを含むプレゼンテーションを作成します(Excel からグラフを作成する を参照)。プレゼンテーションをC:\Samples\PresentationFromTemplate\template.pptxとして保存し、ワークブックをdata.xlsxとして同じディレクトリに保存します。
VBA
この例では、Sheet1内で手順PresentationFromTemplate_Sample()が H3 の値をi=1から10に変更します。H3 は、積み上げ縦棒グラフの最初の系列の最初の値にリンクされます。H3 の新しい各値について、PresentationFromTemplate_Sample()は以下を実行します。
template.pptxのコピーを作成します。- コピーしたプレゼンテーションで、新しい値でグラフを更新します。
- グラフの Excel リンクを切断します。
- テンプレートと同じディレクトリに、 新しいプレゼンテーションを
output_i.pptxとして保存します。
この例を使用するには、先に作成した Excel ワークブック data.xlsx で、次の手順でモジュールを作成します。モジュールでは、Microsoft PowerPoint 16.0 Object Library を参照する必要があります(アプリケーション用の Visual Basicを参照)。
Option Explicit
Sub PresentationFromTemplate_Sample()
' Get the range to modify. It is more efficient
' to do this once rather than within the loop.
Dim rng As Excel.Range
Set rng = ActiveWorkbook.Sheets(1).Cells(3, 8)
' Get the think-cell add-in object
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
' Get a PowerPoint instance. Hold on to this
' object as long as you want to access the
' generated presentations. There can only be a
' single PowerPoint instance. If there is no
' PowerPoint running, one will start.
' Otherwise the existing one is used.
Dim ppapp As Object
Set ppapp = New PowerPoint.Application
Dim i As Integer
For i = 1 To 10
' Modify the range value.
' Note: Avoid selecting the cell prior to
' changing it. It is very slow and has
' undesirable side-effects.
' BAD:
' rng.Select
' ActiveWindow.Selection.Value = 0
' GOOD:
rng.Value = i
' Generate a new presentation based on the
' linked template.
Dim pres As PowerPoint.Presentation
Set pres = tcXlAddIn.PresentationFromTemplate( _
Excel.ActiveWorkbook, "template.pptx", ppapp _
)
' If you want to modify the new presentation
' before saving it this is the place to do it.
' Save the new presentation
pres.SaveAs "C:\Samples\PresentationFromTemplate\output_" & i & ".pptx"
' Explicitly close the presentation when we
' are done with it to free its memory.
' Letting the object go out of scope is not
' sufficient.
pres.Close
Next
End Sub
C#
この例では、プログラムは Excel を開き、data.xlsxをロードします。次に、Sheet1では、プログラムは H3 の値をi=1から10に変更します。H3 は、積み上げ縦棒グラフの最初の系列の最初の値にリンクされます。H3 の新しい各値について、プログラムは以下を実行します。
template.pptxのコピーを作成します。- コピーしたプレゼンテーションで、新しい値でグラフを更新します。
- グラフの Excel リンクを切断します。
- テンプレートと同じディレクトリに、 新しいプレゼンテーションを
output_i.pptxとして保存します。
この例を使用するには、C# Console App プロジェクトテンプレートで、Program.csのコードを次のコードに置き換えます。このプログラムでは Microsoft PowerPoint 16.0 Object Library、Microsoft Excel 16.0 Object Library、および Microsoft Office 16.0 Object Library への参照が必要です(C#を参照)。
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;
namespace ConsoleApplication_PresentationFromTemplate
{
class Program
{
static void Main()
{
var xlapp = new Excel.Application { Visible = true };
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
var workbook = xlapp.Workbooks.Open("C:\\Samples\\PresentationFromTemplate\\data.xlsx");
var ppapp = new PowerPoint.Application();
for (var i = 1; i <= 10; ++i)
{
workbook.Sheets[1].Cells[3, 8] = i;
PowerPoint.Presentation presentation = tcXlAddIn.PresentationFromTemplate(
workbook,
"C:\\Samples\\PresentationFromTemplate\\template.pptx",
ppapp
);
presentation.SaveAs("C:\\Samples\\PresentationFromTemplate\\output" + i + ".pptx");
presentation.Close();
}
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}
UpdateBatch
UpdateBatch APIを使用して、PowerPoint テンプレートのどのthink-cell 要素を新しい Excel データで更新するかを指定します。Excel にリンクされているかどうかに関係なく、要素を更新できます。
UpdateBatch が UpdateChart を置き換えました(廃止)。UpdateChart を使用する既存のコードはまだ機能しますが、代わりにUpdateBatchを使用することをお勧めする理由があります。
- テーブルの画像を Excel データで埋めるなどの新機能(表の画像を挿入するを参照)は、
UpdateBatchでのみ使用できます。 - 新しい think-cell バージョンでは、特に大規模なプレゼンテーションでは、
UpdateChartが非常に遅い場合があります。
UpdateBatch 署名
VBA
tcXlAddIn.CreateUpdate() As Object
tcUpdate.AddRangeData(
Target As Object, _
Name As String, _
Range As Excel.Range, _
Transposed As Boolean _
)
tcUpdate.AddRangeImage(
Target As Object, _
Name As String, _
Range As Excel.Range _
)
tcUpdate.Send()
C#
object tcXlAddIn.CreateUpdate();
void tcUpdate.AddRangeData(
object Target,
string Name,
Excel.Range Range,
bool Transposed
);
void tcUpdate.AddRangeImage(
object Target,
string Name,
Excel.Range Range
);
void tcUpdate.Send();
UpdateBatch の説明
UpdateBatch には、次の機能が含まれています。
CreateUpdateは、オブジェクトを作成して、更新するすべての要素とそれに対応する Excel データ範囲を保存します。AddRangeDataは、Excel データで埋めるグラフ、テーブル、自動化テキストフィールド、ハービーボール、チェックボックス、またはイメージの更新をスケジュールします。AddRangeImageは、Excel データで埋めるテーブルの画像の更新をスケジュールします(表の画像を挿入するを参照)。Sendは Excel データを収集し、PowerPoint に送信してプレゼンテーションを作成します。コードが PowerPoint テンプレートの Excel リンク要素をターゲットにしている場合、これらのリンクは切断されます (Excel から要素を作成するを参照)。
AddRangeData と AddRangeImage は、次の引数を取ります。
Targetは、データで埋めたい要素を含む PowerPoint テンプレートを参照します。TargetはPresentation、SlideRange、Slide、Master、またはCustomLayoutのいずれかです。Nameは、AddRangeDataまたはAddRangeImageという名前の要素を指します。UpdateBatchを実行する前に、AddRangeData Name または AddRangeImage Name を使用してPowerPoint テンプレートで名前を割り当てる必要があります(レポート自動化のための PowerPoint テンプレートの作成を参照)。名前は大文字と小文字を区別しません。Target内で 2 つの要素が同じ名前を持つ場合、 think-cell はそれらを同じデータで埋めます。Rangeは、要素のデータを含む Excel 範囲を参照します。Transposed(AddRangeDataのみ):更新された要素のデータシートの行と列の向きを交換するには ( リンクされた範囲のデータレイアウトを転置および編集するを参照)、TransposedをTrueに設定します。要素のデータの向きが Excel データの向きと一致する場合は、TransposedをFalseに設定します。
UpdateBatch の例
次の VBA と C# コードの例は、Excel ワークブックの最初のシートのデータを使用して、PowerPoint テンプレートの 3 つの要素を更新します。この例では、結果のプレゼンテーションを template_updated.pptx として保存します。
これらの例を使用するには、think-cell 要素を含む PowerPoint テンプレートと、要素を埋めるためのデータを含む Excel ワークブックを作成します。
PowerPoint テンプレートを作成するには、次の手順に従います。
- PowerPoint テンプレートの例の説明に従って、スライドタイトルとグラフで PowerPoint プレゼンテーションを作成します。
- プレゼンテーションで、テーブルの画像を追加します(表の画像を挿入するを参照)。
- テーブルのミニツールバーを開きます。AddRangeImage Nameで、
TableAsImage1を入力します。入力を選択します。 - プレゼンテーションを
C:\Samples\UpdateBatch\template.pptxに保存します。
Excel ワークブックを作成するには、次の手順に従います。
- Excel ワークブックを開きます。
- A1 にスライドのタイトルを入力します。
- A2:D5 にグラフデータを入力します。Excel のデータレイアウトが、PowerPoint テンプレートのグラフのデータシートレイアウトと一致していることを確認してください (Excel とテンプレートのデータレイアウトを一致させるを参照)。
- A7:D10 にテーブルデータを入力します。塗りつぶしや罫線など、適用するテーブルの書式設定は、新しいプレゼンテーションに表示されます。
- ワークブックを
C:\Samples\UpdateBatch\data.xlsxに保存します。
UpdateBatch 手順でパスを指定する場合は、ディレクトリの区切り文字として二重バックスラッシュ(\\)を使用します。
VBA
このコード例を使用するには、先に作成した Excel ワークブックで、次の手順でモジュールを作成します。モジュールでは、Microsoft PowerPoint 16.0 Object Library への参照が必要です。詳細については、アプリケーション用の Visual Basicを参照してください。
Option Explicit
Sub UpdateBatch_Sample()
' Get the ranges that contain the new data
Dim rngTitle As Excel.Range
Set rngTitle = ActiveWorkbook.Sheets(1).Range("A1")
Dim rngChart As Excel.Range
Set rngChart = ActiveWorkbook.Sheets(1).Range("A2:D5")
Dim rngTableAsImage As Excel.Range
Set rngTableAsImage = ActiveWorkbook.Sheets(1).Range("A7:D10")
' Get the think-cell add-in object
Dim tcXlAddIn As Object
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object
' Get a PowerPoint instance. Hold onto this object as long as
' you want to access the new presentation. There can only be one
' PowerPoint instance. If there is no instance, the script will
' start one. Otherwise, the script uses the existing instance.
Dim ppapp As Object
Set ppapp = New PowerPoint.Application
Dim pres As PowerPoint.Presentation
' When the script ends, this code opens the new presentation
' so that you can edit it further. To keep the presentation open,
' also remove pres.Close and ppapp.Quit.
' Set pres = ppapp.Presentations.Open( _
' Filename:="C:\\Samples\\UpdateBatch\\template.pptx", _
' Untitled:=msoTrue _
' )
' When the script ends, this code does not open the new presentation.
Set pres = ppapp.Presentations.Open( _
Filename:="C:\\Samples\\UpdateBatch\\template.pptx", _
Untitled:=msoTrue, _
WithWindow:=msoFalse _
)
Dim tcUpdate As Object
Set tcUpdate = tcXlAddIn.CreateUpdate
Call tcUpdate.AddRangeData(pres, "Title", rngTitle, False)
Call tcUpdate.AddRangeData(pres, "Chart1", rngChart, False)
Call tcUpdate.AddRangeImage(pres, "TableAsImage1", rngTableAsImage)
Call tcUpdate.Send
pres.SaveAs("C:\\Samples\\UpdateBatch\\template_updated.pptx")
pres.Close
ppapp.Quit
End Sub
C#
このコード例を使用するには、C# Console App プロジェクトテンプレートで、Program.csのコードを次のコードに置き換えます。
プログラムでは Microsoft PowerPoint 16.0 Object Library、Microsoft Excel 16.0 Object Library、および Microsoft Office 16.0 Object Library への参照が必要です。詳細については、C#を参照してください。
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
namespace ConsoleApplication_UpdateBatch
{
class Program
{
static void Main()
{
PowerPoint.Application ppapp = new PowerPoint.Application();
PowerPoint.Presentation presentation = ppapp.Presentations.Open(
"C:\\Samples\\UpdateBatch\\template.pptx",
Office.MsoTriState.msoFalse,
Office.MsoTriState.msoTrue
);
Excel.Application xlapp = new Excel.Application { Visible = true };
Excel.Workbook workbook = xlapp.Workbooks.Open(
"C:\\Samples\\UpdateBatch\\data.xlsx",
Office.MsoTriState.msoFalse,
Office.MsoTriState.msoTrue
);
Excel.Worksheet worksheet = workbook.Sheets[1];
var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
var tcUpdate = tcXlAddIn.CreateUpdate();
tcUpdate.AddRangeData(
presentation,
"SlideTitle",
worksheet.get_Range("A1"),
true
);
tcUpdate.AddRangeData(
presentation,
"Chart1",
worksheet.get_Range("A2", "D5"),
true
);
tcUpdate.AddRangeImage(
presentation,
"TableAsImage1",
worksheet.get_Range("A7", "D10")
);
tcUpdate.Send();
presentation.SaveAs("C:\\Samples\\UpdateBatch\\template_updated.pptx");
presentation.Close();
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}
UpdateChart(廃止)
UpdateChart は、指定した要素のデータシートを Excel のデータで更新します。
UpdateBatch が UpdateChart を置き換えました(UpdateBatchを参照)。UpdateChart を使用する既存のコードはまだ機能しますが、新しコードには代わりにUpdateBatchを使用することをお勧めする理由があります。
- テーブルの画像を Excel データで埋めるなどの新機能(表の画像を挿入するを参照)は、
UpdateBatchでのみ使用できます。 - 新しい think-cell バージョンでは、特に大規模なプレゼンテーションでは、
UpdateChartが非常に遅い場合があります。
UpdateChart の署名
VBA
tcXlAddIn.UpdateChart( _
Target As Object, _
ChartName As String, _
Range As Excel.Range, _
Transposed As Boolean _
)
C#
void tcXlAddIn.UpdateChart(
object Target,
string ChartName,
Excel.Range Range,
bool Transposed
);