Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21085

[BluePrism]他のアプリが新規で立ち上げたExcelワークブックを、名前を付けて新規で保存する方法です。

$
0
0

これを書いた理由

既存の業務アプリで、「〇〇データ生成」とかのボタンを押すと、新規のワークブックが立ち上がるので
それを名前を付けて新規保存して(もしくはコピペして)、そのファイルをまた別の業務アプリに……
みたいな作業ってありますよね。
たとえばAccessで作られた業務アプリだと

set excelApp = CreateObject("Excel.Application") 
set excelBook = excelApp.Workbooks.Add() 

とかやって新規で立ち上げてデータをシートに流し込んで……みたいな感じでアプリが出してくれるやつです。

これを自動化するにあたり、
表示されているExcelワークブックを保存するには
MS Excel VBO の「Save Current Workbook as」を使えばよくて
そのためには、そのExcelワークブックにAttachしないといけなくて
いま新規で立ち上がったワークブックで、まだ保存されてないからファイル名とか無くて……
(だいたい「Book1 - Excel」みたいな名前で立ち上がるけど、状況によってはそうと決まったわけでもない)
ファイル名がなくて自分で起動したわけでもないExcelはどうやってAttachしたらいいの……

というところで詰まって困っていました。

作成したオブジェクト

保存先のフォルダのパスとファイル名は入力引数で渡します。
main1.png

形のちがうAttachが縦に2個並んでいるところは、
上のほうは別ページにして操作ステージでAttachしているのですけど、
そのAttachの中身がこれ
main2.png
main3.png
アプリケーションモデラーで、win32でExcelのウィンドウをspyして取得しておきます。
これを使って、AttachしたあとにExcelのウィンドウをActivateします。

2個目のAttachは、MS Excel VBOのAttachです。
なんでこの2個目のAttachをするかというと、これをすると出力でhandleが取得できるからです。
(最初は、いきなりこれでAttachしようとしましたが、それではできなかったので、前に操作ステージでAttachする処理を足したのです)

この取得したhandleを使って、MS Excel VBOの

  • Save Current Workbook as
  • Close Current Workbook
  • Close Instance

とやっていきます。

終わりです

ほんとはOLEDBとかのVBOで
テーブルなりクエリなりのデータを持ってくるほうがシステムとしては正しいのでしょうけど……(´・ω・`)

私(元コボラー)が作ると、いつもこんな感じでやたら長くてまだるっこしいフローになっちゃうので、
もっと要領の良いかっこいい書き方を教えてください。

あと、BluePrismの中の人に聞いたら、Accessとの連携はサポート対象外なんだそうです……。


Viewing all articles
Browse latest Browse all 21085

Trending Articles