記事公開日
最終更新日
初心者必見!Power AutomateとOfficeスクリプトでExcelの申請書チェックフローを作ってみた①

はじめに
今回は、OfficeスクリプトとPower Automateを活用して、Excelファイルの入力チェックを自動化するフローを作成してみました。
具体的には、SharePoint OnlineにアップロードしたExcelファイルに対して、
Power Automateのクラウドフローを実行することで、Officeスクリプトが実行され、Excel内のデータチェックを自動で行います。
これにより、入力ミスの検出やデータ整合性の確認が簡単にできるようになります。
本記事では、Officeスクリプトとクラウドフローの作成手順と活用方法について詳しくご紹介します。
1.Officeスクリプトとは
通常、Excelでの操作を自動化する場合は、VBAという言語で開発します。
しかし、Web版のExcelでは、このVBAを扱うことができません。
そこで、Web版のExcelを自動化する目的として登場した言語がOfficeスクリプトになります。
2.全体の流れ
全体の流れは以下になります。
① 申請書を所定のSharePoint Onlineへ配置した後、Power Automateフローを実行
② SharePoint OnlineにあるExcel申請書のOfficeスクリプトを実行
実行結果をPower Automateへ返す
③ ②でOfficeスクリプトから返ってきた結果をSharePoint Onlineフォルダへログファイルとして出力
実際に申請書の入力値チェックをするのはOfficeスクリプトで、Power Automateはその結果をログファイルとして出力するような流れです。
3.Officeスクリプトの作成
Power Automateのクラウドフローを作成する前に、
Officeスクリプトを作成していきます。
まずは申請書.xlsxを、SharePoint Onlineへアップします。
申請書.xlsxの内容は、簡単な項目を記載したテスト用のデータを入れました。
SharePoint Onlineへアップした申請書.xlsxを開き、自動化タブから「新しいスクリプト」をクリックします。
すると左側にコードエディターが出てきます。
デフォルトのスクリプトが入っていますが、こちらを書き換えていきます。
書き換えた内容は以下です。
このスクリプトは、名前であれば半角英字になっているか、
メールアドレスは@xxx.xxxのようにメールアドレス形式になっているか、などをチェックし、
チェックでエラーになったセルを黄色に塗りつぶすという処理になっています。
今回はPower AutomateからこのOfficeスクリプトを実行し、実行結果(エラー行があればその内容)をPower Automate側へ返す予定です。
そのため、入力値にエラーがあった場合はその内容をresultに入れてPower Automate側へ渡すようにしています。
function main(workbook: ExcelScript.Workbook): string { const sheet1 = workbook.getWorksheet("Sheet1"); const sheet1Values = sheet1.getUsedRange().getValues(); let result: string = ""; // 正規表現の定義 const regexpId = /^[0-9]{1,4}$/; // 1~4桁の数字にのみマッチ const regexpName = /^[a-zA-Z]+$/; // 半角英字にのみマッチ const regexpGroupName = /^[0-9a-zA-Z]*$/; // 半角英数字にのみマッチ const regexpMailAddress = /^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/; // メールアドレスの正規表現 sheet1Values.forEach((row, rowIndex) => { if (rowIndex !== 0) { // ヘッダー行をスキップ row.forEach((cell, colIndex) => { const strCell = cell.toString(); // ID列 if (colIndex === 0 && !regexpId.test(strCell)) { sheet1.getCell(rowIndex, colIndex).getFormat().getFill().setColor("FFFF00"); result += `${rowIndex}行目のIDが不正です。 [${strCell}]\r\n`; } // 名前(姓) if (colIndex === 1 && !regexpName.test(strCell)) { sheet1.getCell(rowIndex, colIndex).getFormat().getFill().setColor("FFFF00"); result += `${rowIndex}行目の名前(姓)が不正です。 [${strCell}]\r\n`; } // 名前(名) if (colIndex === 2 && !regexpName.test(strCell)) { sheet1.getCell(rowIndex, colIndex).getFormat().getFill().setColor("FFFF00"); result += `${rowIndex}行目の名前(名)が不正です。 [${strCell}]\r\n`; } // メールアドレス if (colIndex === 3 && !regexpMailAddress.test(strCell)) { sheet1.getCell(rowIndex, colIndex).getFormat().getFill().setColor("FFFF00"); result += `${rowIndex}行目のメールアドレスが不正です。 [${strCell}]\r\n`; } // 所属グループ if (colIndex === 4 && !regexpGroupName.test(strCell)) { sheet1.getCell(rowIndex, colIndex).getFormat().getFill().setColor("FFFF00"); result += `${rowIndex}行目のグループ名が不正です。 [${strCell}]\r\n`; } }); } }); return result; }
スクリプトが書けたら、スクリプト名を適宜変更し、スクリプトを保存します。
これでOfficeスクリプトの作成は完了です。
早速スクリプトを実行してみましょう。コードエディターの「実行」をクリックします。
すると、申請書の入力値チェックでエラーになった項目のセルの色が変わりました!
スクリプトはきちんと動いているみたいです。
おわりに
今回は、Power Automateで実行するためのOfficeスクリプトを作成しました。
次回は、このOfficeスクリプトをPower Automate側で実行し、その結果を出力するクラウドフローを作成する予定です!
弊社の Power Platform サポート&アプリカタログサービス では、キャンバスアプリやクラウドフローの実装に対する技術サポートから、ガバナンス管理・ガイドライン策定のご支援までを含めた、幅広いメニューをご提供しています。
また、「AIチャットボット構築サービス」をはじめとして、各AIサービスを利用したシステム導入のお手伝いをしております。それ以外でも QESでは様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
まずはお気軽にお問い合わせください。
※このブログで参照されている、Microsoft、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。