【UiPath】Excel - 罫線を引く

# はじめに

この投稿は、RPAツール「UiPath」の 実装例 の記事です。

UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 29日目の投稿でもあります。

企画の内容は [**こちら**](https://note.com/shumpei_w/n/n651cbdbec4e8) 。カレンダーのURLは [**こちら**](http://u0u1.net/sUwZ) です。

https://twitter.com/ShumpeiWatanabe/status/1405168150736359427

# Excel操作を.NETのコードでやってみよう

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

https://qiita.com/miya_gis/items/e4bf3de19c8b0c4225ca

https://qiita.com/miya_gis/items/e36f7b5da5bc994a49d7

https://qiita.com/miya_gis/items/1c3bb14583110ccac14b

https://qiita.com/miya_gis/items/02230dc5774818f24e90

https://qiita.com/miya_gis/items/8341d6cc0cf0fb77ac31

https://qiita.com/miya_gis/items/b637939046034067531e

https://qiita.com/miya_gis/items/02deaf6fdb9a612c7598

https://qiita.com/miya_gis/items/119556a0d612b2aab022

# 罫線を引く方法４つ

UiPathで、Excelで罫線を引く場合、以下の方法があります。

1）標準アクティビティで引く
2）マケプレの「かんたん Excel アクティビティパック」で引く
3）VBAコードで引く
4）.NETコードで引く

# 1）標準アクティビティで引く

2021年7月現在では、残念ながら「罫線を引く」標準アクティビティはありません。
今後のリリースに期待です。


# 2）マケプレの「かんたん Excel アクティビティパック」で引く

マーケットプレイスに以下のアクティビティがあり、その中に以下の罫線を引くアクティビティが用意されています

- 範囲の「上罫線」を設定
- 範囲の「下罫線」を設定
- 範囲の「左罫線」を設定
- 範囲の「右罫線」を設定
- 範囲の「右上がり斜め罫線」を設定
- 範囲の「右下がり斜め罫線を設定
- 範囲の「外枠罫線」を設定
- 範囲の「格子罫線」を設定
- 範囲の「太枠中格子罫線」を設定
- 範囲の「枠なし罫線」を設定

:::note warn
内部のコードは「VBAコードの実行」により機能を実現しているため、Excelオプションのセキュリティセンターで、セキュリティ設定「「VBAプロジェクト オブジェクト モデルへのアクセスを信頼する」をONに変更」が必要となります。
:::

https://marketplace.uipath.com/ja/listings/easy-excel-activity-pack

上記で要件を満たせないものは、以下で紹介の3，4の方法で実装する必要があります。


# 3）VBAコードで引く

以下の記事に紹介がありますので、今回は説明を割愛します。

https://qiita.com/forseti/items/9cb85dd0576df017db86

# 4）.NETコードで引く

InvokeCodeでエクセルを操作します。以下のコードは、範囲内のセル全てで、上下左右に罫線を引くコードです。
アレンジすれば、他の引き方も出来ます。

``` VB
'// 引数）filePath：エクセルのファイルパス
'// 引数）sheetName：エクセルの対象シート名
'// 引数）range：罫線を引きたい範囲の指定（例："A1:B2"）
'// 引数）lineStyle：罫線のスタイル
'// 引数）borderWeight：罫線の太さ

Dim ap As New Microsoft.Office.Interop.Excel.Application
Dim wb As Microsoft.Office.Interop.Excel.Workbook = ap.Workbooks.Open(filePath)
Try
	'// シートループ
	For Each ws As Microsoft.Office.Interop.Excel.Worksheet In wb.Sheets
		If ws.Name.ToUpper() = sheetName.ToUpper() Then
			Dim bdBtm, bdTop, bdLef, bdRig As Microsoft.Office.Interop.Excel.border
			Dim rg As Microsoft.Office.Interop.Excel.Range = ws.Range(range)
			For Each rgcell As Microsoft.Office.Interop.Excel.Range In rg
				'// 指定範囲の上部下部の罫線を引く
				bdBtm = rgcell.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom)
				bdTop = rgcell.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop)
				bdBtm.LineStyle = lineStyle
				bdTop.LineStyle = lineStyle
				bdBtm.Weight = borderWeight
				bdTop.Weight = borderWeight
				'// 指定範囲の左右の罫線を引く
				bdLef = rgcell.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft)
				bdRig = rgcell.Borders(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight)
				bdLef.LineStyle = lineStyle
				bdRig.LineStyle = lineStyle
				bdLef.Weight = borderWeight
				bdRig.Weight = borderWeight
			Next
			Exit For
		End If
	Next
	wb.Save
	wb.Close
	If Not(wb Is Nothing) Then wb = Nothing
	If Not(ap Is Nothing) Then 	ap = Nothing
Catch ex As Exception
	Console.writeLine(ex.ToString)
	If Not(wb Is Nothing) Then wb = Nothing
	If Not(ap Is Nothing) Then 	ap = Nothing
	Throw(ex)
End Try
```

# 終わりに

いかがでしたでしょうか？実装の参考になれば幸いです。
この記事が参考になったら、 LGTMをお願いします。閲覧ありがとうございました。