デスクワークを超絶快適にするおすすめギアたち

【Power Automate for desktop】Python スクリプトの実行

じょじお

この記事はPower Automate for desktopの「Pythonスクリプトの実行」アクションを検証してみた内容をまとめたものです。

目次

Pythonスクリプトの実行アクションについて

「Pythonスクリプトの実行アクション」ではPower Automate for desktopにPythonのスクリプトを記述することで実行することができます。

採用されているPythonのバージョンは、現在の主流である3.0系ではなく、2. 0系になります。PandasやNumpyといったPythonを代表するようなモジュールは標準では使用することができません。

Python側にPADから値を渡すとテキストで認識され、Python側からPADに値を戻す時もPADはテキストとして認識されます。

出力する変数

%PythonScriptOutput%

Pythonスクリプトの出力が入ります。

%ScriptError%

Pythonスクリプト実行中のエラーが入ります。

Pythonへの値の受け渡し方法

Pythonスクリプトの実行アクションに%Var%のように記述することでPADの変数を使用することができます。

  • PythonからPADの変数にアクセスする
    • "%PADで定義した変数名%"と記述して呼び出す。
  • PythonからPADに渡す
    • print Pythonの変数名
STEP
「変数の設定」アクション

▲宛先にpower automateという文字列を渡してみます。

STEP
「Pythonスクリプトの実行」アクション
print "%NewVar%"

▲Pythonスクリプトの実行アクションに上記を記入します。

STEP
フローを実行します。

▲PADでPythonからの出力を受け取ることができました。

Pythonにリストを渡す(to Python from PAD)

そのまま渡してはダメ

じょじお

PADで作成した%List%を受け渡ししてみます。

▲テスト用に[1,2,3,4,5]という要素が5つ入ったリストを作成しました。

print "%List%"

▲「Pythonスクリプトの実行」アクションに上記のように記述します。

▲フローを実行して%PythonScriptOutput%変数を確認してみます。図をご覧いただくとわかるように、そのまま渡すと、リストではなく改行が含まれたひとつの文字列として認識されるせいか最初の要素しか認識してもらえないようです。

文字列リストの場合

str_list = ("""%List%""".splitlines())
print str_list

splitlines()で改行を使ってスプリットするとPython側でリストとして受け取ることができます。['1', '2', '3', '4', '5']

数値リストの場合

文字列として受け取っちゃうので、数値リストの場合はPython側で数値に戻します。

str_list = ("""%List%""".splitlines())
int_list = [int(i) for i in str_list]
print int_list

Pythonからリストを受け取る(to PAD from Python)

pythonでリストをprintしてpadに返してもPAD側でリストとして認識してくれません。PADは”[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]”という一つの文字列として認識します。じゃぁPAD側でカンマで分割してみようと思っても、リストの閉じカッコである[]の部分も文字列として認識されているので、最初に[]を削除してから分割する必要があります。

それかPython側でリストをカンマでjoinして一つの文字列にし、それをPADに返却、PADでカンマで分割するという方法もあります。

STEP
「Pythonスクリプトの実行」アクションの設定
list = ("""%List%""".splitlines())
my_str_list = ["moji" + i for i in list]
my_str_list = ",".join(my_str_list)
print my_str_list

",".join(my_str_list)でリストを一つの文字列にします。

STEP
「テキストの分割」アクションの設定

▲カンマで分割します。

STEP
フローを実行します。

▲フローを実行しました。リストにすることができました。

Pythonでいろいろ計算してみる

リストの合計値、最小値、最大値、平均値を求める。

STEP
リストを用意します。

▲テスト用に[1,2,3,4,5]という要素が5つ入ったリストを作成しました。

STEP
「Pythonスクリプトの実行」アクションの設定をします。
str_list = ("""%List%""".splitlines())
int_list = [int(i) for i in str_list]

print "受け取ったリストは{}です。".format(int_list)
print "最大値は{}です。".format(max(int_list))
print "最小値は{}です。".format(min(int_list))
print "合計値は{}です。".format(sum(int_list))
print "平均値は{}です。".format(sum(int_list) / len(int_list))

▲上記のように記述しました。

STEP
フローを実行します。

Pythonのオンライン講座

Googleドライブ上のExcelファイルをPythonで操作する。

じょじお

デイトラのPythonオンライン講座がコスパ良かったです。下記の記事に受講レビューを書きましたのでよかったら見てください。

先着1000名まで1万円引きキャンペーン実施中!(8月31日まで)

\買い切りだからコスパ最高・永久にユーザーコミュニティ参加可能/

Robinソースコード

SET List TO [1, 2, 3, 4, 5]
DISABLE Scripting.RunPythonScript PythonCode: $'''print %List%''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
DISABLE Scripting.RunPythonScript PythonCode: $'''str_list = (\"\"\"%List%\"\"\".splitlines())
print str_list''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
DISABLE Scripting.RunPythonScript PythonCode: $'''list = (\"\"\"%List%\"\"\".splitlines())
int_list = [int(i) * 10 for i in list]
print int_list
''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
DISABLE Scripting.RunPythonScript PythonCode: $'''list = (\"\"\"%List%\"\"\".splitlines())
my_str_list = [\"moji\" + i for i in list]
my_str_list = \",\".join(my_str_list)
print my_str_list
''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
DISABLE Scripting.RunPythonScript PythonCode: $'''print \"%NewVar%\"''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
DISABLE Scripting.RunPythonScript PythonCode: $'''str_list = [\'%List%\']
print str_list''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
Scripting.RunPythonScript PythonCode: $'''str_list = (\"\"\"%List%\"\"\".splitlines())
int_list = [int(i) for i in str_list]
print \"受け取ったリストは{}です。\".format(int_list)
print \"最大値は{}です。\".format(max(int_list))
print \"最小値は{}です。\".format(min(int_list))
print \"合計値は{}です。\".format(sum(int_list))
print \"平均値は{}です。\".format(sum(int_list) / len(int_list))
''' ScriptOutput=> PythonScriptOutput ScriptError=> ScriptError
DISABLE Text.SplitText.SplitWithDelimiter Text: PythonScriptOutput CustomDelimiter: $''',''' IsRegEx: False Result=> TextList

▲フローデザイナーに張り付けることでここで作成したフローを再現することができます。

まとめ

じょじお

Power Automate for desktopにはリストの合計値、最小値、最大値、平均値を求めるような関数がないと思われるので、そういったものを利用するときはPythonスクリプトの実行アクションは使えるかなと思いました。

ぽこがみさま

このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!

Power Automate学習教材

Power AutomateをKindleで学びたい方はコチラ

▲Kindleと紙媒体両方提供されています。デスクトップフロー、クラウドフロー両方の解説がある書籍です。解説の割合としてはデスクトップフロー7割・クラウドフロー3割程度の比率となっています。両者の概要をざっくり理解するのにオススメです。

Power Automate for Desktopの基本をしっかり学習するのにオススメです。この本の一番のメリットはデモWebシステム・デモ業務アプリを実際に使ってハンズオン形式で学習できる点です。本と同じシステム・アプリを使って学習できるので、本と自分の環境の違いによる「よく分からないエラー」で無駄に躓いて挫折してしまう可能性が低いです。この点でPower Automate for desktopの一冊目のテキストとしてオススメします。著者は日本屈指のRPAエンジニア集団である『ロボ研』さんです。

Power Automate クラウドフローの入門書です。初心者の方には図解も多く一番わかりやすいかと個人的に思っています。

Microsoft 365/ Power Automate / Power Platform / Google Apps Script…

Power Automateを動画で学びたい方はコチラ

▲Udemyで数少ないPower Automateクラウドフローを主題にした講座です。セール時は90%OFF(1200円~2000円弱)の価格になります頻繁にセールを実施しているので絶対にセール時に購入してくださいね。満足がいかなければ返金保証制度がありますので安心してご購入いただけます。

お役に立てたらシェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!
目次