はじめに
この投稿は、RPAツールのUiPathで、Excelの図形(オートシェイプ)のテキストを取得する方法についての投稿です。
「Excel操作を.NETのコードでやってみよう」シリーズです。他の投稿はこちら。
図形(オートシェイプ)とは
「図形(オートシェイプ)」とは、エクセルの図形描画機能のことです。
長方形や円などの形を選ぶことが出来て、テキストも埋め込めるので、見栄えの良い資料作成では欠かせません。
今回はこの「図形(オートシェイプ)」をUiPathから操作する方法の紹介です。
図形(オートシェイプ)にしなければ操作は容易
UiPathで図形(オートシェイプ)を参照する方法は、標準ではありません。
そもそも、図形(オートシェイプ)を使用せすに、セルに直接記述してくれれば操作できます。
見た目の問題なら、図形の背景を透明にしてセルにテキストを書けば、それっぽく見えます。
ただ、何らかの理由で「図形(オートシェイプ)」に記述したいケースもあります(少ないですが)
その場合、頑張って図形(オートシェイプ)のテキストを操作する必要があります。
図形(オートシェイプ)を操作する方法
UiPathで図形(オートシェイプ)を操作する方法は、以下の2つです。
No | 方法 | メモ |
---|---|---|
1 | InvokeVBAでVBAコードで実施 | ネット上に沢山の実例あり。マクロ実行セキュリティ設定が必要 |
2 | InvokeCodeで.NETコードで実施 | ネット上に情報が少ない |
ネットで検索すると「1.VBAコードで実施する」サンプルコードが多いようですが、「2.NETコードで実施する」サンプルは見つかりませんでした。
なので、今回は「InvokeCode」でチャレンジしてみたいと思います。
.NETで、図形(オートシェイプ)のテキストを取得
以下はVB.NETのコードです。
実行すると「図形(オートシェイプ)のテキスト」がリストで取得できます。
'// 対象エクセルファイルの情報
Dim bookPath As String = "C:\temp\exceltest.xlsx"
Dim sheetName As String = "Sheet1"
Dim shapeTextList As New List(Of 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
Try
'// ブックを開く
wb = ap.Workbooks.Open(IO.path.GetFullPath(bookPath))
'// シートループ
For Each ws In wb.Sheets
If ws.Name.ToUpper() = sheetName.ToUpper() Then
For idx As Integer = 0 To ws.Shapes.Count -1
Dim shape As Microsoft.Office.Interop.Excel.Shape =
CType(ws.Shapes(idx), Microsoft.Office.Interop.Excel.Shape)
If shape.TextFrame2.HasText = Microsoft.Office.Core.MsoTriState.msoTrue Then
'// テキストをリストに追加
shapeTextList.Add(shape.TextFrame2.TextRange.Text)
End If
Next
End If
Next
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
呼び出し可能なxamlファイルにしたものを用意しました。以下からダウンロードできます。
終わりに
InvokeCodeで実施すると、VBAのようなマクロセキュリティ設定も不要で、簡単に実行できます。
Excel図形(オートシェイプ)を操作したい場合に、参考になれば幸いです。
最後までお読みいただき、ありがとうございました。