(O+P)ut

ITエンジニアのアウトプット録



(O+P)ut

OutPut Log by SE

【BluePrism】Excelファイルを読み取り専用で開く

読み取り専用モードでExcelファイルを開く

以下の記事でBluePrismにおけるExcelファイルの開き方について触れています。

ただし、対象のExcelファイルに読み取り専用で開く設定が入っている場合
Open Workbookを実行した際に

'XXXXX'を変更し、保存する必要がなければ、読み取り専用で開いてください。読み取り専用で開きますか?

というウィンドウの出現と同時に止まってしまいます。

本記事では、そのようなケースでの対策について記載しています。

対応方針

ウィンドウが出現するのでクリックで対応してもよいのですが、この問題はExcel VBAで既出の議題です。
よって、車輪の再発明はせずにVBAで解決します。

方針としては、すでに存在するMS Excel VBOに「読み取り専用でワークブックを開く」アクションを追加しました。

実装

まずは、元になる「Open Workbook」のアクションをコピーし、「Open Worlbook:ReadOnly」として新たなアクションを作成します。

アクションの構成を見ると、

Start ->
CheckInstanceHandle ->
VerifyFileExists ->
Open Workbook ->
Set Event Enabled ->
End

という順序となっています。

ここで、Open Workbookを開いてみてください。

入力、出力、コードのタブのうち、コードを見ると

Dim wb as Object = GetInstance(handle).Workbooks.Open(filename)
name = wb.Name
wb.Activate()

と記載されています。


VBAのOpenメソッドが使われていますが、このメソッドは引数に以下をとることができるので、

Filename 開くブックのファイル名
Password 読み取りのパスワードを指定
WriteResPassword 書き込みパスワードを指定
ReadOnly 読み取り専用モードで開くか否かを指定

このコードを明示的に以下のように修正します。

Dim wb as Object = GetInstance(handle).Workbooks.Open(FileName:=filename,ReadOnly:=True)
name = wb.Name
wb.Activate()

変更点としてReadOnly:=Trueを挿入しました。

Navigateの名前をOpen Workbook2とした場合、
Open Workbook:ReadOnlyアクションは、

Start ->
CheckInstanceHandle ->
VerifyFileExists ->
Open Workbook2 ->
Set Event Enabled ->
End

となりました。

これを、プロセスから呼び出せば、読み取り専用で開けます。

終わりに

今回は、元々あるOpenWorkbookアクションには手を入れずに別のアクションを用意しました。
一方で、VBAのOpenメソッドには上の表で示したように別のオプションも存在します。

それらをインプットとして取得して分岐対応する汎用的なOpenWorkbookアクションをひとつ用意するのもありだと思います。


以上、Excelファイルを読み取り専用で開く方法でした。参考になれば、いいね等ぜひお願いします。