A2019では、「Excelの高度な操作」パッケージが追加になりました。これにより、今まで以上にAutomation Anywhereを使ってExcelの操作を行う機会が増えるのではないかと思います。Excelの操作を行うときのセルの位置やセル範囲を指定する方法は、VBAでコーディングするのであればR1C1参照形式が使えますが、Automation AnywhereではA1形式です。このため、Automation Anywhereを使ってExcelの操作を行う場合に、列番号を列文字に変換する処理が欲しくなることがよくあります。ここでは、Excelの列番号を列文字に変換する処理をPythonスクリプトで実装する例を紹介します。
ここで紹介しているBotのデモ動画は こちら で参照できます。
Excelの列番号を列文字に変換する
アクションリストの全体概要
下記がアクションリストの全体概要です。
Pythonスクリプトをインラインで定義
「Python」パッケージの「Open」アクション
【詳細設定】
[Manual input]を選択して、[Enter script here]に関数「ExcelColNoToColString」を定義しています。筆者の環境にはPython2.7をインストールしているので、[Python runtime version]は「2」を選択しました。
【Pythonスクリプト詳細】
Automation Anywhereでは、数字型の変数をfloat型で処理しているようで、Python側にint型で数値を渡すことができませんでした。そこで関数「ExcelColNoToColString」は、引数「fcol」で受け取ったfloat型の列番号をint型に変換してから、以降の処理を行っています。
# -*- coding: utf-8 -*- def ExcelColNoToColString(fcol): icol = int(fcol) #引数の値をint型に変換する。 scol = "" wk = icol - 1 #被除数=除数のときに桁の繰り上がりが発生しないように1マイナスする。 while wk >= 0: amari = wk % 26 #余りを求める。 shou = (wk - amari) / 26 #商を求める。 scol = chr(amari + 65) + scol #余りの数値「0-25」を文字「A-Z」に変換して上位桁に付加する。 wk = shou - 1 #被除数=除数のときに桁の繰り上がりが発生しないように1マイナスする。 return scol
Pythonスクリプトの関数実行
「Python」パッケージの「Execution function」アクション
【詳細設定】
[Enter name of function to be executed]に関数名「ExcelColNoToColString」、[Arguments to the function]に数字型変数「N_Col」を設定しています。
【余談】
このTask Botを作った後で気付いて、Pythonの関数を呼び出すときの引数に、数字型の変数を渡すのではなくて文字列型の変数を渡した方が、スマートな処理になったんじゃないかな?、と思ったのですが、画像を撮り直すのも手間なのでそのまま掲載しました。(^^;)