【第4回】HeartCore RoboでExcelを操作してみよう（新規Excelファイルの作成方法）

#はじめに

前回（https://qiita.com/Go_Miyake/items/b528ba694c6e26f4fac9 )までは、画面に表示させた対象物を認識するロボットを作成しました。

今回はHeartCore RoboからExcelファイルを新規作成するロボットについて記載します。また併せてFor文（ループ文）の使い方もカバーします。

今回は結果ファイル確認のため、ExcelがインストールされたPCで作業を行いますが、**ロボットを開発・実行する端末にExcelがインストールされている必要はありません**

# HeartCore RoboでExcelを扱う利点

- Apache POI（Java）を利用しているため実際のファイルをバックグラウンドで立ち上げた（画面上に出ない）状態で操作できます。
- 上記仕様のため、ExcelがインストールされていないPCでもファイルの操作が可能です
- Excel立ち上げ操作の時間が無いため、早い実行時間で操作が完了します。

(参考)
Apache POI：
https://ja.wikipedia.org/wiki/Apache_POI

*もちろんExcelをデスクトップ上に明示的に起動させてから、Excel固有の機能を使うロボットの構築も可能です*

# HeartCore Roboから操作出来るExcelについて

現バージョン（4.4.1）HeartCore RoboからExcelに対しは以下の操作が可能です。

- Open（ファイルを開く）
- Create（新規ファイルやシートを作成する）
- Select（セルを選択し内容を取得する）
- Find（セルの内容を検索する）
- Set（セルの内容を書き込む）
- Close（ファイルを閉じる）

本記事では
Create（新規ファイルやシートを作成） > Set（セルへ内容を書き込み）の手順を記載します。その他の操作については次回記事で記載します。

## 事前準備
HeartCore Roboプロジェクトフォルダの直下に手動で“Excel”フォルダを作成しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/5ff659a7-189d-6263-251b-c21bf3aa3768.png)


# HeartCore Roboで新規Excelファイルを作成してみる

今回は新しいExcelファイルを作成、新しいシートに対して3行x3列のセルに値を入力させるロボットを作成します。

1.　スクリプト画面で Report “results.xml” とある行の冒頭でEnterを押して空白行を追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/5f5314ca-a913-9a5f-7d3c-d94b87f3d2b0.png)

2.　冒頭の空白行で右クリック(または冒頭の空白行の＋をクリック) > コマンド作成 > Click-File > Excel > Excel createを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/e36cee76-b0dc-f2c1-54c0-6d2846d41140.png)
 
3.　画面中央にプロパティ画面が表示されるので、「作成するExcelファイル」チェックを確認しファイル名を入力(ファイル名には拡張子.xlsもしく.xlsxはまで入力) > 出力先は右の...ボタンをクリックして出力先フォルダを指定(プロジェクトフォルダ直下に自分で作成した”Excel"フォルダを指定)
4.　ファイルの作成時にシート名も指定する場合は「シートの作成が呼び出されました」チェックを確認しシート名を入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/8dcbfcf5-1275-4cfd-7250-c40432fb195b.png)

*「パスを呼び出しスクリプトの相対にする」にチェックを入れると、現在のプロジェクト内の「スクリプトフォルダ」からの相対的な出力先ディレクトリへのパスが、Excelコマンドで指定されます。チェックを外すと絶対パスで出力先ディレクトリで指定されます。*

5.　Excel "create"..コマンドが作成された事を確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/0592fccf-1bf0-5ef9-0d16-32b41c1900a1.png)

*上記で「パスを呼び出しスクリプトの相対にする」にチェックをいれたので、現在スクリプトが格納されているフォルダ(tprフォルダ)から１階層上がって(..¥)から出力先のフォルダ(Excelフォルダ)を指定しています*
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/039dc4b7-e09f-17ff-57e3-aa8a32c5a503.png)

6.　Excel "create"..コマンドの直下の空白行で「右クリック > コードテンプレート > For文 > fi-1からNまで繰り返す」を選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/55c474ff-8b1d-c472-74b7-26b69aad1e0b.png)

7.　For文が追加、（）内にハイライトされた100（For文のカウンタ上限値）の部分を4に変更、併せてi=0（カウンタ開始値）をi=1に変更
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/c2770543-dc5c-beab-e729-fab7b5406148.png)
↓
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/d669d5bb-e7ff-708a-db40-69a088c64792.png)

*1. カウンタの値をExcelの行列番号として使用するため0（ゼロ）から1に変更しています*
*2. for文のカウンタ条件が"<"(未満)のため上限を4としています*

8.　上記For文の中にもう1つのFor文を入れ子として追加（上記ステップ6.と7.を繰り返します）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/102fd04c-e860-b4a9-245b-a846464496c2.png)


*テンプレートから作成したFor文内のカウンタ変数(この回のサンプル：{i}, {j})は自動で変数名が割り当てられます。For文内のカウンタ変数は明示的に宣言する必要はありません*

9.　2番めのFor文の中の空白行で「コマンドを作成 > Click-File > Excel > Excel set」を選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/a05fc309-12a4-8bfc-0e3e-a0ebe5e14649.png)

10.　プロパティ画面上の対象セルのタイプ値のチェックボックス2つにチェック > セルのタイプを設定にはStringを指定 > セルの値を設定には1を指定　>　Cell atにチェックを入れて値は変えず　>　OKボタンをクリックしてプロパティを閉じる
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/66dd3892-08ff-bd7b-a5de-aa038db96fc9.png)

*「セルのタイプを設定」では対象セルの書式・表示設定を指定できます（デフォルトはSTRING）。指定タイプについてはApache POIのCell Typeを参照*
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/0dc99082-e181-5899-8f06-05bed298e30c.png)

https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellType.html

12.　スクリプト画面でExcel setコマンド作成されていることを確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/202860bb-91de-4a4a-c5c8-bd5b99e0c301.png)

13.　スクリプトの定数部分(ダブルクオーテーションで囲んだカラムと行数部分)をFor文で宣言したカウンタ用変数に書き換え
> Excel "set" column="1" row="1" type="STRING" value="1"

↓

> Excel "set" column={i} row={j} type="STRING" value="1"

![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/4bf72cec-846e-5565-449f-7c1d7e961da7.png)

14.　HeartCore Robo画面上部の「実行」アイコンをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/d37c1a61-04e1-6c34-7542-d0745399bc36.png)

15.　実行後、上記ステップ3.で指定した出力先フォルダにExcelが出力されている事を確認　> Excelファイルを開く > 3x3のセルに”１”が出力されている事を確認　> シート名が上記ステップ３．で指定したシート名（”新しいシート”）であることを確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/254242/58002e1c-fceb-f287-510d-538933539862.png)

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

```javascript

//Excelファイルを指定したディレクトリに新規作成する
Excel "create" file="..\Excel\出力.xlsx" sheet="Sheet1"

//シート3×3分に繰り返し入力の設定
for (i=1; {i}<4; i={i}+1) {
    for (j=1; {j}<4; j={j}+1) {
        
        //Excelの列I,行jのシートに「1」を入力
        Excel "set" column={i} row={j} type="STRING" value="1"
       
    }
}
//レポートを出力
Report "results.xml"
```

*留意点：
指定したディレクトリに同じ名前のExcelファイルがある場合には実行時エラーにはならず自動で上書き保存されます。*

# まとめ
Excelファイルを操作する際はHeartCore Roboで事前に準備されているコマンドを利用します。殆どの場合For文を使用してExcelシート内の冒頭行（1行目がフッター行の場合には2行目）から末尾行まで処理を行うことになります。

# 次回について
次回は既存Excelファイルの操作方法について記載します。例えば会社内のファイルサーバーに保存されているExcelファイルを参照の上、シートの追加・セル値の変更・行の追加や、セルの値を読み込んでから別システムへの入力まで行うことが出来る内容になります。