LoginSignup
1
0

More than 3 years have passed since last update.

【UiPath】Excel - 図形のテキストを取得する

Last updated at Posted at 2021-03-23

はじめに

この投稿は、RPAツールのUiPathで、Excelの図形(オートシェイプ)のテキストを取得する方法についての投稿です。

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

図形(オートシェイプ)とは

「図形(オートシェイプ)」とは、エクセルの図形描画機能のことです。
長方形や円などの形を選ぶことが出来て、テキストも埋め込めるので、見栄えの良い資料作成では欠かせません。

image.png

今回はこの「図形(オートシェイプ)」を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図形(オートシェイプ)を操作したい場合に、参考になれば幸いです。

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

1
0
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
1
0