UiPathで「名前を付けて保存」ダイアログを表示する

前回のUiPathではてブのスクレイピング | while(isプログラマ)で作ったプログラムですが、URLを指定できるのはいいものの、保存先が”hatebu.csv”と固定になっているため、保存用のダイアログを表示して保存先を指定するようにしたいと思います。

ですが! UiPathには「ファイルを選択(File Select)」というアクティビティはあるのですが保存用ダイアログのアクティビティがありません。「ファイルを選択」アクティビティだとボタンの名称が『開く』となっているので、保存用のダイアログとして使うには違和感があります。

そこで、今回はVB.NETにあるSaveFileDialogという保存用のダイアログを呼び出す方法を紹介します。

まずは、保存用ダイアログ用の変数を追加します。ここでは、saveDlgとしました。

saveDlgの型はSystem.Windows.Forms.SaveFileDialogです。「savefiledialog」でフィルターをかけるとでてくると思います。選択してOKボタンを押してください。

そうすると、インポートした名前空間に、「System.Windows.Forms」が追加されます。この時、!マークが表示されますがあまり気にしなくていいです。気になるようでしたら一度、保存してUiPath Studioを落とし、再度起動しなおすとこの!マークは消えます。

saveDlgの既定値に「New System.Windows.Forms.SaveFileDialog()」と指定します。

つづいて、saveDlgの設定をしていきます。デフォルトのファイル名(FileName)に”hatebu.csv”、フィルターに”CSVファイル(*.csv)|*.csv|すべてのファイル(*.*)|*.*”と指定します。他にどのようなプロパティがあるかは、SaveFileDialog Class (System.Windows.Forms) | Microsoft Docsを参照してください。

次に、最初に表示されるデフォルトパスを、現在実行しているフォルダパスを指定することにします。これは、「環境変数を取得(GetEnvironmentVariable)」アクティビティを利用して”CurrentDirectory”を指定します。出力には直接、「saveDlg.InitialDirectory」を指定しました。このアクティビティで他にどのような値が取得できるかは、Environment Class (System) | Microsoft Docsを参照してください。

保存ファイル選択ダイアログ自体は「saveDlg.ShowDialog()」で開きます。このメソッドの返り値はDialogResultというEnum型になっているので、ちゃんとファイルが選択されたかどうか判別したうえで、CSVに書き込むことにします。

これで実行すればうまくいくはず……。と思ったのですが、保存用のダイアログが表示されると思ったタイミングでなかなか表示されません。かといってタイムアウトエラーになりません。おかしいなぁ、と思いながらもしかしてと思ってIEのウィンドウを動かすと、後ろにありました。

困ったことに、UiPathではダイアログが最前面に表示されないことがよくあるんですよね。そもそも、最初に表示されるURL指定用のダイアログだって最前面に表示されるものの、アクティブにならないことがあるので、文字を入力しようとキーを押しても入力できません(わざわざマウスでダイアログを選択して入力しないといけない)。調べてみると、デスクトップをアクティブにしてからダイアログを表示させたらいいらしいので、「アクティベート」アクティビティを一番上に追加して、デスクトップを選択します。選択した後にセレクターを確認すると二行になっていると思いますが、うまくいかないことがありそうなので、一行だけにしておきました。

さて、これで実行すると、最初に表示されるURL入力ダイアログがアクティブになり、わざわざダイアログを選択せずとも文字を入力することができました。これでうまくいくはず……。と思ったのですが、保存用のダイアログはあいかわらず、バックに表示されてしまいます。ダイアログ表示の直前にデスクトップをアクティブにするアクティベートアクティビティを追加しても変わらず。仕方がないので、ダイアログを表示する前に「Win + M」キーを押下して、表示されているウィンドウをすべて最小化する処理をいれてダイアログを表示することにします。

まあ、よくよく考えたらこの時点でIEは必要ないのだから、「タブを閉じる」アクティビティを使ってIEを閉じてからダイアログを開いたほうがいいかもしれないです。

ちなみに、Input dialogを前面に出したい – 日本 / フォーラム – UiPath Community Forumによると、「文字を入力(TypeInto)」アクティビティで”k(ctrl)”としたらいいと書いてあり、確かにこれでダイアログが最前面に表示されたのですが、自分の環境ではこのタイミングでエラーが発生したような「チャラン」という音が鳴りました。

話は戻って、これで無事に保存用のダイアログが表示されました。

「hatebu-amyu.csv」という名前で保存すると、確かにその名前で保存できました。

なんだか回りくどい書き方になりましたが、これで無事にファイルを保存先を指定することができました。UiPathはVB.NETをもとにしているので、このようにデフォルトで無い機能(アクティビティ)は自分で追加することもできます。

ちなみに、最初に「ファイルを選択(File Select)」アクティビティならUiPathにあると書きましたが、このアクティビティは最新のv2018.4のバージョンではデフォルトのフォルダパスを指定することができません。デフォルトのフォルダパスを指定したい場合は、今回試したように、OpenFileDialogを使うようにするとデフォルトのフォルダを指定することができます。それぐらい、指定できるようになってほしいものです。

コメント

タイトルとURLをコピーしました