4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【第5回】HeartCore RoboでExcelを操作してみよう - 既存Excelファイルの操作方法

Last updated at Posted at 2018-08-13

#はじめに
前回(https://qiita.com/Go_Miyake/items/01203cc40035cae5453e )までは、HeartCore RoboでExcelを扱うメリットと、Excelコマンドを利用して新規Excelファイルを作成するロボットを作成しました。

今回は既存のExcelファイルを操作するロボットについて記載します。

#HeartCore Roboで既存のExcelファイルを操作してみる
今回は、前回で作成されたExcelファイルを参照、既存のシート上セルの値を取得してから、新しいシートに転記します。

事前準備

前回HeartCore Roboで作成されたExcelシート内のセルを3行*5列として各セルの値を修正して保存します。保存後にExcelは閉じます。

image.png

##既存Excelファイルを参照する

  1. 新規スクリプトアイコンをクリック
    image.png

  2. 任意のスクリプト名を指定(デフォルトスクリプト名でも可)
    image.png

  3. スクリプト空白部分を右クリック > コマンドを作成 > Click -File > Excel > Excel open
    image.png

4. プロパティ画面のファイルを選択ボタン(...)をクリック
image.png

5. 上記「HeartCore Roboで新規Excelファイルを作成してみる」 ステップ3.にて指定した「作成するExcelファイル」ディレクトリ内のExcelファイルを選択 > 開くを選択
image.png

6. 参照先Excelのパスが記載されたのを確認 > 「パスを呼び出しスクリプト」チェックを選択 > OKをクリック
image.png

Excel Openプロパティ > 「Excelファイル出力」にチェック> 任意のディレクトリ+Excelファイル名(.xlsか.xlsx)指定を行うことで、「名前を付けて保存」と同等の操作が可能になります。

7. スクリプト画面でExcel openコマンドが作成されていることを確認
image.png

Excel openコマンドで既存のExcelファイルを指定すると、該当のExcelに対して様々な操作が可能になります。

参照先のExcelファイルに新規シートを追加する

8. Excel openコマンドの直下の空白行を右クリック > コマンドを作成 > Click -File > Excel > Excel create を選択
image.png

9. プロパティ画面 > 「シートの作成が呼び出されました」にチェック > テキストボックスに作成するシート名を入力(例:”さらに新しいシート”) > OKボタンをクリック
image.png

10. スクリプト画面でExcel createコマンドが作成されていることを確認
image.png

Excel createコマンドではファイル名を指定せずに、シート名のみ指定することで、Excel openで指定したExcelファイルに新規のシートが追加することが可能です。

参照先のExcelファイル内既存シートの値を取得する

11. Excel createコマンドの直下の空白行を右クリック > コマンドを作成 > Click -File > Excel > Excel select を選択
image.png

12. プロパティ画面 > 「シートの名前または番号」にチェック > …ボタンをクリック
image.png

13. 上記 Excel openコマンドで指定した既存Excelファイル内の値(シート名及びセルの内容)が参照出来る(=HeartCore Roboが値を取得出来る状態)状態であることを確認 > シートを選択をクリック
image.png

14. シート名が選択された事を確認 > OKをクリック
image.png

プロパティ画面でシート名を直入力することも可能

15. スクリプト画面でExcel selectコマンドが作成されていることを確認
image.png

この時点でのコメント付きコード:

// エクセルファイルを開く
Excel "open" file="..\Excel\出力.xlsx"

// 新規シートの追加
Excel "create" sheet="さらに新しいシート"

// 既存シートの選択
Excel "select" sheet="新しいシート"

Report "results.xml"

指定したシート内の行数を取得する

Excel openで指定したシート内の行数が自動取得されて格納されているシステム変数を使用します。
{_EXCEL_SHEET__ROWS}

16. 空白行でシート内の行数を格納する数値型ユーザー変数(ここでは変数名"RowCount")を宣言(キーボードで直接入力)

Eval RowCount={_EXCEL_SHEET__ROWS}

image.png

文字型変数Varで宣言しても値が数値の場合には四則演算が可能になるため、Varで宣言した場合でも同じ結果が得られます

Var RowCount={_EXCEL_SHEET__ROWS}

17. 変数宣言の直下行 > 右クリック > コードテンプレート > For文 > fi-1からNまで繰り返すを選択
image.png

18. 追加されたFor文コマンドのカウンタ部分を2箇所変更

for (i=0; {i}<100; i={i}+1) {

for (i=1; {i}<{RowCount}+1; i={i}+1) {
image.png

カウンタ変数{i}とExcel行数変数{RowCount}の条件が”<”(未満)のため+1を追加する事で最終行まで処理するように調整しています。

19. 上記For文の中にもう1つのFor文を、処理を行うカラム分(5列)を処理をさせるようコードを入れ子として追加 > カウンタ部分を2箇所変更(上記ステップ17.と18.を繰り返し)

for (j=1; {j}<6; j={j}+1) {
}

image.png

セルを指定してセル内の値を取得する

Excel selectで指定したシートとの指定したセル内の値が格納されているシステム変数を使用します。
変数名:{_EXCEL_CELL__VALUE}

20. 空白部分を右クリック > コマンドを作成 > Click -File > Excel > Excel select を選択
image.png

21. プロパティ(Excel create)シート名または番号にチェック > …ボタンをクリックしてシートを選択 > Cell at にチェック(列と行の値はそれぞれデフォルト値”1”のまま) > [OK]ボタンをクリック
image.png

※ 上記の画面で”Cell参照(A1,C5..)”を選択した場合にはセル形式の選択が"A1”や"C5”での指定になります
image.png

22. スクリプト画面でExcel selectコマンドが作成されていることを確認
image.png

23. スクリプトの「column」と「row」部分をforコマンドループカウンタ変数(”{j}”と”{i}”)に書き換え

24. セル値を格納する変数(ここでは変数名”CellValue”)を宣言してセル値が格納されているシステム変数{_EXCEL_CELL_VALUE}を代入
image.png

取得したセルの値を別のシートに転記する

25. For文内の空白部分を右クリック > コマンドを作成 > Click -File > Excel > Excel set を選択
image.png

26. プロパティ(Excel set)画面のセルの値を設定にチェック > テキストボックスに変数(上記で宣言した{CellValue})を入力 > 新規に追加したシート名を入力(ここでは上記で指定した”さらに新しいシート“) > Cell at にチェック(列と行の値はデフォルトのまま) > OKボタンをクリック
image.png

27. スクリプト画面でExcel setコマンドが作成されていることを確認
image.png

28. スクリプトの「column」と「row」部分をforコマンドループカウンタ変数(”{j}”と”{i}”)に書き換え
image.png

29. 「実行」アイコンをクリック
image.png

30. 実行完了後にExcelフォルダ内のExcelファイルを開いて、新たにシートが追加されて元のセル内容がコピーされている事を確認

実行前
image.png

実行後
image.png

(留意点)再度スクリプトを実行する場合には、シート名が重複することになるので、追加されたシートは削除の上Excelファイルを保存してから実行してください。

以下本記事のコメント付きのコード:

// エクセルファイルを開く
Excel "open" file="..\Excel\出力.xlsx"

// シートの追加
Excel "create" sheet="さらに新しいシート"

// 既存シートの選択
Excel "select" sheet="新しいシート"

// 既存シート内の行数を取得
Eval RowCount={_EXCEL_SHEET_ROWS}

// 行数(RowCount)分 処理をおこなう
for (i=1; {i}<{RowCount}+1; i={i}+1) {
    
    // 列数(カラム)分 処理をおこなう
    for (j=1; {j}<6; j={j}+1) {
        
        //セルの内容を取得
        Excel "select" column="{j}" sheet="新しいシート" row="{i}"
        Var CellValue="{_EXCEL_CELL_VALUE}"
        
        // データを設定
        Excel "set" column="{j}" sheet="さらに新しいシート" row="{i}" value="{CellValue}"
    }
}

Report "results.xml"

#まとめ
既存のExcelファイルからセルの値を取得するには

{_EXCEL_SHEET__ROWS} 

でシート内の行数分をループ実行、セルの行列を指定した上で

{_EXCEL_CELL__VALUE}

でセルの値を取得します。

次回について

次回はHeartCore Robo上でOCRを実行する方法について記載します。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?