はじめに
この投稿は、RPAツールのUiPathで、Excelのシートをクリアする方法についての投稿です。
「Excel操作を.NETのコードでやってみよう」シリーズです。他の投稿はこちら。
シートの内容を全消去したい時がある
Excelの操作をしていると、シートの内容を全部消してやり直すことがあります。
手で操作する場合は、以下のような操作です。
これをUiPathでやろうとすると、以下のように「クリック」と「ホットキーを押下」で実施するのが多いと思います。
ですが、他にも実施する方法があります。
No | 方法 | コメント |
---|---|---|
1 | Click&SendHotkey送信で操作をする | 王道だが「Hotkey送信」は気が引ける |
2 | 空行を大量に入れたDataTableで範囲を書き込み | DataTableの容易が面倒 |
3 | シートを削除して再追加する | Sheet1しか無いときはシート名変更も必要 |
4 | InvokeVBAで実行する | VBAセキュリティ設定が必要 |
5 | InvokeCodeで実行する | 情報が少ない |
6 | カスタムアクティビティで実行する | カスタムアクティビティの追加が必要 |
本当は「UiPath標準アクティビティ」で「シートクリア」があれば良いのですが、ありません。
5のInvokeCodeで実行できれば良いのですが、なぜか情報が少ないです。(VBAのコードはたくさんあるのに)
多分、そんなに難しくないので、自分で書いてみます。
.NETコードで、Excelシートの内容をクリアする
Vb.NETで、指定のエクセルシートをクリアするコードです。
※ 移植しやすいように、Actionで匿名関数にしています。
※ 値だけでなく書式もクリア、フィルタもクリア、オートシェイプも全削除 をしています。
Dim ClearSheet As Action(Of String, String, String, String) =
Sub(bookPath As String, sheetName As String, clearFrom As String, clearTo As String)
Dim ap As New Microsoft.Office.Interop.Excel.Application
Dim wb As Microsoft.Office.Interop.Excel.Workbook
Dim ws As Microsoft.Office.Interop.Excel.Worksheet
Dim sp As Microsoft.Office.Interop.Excel.Shape
Try
'// Excelブックを開く
wb = ap.Workbooks.Open(IO.path.GetFullPath(bookPath))
'// シートループ
For idx As Integer = 1 To wb.Sheets.Count
'// シート名一致判定
ws = CType(wb.Sheets(idx), Microsoft.Office.Interop.Excel.Worksheet)
If ws.Name = sheetName Then
'// フィルタークリア
ws.AutoFilterMode = False
'// セルの値書式クリア
ws.Range(clearFrom, clearTo).Clear
'// オートシェイプ削除
For sidx As Integer = 0 To ws.Shapes.Count -1
sp = CType(ws.Shapes(sidx), Microsoft.Office.Interop.Excel.Shape)
sp.Delete
Next
'// A1選択(カーソル位置初期化)
ws.Range("A1").Select
End If
Next
'// 保存して閉じる
wb.Save
wb.Close
Catch ex As Exception
Console.writeLine(ex.ToString)
Throw(ex)
Finally
'// エクセル終了
If Not(wb Is Nothing) Then wb = Nothing
ap = Nothing
End Try
End Sub
Call ClearSheet("C:\test\Book3.xlsx", "Sheet1", "A2", "E9999")
終わりに
InvokeCodeで実施すると、デザイン変更や実行中のマウス操作でエラーになることがありません。
シートをクリアしたい場合に、引き出しの一つとして参考になれば幸いです。
最後までお読みいただき、ありがとうございました。