Power Automate × Excel Scripts でCSVをXLSXに変換してSharePointリストに取り込む

Power AutomateにはCSVをそのまま処理するアクションがありません。CSVをXLSXのテーブル構造に変換してからSharePointリストに取り込む。Excel ScriptsとPower Automateを組み合わせることで、この流れを自動化できます。

なぜCSV→XLSX変換が必要か

Power AutomateにはCSVファイルを直接読み込んで行データを取得するアクションがありません。一方でExcelファイルのテーブルに対しては「List rows present in a table(テーブルに存在する行の一覧表示)」アクションが使えます。このアクションさえ使えるようになれば、後はCreate item(項目の作成)でSharePointリストに一行ずつ書き込むだけです。

CSVをXLSXのテーブル構造に変換することで、Power Automateの標準アクション群が使えるようになります。そのCSV→XLSX変換を担うのがExcel Scriptsです。SharePointへのデータ書き込みの基礎についてはSharePointのCRUD操作の基礎記事を先に確認しておくとスムーズです。

Excel Scriptsとは

Excel ScriptsはExcelのAutomateタブで作成・管理するTypeScriptベースのスクリプトです。Power Automateの「Run Script(スクリプトの実行)」アクションから引数を渡して実行できます。ブラウザ版ExcelのファイルFの内部でのみ動作するため、ファイル名の変更や外部ファイルへのアクセスはできません。

TypeScriptを知らなくても使えます。後述するようにChatGPTで生成・修正するサイクルを回せばゼロ知識から実用的なスクリプトが完成します。私自身もTypeScriptはほぼ書けませんが、ChatGPTとの対話だけでCSV処理スクリプトを完成させた経験があります。

フロー全体の構成とトリガーの選択

5ステップの全体像

フロー全体の処理は5つのステップで構成されます。

  1. CSVファイルを選択するトリガー(For Selected Item)
  2. CSVファイルのコンテンツを取得(Get file content・ファイルコンテンツの取得)
  3. テンプレートExcelファイルをコピーして新ファイルを生成(Create file・ファイルの作成)
  4. Run Script(スクリプトの実行)でCSVをXLSXテーブルに変換
  5. List rows present in a table → Apply to each(それぞれに適用)→ Create item(項目の作成)でSharePointに取り込み

For Selected Itemトリガーの重要な制約

For Selected Itemトリガーを使うフローには重要な制約があります。このトリガーを使うフローはデフォルト環境で作成しないと、SharePointの自動化メニューに表示されません。他の環境で作成すると一覧に出てこず動作しないため、フロー作成時に最初に環境の選択を確認してください。デフォルト環境以外で作っていてシェアポイントの自動化メニューに出てこないという場合、環境の作り直しが必要になります。最初の一手で確認しておくのが重要です。

テンプレートExcelファイルの設計思想

スクリプトをあらかじめ埋め込んだ空のXLSXをテンプレートとして用意します。フローの実行ごとにCreate file(ファイルの作成)でテンプレートをコピーして新しいExcelを生成する設計にすることで、同名ファイルの上書きや競合を防げます。

ファイル名には日時を付与してユニークにします。

// ファイル名に日時を付与する例(Create fileのNameフィールド)
concat('output_', formatDateTime(utcNow(), 'yyyyMMdd_HHmmss'), '.xlsx')

テンプレートファイルはSharePointの決まったフォルダに置いておきます。Get file content(ファイルコンテンツの取得)でコンテンツを取得してからCreate file(ファイルの作成)で出力先フォルダに複製する流れです。テンプレートを使い回すことで、スクリプトの再設定なしに何度でも実行できます。

動的ファイル名でRun Scriptが動かない問題の回避策

Run Script(スクリプトの実行)アクションでファイルを動的コンテンツで指定すると、スクリプト名やテーブルの選択肢がドロップダウンに表示されなくなります。これはPower Automateのエディターがファイル名を静的に解決できないためです。

回避手順はこうです。まず先にテンプレートファイル(静的なパスで指定)を使ってRun Scriptのパラメーターを設定します。スクリプト名・テーブル名・引数の設定が完了したら、その後でファイルの指定欄を動的コンテンツに差し替えます。設定してから差し替えるという順番を守るだけで解決します。最初から動的コンテンツで指定しようとすると設定が進まないので注意してください。

ChatGPTを活用してスクリプトを作る

TypeScript未経験でもChatGPTとの対話でスクリプトを生成・修正できます。ChatGPTに「Power Automate の Run Script で使用するExcel Scriptを書いてほしい。CSVの文字列を受け取り、データをテーブルとして挿入するスクリプト」と伝えると、そのまま使えるコードを出してくれます。

エラーが出たときはエラーメッセージをそのままChatGPTに貼り付けて修正を依頼します。コードをコピーしてExcelに貼り付けてテスト、エラーが出たら貼り付けて修正依頼、というサイクルを繰り返すだけで実用的なスクリプトが完成します。私が実際にこの方法で組んだとき、コードの中身はほとんど理解していませんでしたが3〜4回のやり取りで動くものができました。

よくあるデータの問題と対処法

カンマを含む住所データで列がずれる

CSV内に「473 Dyer Station, West Virginia」のようなカンマを含むフィールドがあると、単純な分割処理で列がずれます。フィールドをダブルクォートで囲んでいても、スクリプト側でその処理を考慮していない場合は崩れます。

ChatGPTにダブルクォート内のカンマを無視するよう修正してと伝えるだけで、対応したコードに書き直してくれます。住所や名称など文字列フィールドを含むCSVを扱うときは、最初からこの指示を加えておくといいです。

日付がシリアル番号になる

ExcelでCSVの日付を取り込むとデフォルトではシリアル番号(43061など)で保存されることがあります。Run Script(スクリプトの実行)アクションのオプションでDate/Time FormatをISO 8601に変更すると、正しい日付形式に変換できます。フローを組んだ後に日付の列が数字になっているという問題に気づくパターンが多いので、最初からDate/Timeの設定を確認する習慣をつけておくと手戻りが減ります。

SharePointリストへの一括取り込み

Run Script(スクリプトの実行)でCSVをXLSXのテーブルに変換したら、後は通常のExcelデータと同じ扱いです。List rows present in a table(テーブルに存在する行の一覧表示)でExcelの全行を取得し、Apply to each(それぞれに適用)でCreate item(項目の作成)を実行してSharePointリストに一行ずつ書き込みます。

// Apply to each(それぞれに適用)内のCreate item(項目の作成)設定イメージ
// List rows present in a tableのOutputをApply to eachに渡し
// 各フィールドをitems()?['列名']で参照する

Title: items()?['商品名']
数量: items()?['数量']
申請日: items()?['申請日']

一度XLSXテーブルにしてしまえば、通常のExcel連携と完全に同じ操作で扱えます。ExcelをPower Appsのデータソースとして使う方法についてはExcelをPower Appsのデータソースにする記事が参考になります。CSVを生成する側の実装についてはPower AppsでギャラリーのデータをCSVに出力する記事で詳しく扱っています。

Excel Scriptsが広げる可能性

これまでCSVはPower Automateで直接扱えないと答えていた場面が、この方法で扱えるに変わります。スクリプト自体はChatGPTで生成できるため、CSV処理以外にも応用できます。集計・フォーマット変換・テーブル整形など、Excelで手作業でやっていた処理を自動化する方法論として汎用的に使えます。

TypeScriptを書けなくても、エラーメッセージを貼り付けてChatGPTに修正を依頼するサイクルだけで実用的なスクリプトが完成します。今まで諦めていたファイル処理が自動化できるようになると、フロー設計の選択肢が大きく広がります。

まとめ

CSV→XLSX変換の手順は、テンプレートExcelを準備してRun Scriptで変換し、List rows present in a tableで行を取得してSharePointに取り込む流れです。For Selected Itemトリガーの環境制約と、動的ファイル名でRun Scriptのドロップダウンが表示されない問題は最初に押さえておくべきポイントです。

スクリプト開発はChatGPTを使えばTypeScript未経験でも進められます。一度この仕組みを身につけると、CSV処理だけでなくExcel自動化全般に転用できる方法論が手に入ります。楽しみながら、丁寧に組んでいきましょう。

Xでフォローしよう