先週に引き続いて、複数ファイルへの一括書き込みのExcel版をご紹介します。私がデモを行う際はCSVで行うのですが、実際よく使われるパターンでは、Excelファイルへの書き出しになるかと思います。Excelの場合はフォーミュラツールなど使わないといけないので、「めちゃ簡単じゃん!」って見せたいのに若干複雑になるので、デモの際はこれはやらないのです・・・。
ということで、集計結果などを各担当ごとにExcelファイルで渡したい、という要望があったとします。
一番簡単なパターンは、以下のような形になります。
担当が増えるとフィルタツールとデータ出力ツールを増やせばいいとはいえ、見た目も美しくないですし面倒ですよね(最初一人だったのが徐々に増えていく場合は一つずつ対応、というのもあるかもしれませんが、最初から10人担当がいる、とかになるとやる気にならないかと思います)。
1つのデータ出力ツールで解決する!
1つのデータ出力ツールで解決できるのですが、Excelファイルの場合は、ブックとシートという厄介な考え方があるので、フォーミュラツールで一捻り必要です。
正解の前に、CSVと同じ方法で設定するとどうなるか見てみましょう。まず、ファイル出力ツールをCSVと同じように設定します。つまり、以下のような設定です。
- 出力オプションに、「シートまたは範囲を上書きする」を設定
- 「フィールドからファイル/テーブル名を取得する」にチェック
- ファイル名またはファイル名の一部を含むフィールドは「担当」
- 「出力でフィールドを保持する」にチェック
これで出力してみましょう。結果ウィンドウの結果は以下のようになります。
不穏な感じがします。
ファイルとしては、「集計結果_.xlsx」というファイルが一つ出ているだけで、シートが分割されて出てきています。これだと担当ごとにファイルが違うわけではないので配布しにくいです。Excelを開いてみると以下のようになっています。
しかし、我々が欲しいのは、
という各担当ごとに個別のファイルのイメージです。
ファイルパス全体を変更するオプションを利用する
結論としては、ファイルパスを自分で作成し、それをデータ出力ツールの「ファイルパス全体を変更する」オプションで設定します。
まずファイルパスを作りましょう。フォーミュラツールを使います。
計算式は以下のとおりです。
"集計結果_"+[担当]+".xlsx|||シート1"
シート名やファイル名は自由に変えられます。ただ、ファイル名のあとに「|」(パイプ)を3つ入れてからシート名を記載するようにします。
ファイル名の部分は、今回はワークフローのあるフォルダ直下に出力するような設定としています。それ以外のフォルダに出力する場合は、たとえば、Cドライブ直下のtempフォルダに出力するような場合は、「c:\temp\集計結果_」などとします。
次に、データ出力ツールの設定です。
ポイントは、「フィールドからファイル/テーブル名を取得する」の詳細設定部分です。
まず、「ファイルパス全体を変更する」を使います。ファイル名またはファイル名の一部を含むフィールドのところは、今回作ったファイルのパスを格納しているフィールド「FilePath」となります。また、「出力でフィールドを保持する」はチェックを外します。これにより、FilePathは出力ファイル内には書き込まれなくなります(ここはポイントです)。
ワークフローとしては、以下のような形となります。
これで出力すると、
となり、無事に別々のブックの「シート1」に保存されています。
サンプルワークフローダウンロード
次回
一旦ファイル入出力から離れ、次回はクロスタブのTipsです。
コメント