Automation Anywhere A2019 PythonスクリプトでExcelの列番号を列文字に変換する

Automation Anywhere

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の関数を呼び出すときの引数に、数字型の変数を渡すのではなくて文字列型の変数を渡した方が、スマートな処理になったんじゃないかな?、と思ったのですが、画像を撮り直すのも手間なのでそのまま掲載しました。(^^;)