Advent of Code is now back for a limited time only! Complete as many challenges as you can to earn those badges you may have missed in December. Learn more about how to participate here!

ディスカッション

答えを見つけ、質問し、Alteryx の専門知識を共有してください。
解決済み

複数シート存在するExcelファイルをシート毎に別ファイルとして保存する方法について

ヤッピー
アトム

お世話になります。

 

シート1,シート2,シート3のように、一つのブックの中に複数のシートを持つエクセルファイルを読み込み、シート毎に個別のエクセルファイルとして出力、保存するフローを作成したいと考えています。

 

また、保存時のファイル名はシート名を使用するような形にしたいと考えています。

 

シート毎の読み込みまでは実現できたのですが、その先の個別ファイルとして保存する過程(パスの指定、シート名の取得)が思うように実装できず、質問させていただきます。

3件の返信3
AkimasaKajitani
17 - Castor
17 - Castor

@ヤッピー さん

 

前提として、スキーマ(フィールド名、データ型等)は同じ、出力の際に動的にシート名、ファイル名を生成し、保存する。元のファイルのフォーマット(書式)は無視する、という前提でお答えします。

 

基本的にはデータ出力ツールの「フィールドからファイル/テーブル名を取得する」オプションを利用すると、ツール1つで複数のファイルに書き込むことができます。この際、保存するファイルのパスをうまく作ってあげればオッケーです。

 

 

image.png

 

ポイントは、ファイルパス全体を変更する、にセット。

「ファイル名またはファイル名の一部を含むフィールド」は、保存先のパスを作成したもの。
「出力でフィールドを保持する」にはチェックを入れます。

 

なお、シート名は、ファイルの読み込み時に「ファイル名をフィールドとして出力する」のオプションで「フルパス」もしくは「ファイル名のみ」を選択して下さい。

もし、保存先も入力と同じところにしたい、などの場合は「フルパス」を選択すると良いと思います。

 

image.png

 

フルパスのオプションにした時は、シート名の取得が必要になります。正規表現ツールなどを使うと便利です。

 

image.png

 

最終的には取得した情報を使ってファイルパスを作成し、保存する、ということになります。例えば以下のようにしてパスを作成できます。

 

FileAddPaths(FileGetDir([FileName]),[SheetName]+".xlsx|||Sheet1")

 

最終的なワークフローは以下のようになります。

 

image.png

 

実際にやりたいことによってもっと簡単になったり、もっと複雑にせざるをえないケースなどもありますが、おおむねこのような感じでいけると思われます。詳細はサンプルワークフローをご確認下さい。

 

 

ヤッピー
アトム

迅速にご回答いただき、ありがとうございます!

 

ご教示いただいた方法で、実装したかった機能が実現できました。

正規表現ツールの活用方法についても勉強になりました。

ありがとうございます。

 

ヤッピー
アトム

先日に引き続き恐れ入ります。

スキーマが異なる場合には、より複雑なフローの実装が必要になるでしょうか…?

トップのソリューション投稿者