5
3

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 1 year has passed since last update.

【UiPath】Excel - シートをクリアする

Last updated at Posted at 2021-03-19

はじめに

この投稿は、RPAツールのUiPathで、Excelのシートをクリアする方法についての投稿です。

「Excel操作を.NETのコードでやってみよう」シリーズです。他の投稿はこちら。


シートの内容を全消去したい時がある

Excelの操作をしていると、シートの内容を全部消してやり直すことがあります。
手で操作する場合は、以下のような操作です。
image.png

これをUiPathでやろうとすると、以下のように「クリック」と「ホットキーを押下」で実施するのが多いと思います。

image.png

ですが、他にも実施する方法があります。

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で実施すると、デザイン変更や実行中のマウス操作でエラーになることがありません。
シートをクリアしたい場合に、引き出しの一つとして参考になれば幸いです。

最後までお読みいただき、ありがとうございました。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?