WeeklyAlteryxTips#6 Excelファイルの範囲書き込み

Alteryx

今回は、フォーマット化されたExcelファイルへの書き込みについてご紹介します。

Excelに出力する場合、やはりきれいなフォーマットで出したい、というケースは多いと思います。そのような際、Alteryxでは3つのアプローチがあります。

  1. レポーティングカテゴリツールでフォーマット化して出力
  2. 書式設定がされたExcelファイルに範囲書き込みを行う
  3. BIツールを使う

3のBIツールを使うのが一番良いのですが、やはりExcel文化というのは根強いです。ちなみに、これ以外に出力データに対してVBAで整形していく、という荒業も存在します。

1は普通にレポーティングカテゴリのツールを使ってテーブル(表)、グラフ、テキスト、地図を作成し、レポート上に配置して出力する、という形になります。この際に、Excel形式での出力にも対応している、ということになります。このケースでは主にExcel上に整形した表を実現する、という使い方が主体となると思われますが、Excelでできることがすべてできるわけではありません。特に、セルの結合やセルサイズの変更は苦手(できない)な部分となります。

3はお好きなBIをお使いください。

今回は、2のケースについて取り扱っていきます。

書式設定されたExcelファイルにAlteryxで範囲書き込みを行う

例えば、以下のようなフォーマット化されたExcelファイルに対して値を埋めるのを自動化したいとします。

このような場合に、Excelファイルに対してデータ出力ツールで「シートまたは範囲を上書きする」&「上書き時に書式設定を保持する」オプションを使います。

このとき、範囲設定は必須なので、「接続を設定」する際に、「Excel 出力を選択する」ダイアログにて「範囲を指定する」にチェックを入れ、範囲を指定するようにしましょう。

これにより、以下のようにきれいに値が入ります。

※今までは「カテゴリ別売上推移」のみセットしましたが、同様に上の結果では「都道府県別売上推移」もセットしています

その他の注意点

ちなみに、この方法についてはいくつか注意点があります。

  • データ行が不足している場合にフォーマットが消えてしまう(ことがある)
  • 計算式(関数)が入っているセルに書き込もうとするとエラーが出る
  • テンプレートをコピーしてからそのテンプレートに書き込みしたい

データ行が不足している場合にフォーマットが消えてしまう(ことがある)

今回6行書き込むとしているのですが、データが3行分しかありませんでした。このまま書き込みを行うと、一部書式が消えてしまっています。

このような場合は、書き込みの範囲を狭めるか、 範囲をNullで埋める必要があります。

書き込みの範囲を動的に狭めるには、「フィールドからファイル/テーブル名を取得する」オプションもしくはバッチマクロで可能となります。

計算式(関数)が入っているセルに書き込もうとするとエラーが出る

出力先のExcelファイルの範囲内に関数が入っていると、以下のようにエラーが出るようになっています。

この場合は、関数のある範囲を避けて上書きを行う必要があります。

もしくは、関数自体を埋め込むこともできるので、Designer側で文字列で関数を作成しておき、関数ごと書き込むことも可能です。ただし、数値の下に合計を入れるような関数を入れようとすると、数値が文字列型になってしまうため、Excel上で計算ができなくなってしまうので要注意です。つまり、以下のようなデータをDesigner上で作ってみます。

このような場合だと、元々数値の部分も文字列型として保持せざるをえないため、Excelに読み込むと以下のように文字列となってしまいます。

このような場合は、関数部分と数値部分は別々に書き込む必要があります(正直めんどくさいですね)。ただ、Alteryxで書き込んだ数式はエラーが出ません。

なお、関数ではなく値がある場合は普通に上書きします。

また、Designerのバージョンによって細かい動きが変わることがあるのでご注意ください。本記事はバージョン2022.3.1.395に基づいています(特に、古いバージョンでは書式設定を保持するオプションがありません)。

テンプレートをコピーしてからそのテンプレートに書き込みしたい

こちらのBlog「KCME Tech Blog/【AlteryxTips】複数のExcelファイルにテンプレートを適用する方法」の方法をお試しください。

Blobファイル読み込み、出力から書き込みを行います。もしくは、コマンドラインツールでコピーすることも可能かと思います。

ちなみに、テンプレートファイルからシートをコピーしてそこに書き込む、という場合はPythonツールが必要になります。もしくは、Excelファイルを解析すれば可能かもしれません。

サンプルワークフローダウンロード

※本ワークフローは、「データサイエンティスト協会スキル定義委員」の「データサイエンス100本ノック(構造化データ加工編)」を使用しています

次回

次回はシンプルに複数ファイルへの一括書き込みのTipsをご紹介します(みなさんご存知かと思いますが)。

コメント

タイトルとURLをコピーしました