AlteryxのTipsを不定期にお届けしている週刊(?)AlteryxTipsです。
Alteryxにて、レポーティングする際の総決算をしていきたいと思います。特に今回はExcelに出力する際の話を中心にして行きましょう。
AlteryxでExcelに出力する際は、テーブルツールで書式を作ったものをレンダリングツールで出力するか、データ出力ツールで出力するか、のいずれかになります。データ出力ツールについては既存のExcelブックの指定範囲に書き込みが可能なため、あらかじめフォーマットを作成したExcelに値だけ書き込み、レポートを完成させることができます。ただし、データ出力ツールの場合は、完全に書式はExcel側に持つということになります。
それぞれの方法について解説をしていきます。
テーブルツール+レンダリングツールの場合

Alteryxでは、レンダリングツールを使えば、書式を施したテーブルデータをAlteryx内で作成し、Excelファイルに出力することができます。ただ、この方法には一つ致命的な弱点があり、「セルの幅を思ったように操作できない」というものがあります。基本、レポーティングカテゴリのツールを使ってExcelに出力する際はテーブルツールでレポートスニペットを作成すると思いますが、列幅などはAlteryxの方で自動的にある程度いい感じには設定してくれます。ただし、カラムAは15ピクセル、カラムBは20ピクセル、といった具体的な指定はうまく反映されません。
なんとかしたい、という方には、レンダリングツールで出力後、Pythonツールなどでセル幅を指定し直す、といった工夫が必要になります。Pythonツールが入ると、ワークフロー自体が重くなったり、処理も少し時間がかかるようになるので、個人的にはあまり好きではないのですが、それでも手間としてはそれほど大きな手間もかかりません。以前のAlteryx Weekly Tips #117でセル幅指定のマクロを作成しましたが、そのような感じで再利用できるようにしてしまえば、このハードルもそれほど高くないのかな、と最近考え始めています。
そのあたりも含めて、Alteryxのレポーティングツールを使ってExcel出力する際の制限事項は以下のとおりです。
- レンダリングツールの出力時は常にファイルは新規作成となる(シート追加などができない)
- 体裁を整えたレポートを出力したい場合、一発で出力する必要があります。
- これにはコツがあります。レイアウトツールとの組み合わせでの対応が必要です。
- Excelレポートに生データもつけておきたい、といった場合、データ出力ツールと組み合わせるケースがありますが、データ出力ツールで出力するためのダミーシートを含めて先にレンダリングツールで出力を行い、その上でデータ出力ツールで上書きしてデータを追加しましょう
- 体裁を整えたレポートを出力したい場合、一発で出力する必要があります。
- 幅指定がうまく反映されないことがほとんどである
- PythonツールもしくはExcelのXML直接書き換えなどで対応する
- Excelの計算式は使えない
- 極端に大きいテーブルをレポーティングカテゴリのツールで出力することはおすすめしません。表示が崩れたりします(用紙サイズを指定するため、生データなどを書式設定して出力しようとするとサイズ的に無理があったりするため)。
データ出力ツールの範囲指定出力の場合

結局、書式付きのExcel出力の本命の方法としてはこちらの手法になるかと思います。基本的には過去のAlteryx Weekly Tipsで解説しているので、そちらを参照してください。
基本的には、出力の際に、範囲指定を行います。また、その際の出力オプションとして以下のオプションを使います。
- 出力オプション:「シートまたは範囲を上書きする」
- 「上書き時に書式設定を保持する」にチェックを入れる
こちらも色々と癖がないわけではありません。重いExcelファイルに書き込む場合はそれなりに時間がかかります。また、書き込む先がいくつもある場合、思った以上に時間がかかります。その他の制限事項は以下のとおりです。
- テンプレートとなるExcelファイルに直接書き込みたくない場合
- テンプレートのコピーは、Blob入力ツールからBlob出力ツールでコピーを作成してから書き込みを行えばオッケーです(コマンド実行ツールでコピーしても良い)
- 書式設定しているシートをコピーして書き込みたい
- Pythonツールを使えば可能
- 自動的に書式は拡張されない(数値項目だけ拡張されます)
- 一度ダミーの数値で書き込んで、あとから文字列を書き込む方法でカバーできます
- 書式に対してデータが不足していると、書式だけ消える
- Nullデータでもいいので、書式を保持したい範囲に書き込みを行う必要がある。むしろデータがないところは書式を消したい場合は、そのままいきましょう。
- 計算式を上書きできない(エラーが発生します)
- 同じ列で異なるデータ型を同時に書き込みできない(データ型ごとに分割して書き込みましょう)
- 数値の合計を計算式で計算したいような場合、計算式部分と数値部分をわけて書き込む必要があります
- でも、なるべく書き込み回数を減らした方が良い(速度的な面で)
- 保存時に自動計算が走らないので、Alteryxで処理したあとにさらに別システムで読み込ませるような場合、自動計算を期待するとAlteryx更新前の値で反映されてします(ワークアラウンドは、開いて保存して閉じる動作をVBAやPythonなどで別途行う)
- 成果物を人間が見るような場合は、普通にExcelを開くのでその際に自動計算が走るので問題なし
- 何度も同じExcelファイルに対して範囲書き込みすると、結構時間がかかることがあるので要注意
「テーブルとして書式設定」部分に書き込む場合
「テーブルとして書式設定(Format As Table)」機能を知っていますか?

この機能を使うと、書式を簡単に設定できます。
「テーブルとして書式設定」で書式を作っているセルについては、通常のセルと扱いが異なるため、上書きの方法によってはファイルを壊すことがあります。
ファイルが壊れた場合、以下のようなエラーが出ます。


壊れるケースとしては、「テーブルとして書式設定」で設定した部分のフィールド名に上書きすると壊れるようです。全く同じフィールド名で上書きすると壊れませんが、異なっていると壊れます。
回避方法としては、同じフィールド名で上書きするか、フィールド名部分を上書きしないようにフィールド名をスキップし、データ行のみに書き込みを行ってください。
ちなみに、「テーブルとして書式設定」で設定すると、「上書き時に書式設定を保持する」オプションを使わなくても、書式は保持されます(書式の管理方法が通常と異なるためのようです)。なので、あらかじめ範囲が決まっていて、データがなくても書式を保持したい場合などでは、「テーブルとして書式設定」を使った方が楽かもしれません。
Excelの名前付き範囲について
読込み時は「名前付き範囲」は扱いやすいです。書き込み時は、使うのは諦めましょう。理由としては、「上書き時に書式設定を保持する」のオプションが機能しない、ということです。このオプションは、書き込み時に範囲指定した場合のみ機能するオプションなので、名前付き範囲の場合は範囲指定しないので「仕様」ということになります。
具体的に見ると、名前付き範囲へ出力する場合のパスの書き方は以下のとおりです(名前付き範囲の名称が「DataRange」の場合)。
C:\YourExcelFile.xlsx|||DataRange
これにさらに範囲指定しようとすると、「C:\YourExcelFile.xlsx|||DataRange$B2:H12」といった書き方になると思いますが、この場合はDataRangeという新規シートが作成されてしまいます。
その他も含めて名前付き範囲の制限(というか、癖)は以下のとおりとなります。
- 「上書き時に書式設定を保持する(Preserve Formatting on Overwrite)」が機能しない(致命的)。
- 範囲指定書き込みのように細かい範囲の指定はできない(DataRange$B1:C5などと指定すると、DataRangeという新規シートが作成される)
- カラム数が名前付き範囲を超えると、エラーがでる(Error: Output Data (3): Specified range is not large enough for incoming data fields.)
- 行数は範囲を超えてもエラーはでない(名前付き範囲は拡張されないことに注意)
結論としては、使いにくい、ということになるかと思います。
まとめ
- AlteryxでExcelファイルへの出力の方法について解説しました
- テーブルツール+レンダリングツールの場合
- データ出力ツールの範囲指定出力の場合
- 以下の機能を使った場合における注意点を記載しました
- 「テーブルとして書式設定」部分に書き込む場合
- Excelの名前付き範囲について



コメント