【SetROBO】Excelの操作

# はじめに
こんにちは。社内PCのキッティングを担当している@Cheeeeeseです。
今回はExcelの操作をまとめました。

V2.0から操作できるようになったExcelですが、CSV操作みたいに専用の関数があるわけではないので、基本的には手動でやる操作をコード化する必要がありました。


# 環境
- Windows 11 Pro 22H2 (64bit)
- SetROBO for Kitting V2.0
- Excel 2019

# Excel操作方法
### Excelの起動・新規Book作成
Excelは「EXCEL.exe」で起動ができます。
既にあるExcelファイルを開く場合は、そのパスで問題ないです。
```ruby:SetROBO
//Excelを起動し、新規Bookを開く
PlayLib.ProcessStart("EXCEL.exe");
PlayLib.Sleep(1000);
PlayLib.Window("Excel").UIListItem("空白のブック").Click();
```


### セルを選択
セルを操作するには「UIDataItem」を使用します。
セルの選択は記録が出来ました。
```ruby:SetROBO
// 単体セルを選択(A1)
PlayLib.Window("Book1 - Excel").UIDataItem("A1").Click();

// 列を選択(B)
PlayLib.Window("Book1 - Excel").UIDataItem("B").Click();

// 行を選択(2)
PlayLib.Window("Book1 - Excel").UIDataItem("2").Click();

// 複数セルを選択(A2からB4)
PlayLib.Window("Book1 - Excel").UIDataItem("A2").Drag(10,10);
PlayLib.Window("Book1 - Excel").UIDataItem("B4").Drop(10,10);
```

### セルに入力(テキスト)
入力は記録が出来ませんでした。
あと、一度入力したいセルを選択した後にInputしないと、別のところに入力されてしまうので、Inputの前に必ずClickを入れないといけないです。
```ruby:SetROBO
// A1に入力
PlayLib.Window("Book1 - Excel").UIDataItem("A1").Click();
PlayLib.Window("Book1 - Excel").UIDataItem("A1").Input("テスト");
```

### セルに入力(数式)
数式の入力も出来ました。
入力の後に必ず「Enter」の入力が必要です。
```ruby:SetROBO
// A2に今日の日付を入力
PlayLib.Window("Book1 - Excel").UIDataItem("A2").Click();
PlayLib.Window("Book1 - Excel").UIDataItem("A2").Input("=TODAY(){Enter}");
```

### 複数行に入力
複数行に入力する場合は、ループ処理でできました。
上記の通り、Inputの前にClickは必須です。
```ruby:SetROBO
// A1に入力
for(int i = 1; i <= 5; i++)
{
    PlayLib.Window("Book1 - Excel").UIDataItem("A" + i).Click();
    PlayLib.Window("Book1 - Excel").UIDataItem("A" + i).Input("A" + i + "に入力");
}
```

### セルのコピー・切り取り・貼り付け
コピー、切り取り、貼り付けはキー操作で出来ます。

```ruby:SetROBO
/**** A1をコピーしC4に貼り付け ****/
// A1を「Control + c」でコピー
PlayLib.Window("Book1 - Excel").UIDataItem("A1").Click();
PlayLib.Window("Book1 - Excel").UIDataItem("A1").Input("{Ctrl_Down}c{Ctrl_Up}");
// C4に「Control + v」で貼り付け
PlayLib.Window("Book1 - Excel").UIDataItem("C4").Click();
PlayLib.Window("Book1 - Excel").UIDataItem("C4").Input("{Ctrl_Down}v{Ctrl_Up}");

/**** A2を切り取り、C5に貼り付け ****/
// B1を「Control + x」で切り取り
PlayLib.Window("Book1 - Excel").UIDataItem("B1").Click();
PlayLib.Window("Book1 - Excel").UIDataItem("B1").Input("{Ctrl_Down}x{Ctrl_Up}");
// C5に「Control + v」で貼り付け
PlayLib.Window("Book1 - Excel").UIDataItem("C5").Click();
PlayLib.Window("Book1 - Excel").UIDataItem("C5").Input("{Ctrl_Down}v{Ctrl_Up}");
```

### シートの追加
```ruby:SetROBO
// 新しいシートを追加
PlayLib.Window("Book1 - Excel").UIButton("シートの追加").Click();
```

### 別のシートを選択
```ruby:SetROBO
// Sheet2を選択
PlayLib.Window("Book1 - Excel").UITabItem("Sheet2").Click();
```

### シート名を変更
```ruby:SetROBO
// シート名を「Sheet2」から「シートA」に変更
PlayLib.Window("Book1 - Excel").UITabItem("Sheet2").DblClick();
PlayLib.Window("Book1 - Excel").Input("シートA");
```

### 名前をつけて保存
```ruby:SetROBO
// 「名前を付けて保存」
PlayLib.Window("Book1 - Excel").UIButton("ファイル タブ").Click();
PlayLib.Sleep(1000);
PlayLib.Window("Book1 - Excel").UIListItem("名前を付けて保存").Click();
PlayLib.Sleep(1000);
PlayLib.Window("Book1 - Excel").UIButton("参照").Click();
PlayLib.Sleep(1000);
PlayLib.Window("名前を付けて保存").UIEdit("ファイル名:").Input(@"C:\SetROBO\SR_Excel.xlsx");
PlayLib.Sleep(1000);
PlayLib.Window("名前を付けて保存").UIButton("保存(S)").Click();
```

# 最後に
基本的に人が行う操作をコード化することは出来ました。
ただ、データをデータテーブルで取得したり、リストで取得したりはできないので、
CSVファイルを使用するかExcelを使用するかは考えなきゃいけなさそうです。