(UiPath)Excelブックを読み取りパスワードをつけて保存する
ご無沙汰してます、おむおむです。
皆様、お元気でしたか。
私はやや疲弊していますが、概ね元気です。
プロジェクトのデリバリって大変ですね(しみじみ)
さて、今まではBlue Prismを取り扱ってきましたが、
趣向を変えてUiPathについて諸々書いてみたいと思います。
やりたいこと
読み取りパスワードがついていないExcelファイルを開き、
読み取りパスワードをつけて保存する、という処理を実装したいと思います。
UiPathの標準アクティビティでは、
既にパスワードがついているブックを開くことはできますが、
新規 or 既存のブックにパスワードをつけて保存することはできないようです。
そもそもブックにパスワードをかけたところで
セキュリティ上意味はあるのか、という疑問を持ってはいけません。
世の中そう簡単ではないのです()。
そんなこともあり、今回はパスワードをつけて保存する方法について
ちょっと調べてみたので、記事にしてみたいと思います。
結論
必要な名前空間をインポートしてアセンブリ参照を追加すれば、
InvokeCodeで実装できます。
詳細はこちらを参照ください。↓
www.cresco.co.jp
...というだけでは味気ないので、
やってみたことをちょっと細かく書いていきます。
※ほぼ明日の自分への備忘なので、TryCatch等は実装しません。
業務で使う場合は、適宜いい感じに実装してください。
名前空間のインポート
まず、今回使用するクラスの名前空間をインポートします。
まず、VB.NETでExcelを操作するために一般的に使われる
Microsoft.Office.Interop.Excelをインポートします。
もしOCからパスワードを取得する場合は、
System.Security.SecureStringクラスを使用します。
ただ、ExcelのSaveAsメソッドの引数としてのパスワードはString型なので、
SecureString→Stringに変換する必要があります。
その際にMarshalクラスの処理を使用するため
名前空間System.Runtime.InteropServiceも
併せて追加したほうが便利です。
アセンブリ参照の追加
どうやら上記で追加したMicrosoft.Office.Interop.Excelのdllは
xaml内では参照されていないようなので、追加してあげる必要があります。
AssemblyReference要素として
Microsoft.Office.Interop.Excelを追加します。
「令和になってもSakuraエディタとかwww」
という煽りは受け付けません。
コードを書く
ここまでで事前準備は完了です。
あとはInvokeCodeアクティビティでVB.NETのコードを書いていきます。
最低限必要な処理を書いていけばこんな感じです。
(変数として既存ファイルパスのfilePath、
保存先ファイルパスのsaveFilePath、
読み取りパスワードのreadPasswordをそれぞれString型の引数として追加しています。)
Dim excelApplication As Application = New Application() Dim excelWorkbook As Workbook = excelApplication.Workbooks.Open(filePath) excelWorkbook.SaveAs(FileName:=saveFilePath, Password:=readPassword) excelWorkbook.Close() excelApplication.Quit()
ファイルの存在チェックやパスワードのIsNullOrWhiteSpaceのチェックは
適宜つけてください。
眠くてめんどくさいのでこの記事ではつけてません(雑)。
まとめ
・コード自体は単純だけど、実行するまでの事前準備が比較的多い
・1つxamlやライブラリを作って共通部品化すればかなり使い勝手がよさそう
土曜日に有名なお店のフレンチトーストを食べに行くことだけを楽しみに
今週のハイパー残業ウィーク(予定)を乗り切りたいと思います。
tabelog.com