1回のシークエンスでデスクトップ上のフォルダ内にある複数のワードファイルをそれぞれ個別に同じファイル名でPDF変換する方法についてご教授いただきたくお願い申し上げます。
1回のシークエンスでデスクトップ上のフォルダ内にある複数のワードファイルをそれぞれ個別に同じファイル名でPDF変換する方法
の、どのあたりが判らないのでしょうか。
切り分けて考えると、
- デスクトップのフォルダ名を取得する
- そこから更に特定のフォルダ名を取得する
- 2で取得したフォルダの中からWordファイルを取得する
- ループ処理で個別のWordファイルをPDFに変換する
- Wordファイル名からPDFで保存するファイル名を作り、保存する
といった流れで実現できると思います。
その上で、どこか具体的にフローや機能の使い方がわからないのであれば、具体的に書いていただけると、返事やアドバイスも集まりやすいと思います。
質問の書き方等については、こちらを参照してください。
申し訳ありません、英語が苦手で、UiPathも超初心者のため、失礼をお許しください。
まず
- デスクトップのフォルダ名を取得する
が、わかりません。フォルダ名を指定しても、そこから個別のファイル名を選択するようになって、単独ファイルのPDF変換しかできないです。とりあえず、単独のワードファイルを指定して、PDF変換することはできましたが、特定のフォルダ内の任意の複数ファイルに対してPDF変換の指定をしたいです。
↓ - そこから更に特定のフォルダ名を取得する
- 2で取得したフォルダの中からWordファイルを取得する
- ループ処理で個別のWordファイルをPDFに変換する
- Wordファイル名からPDFで保存するファイル名を作り、保存する
最初の質問に付随して、これらの2、3、4,5のプロセスもどのように指定すればよいかがわからないです。何卒よろしくお願い申し上げます。
順を追って。
- デスクトップのフォルダを取得する
デスクトップのフォルダは、
Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
という表記( VB.NET 書式)で取得できます。これはどちらかというと暗記項目というか、決め打ちなので、そういうものがあるのか、と思ってください。
(尚、Environment.SpecialFolder.●●● の部分を変更することで、他にもシステム関連のフォルダ命は大半が取得できます。こちらを参考にしてみてください)
- 特定のフォルダ
これはちょっと条件がわからないので判断がつきません。固定のフォルダ名であれば、 1. で取得したフォルダ名(の文字列)に直接、追記するだけで良いはずです。
( + “\foldername” のような表記を後につけるだけです。)
- ファイル名の取得
- ループ処理
シンプルな方法だと、
IO.Directory.GetFiles(フォルダ名,検索パターン)
という命令を使用すると、対象のファイル名のリスト(配列)が取得できます。
これを「For Each」アクティビティの引数にすると、順番に処理を行うことができます。
- Wordファイル名からPDFで保存するファイル名を作り、保存する
いくつか方法はありますが、シンプルなのはUiPath標準のWord Activity Packを導入することだと思います。
導入方法は割と簡単で、UiStudioからPackage Managerを開きます。
次に、Package Manager画面で、
① 左側のAvailable → All を開く
② 上の検索欄で「Word」と入力
③ 検索結果の中に UiPath.Word.Activities がある(はず)なので、Installを押す
これを行うと、Wordに関連した機能が使えるようになります。
あとは、(上記の手順で追加される)Word Application Scopeで変換したいWordファイルを開き、Export to PDF アクティビティで保存すれば良いのではないかと思います。
一応、サンプル(上記の内容)のWorkflowファイルを添付しておきます。
上で書いたように「UiPath.Word.Activities」を使用するのが前提なので、それを導入してから開いてみてください。
Main.xaml (10.5 KB)
初心者とのことで、機能が色々あってとっつきにくいかもしれませんが、その場合はUiPath Academyという無料のe-ラーニング(ビデオ・教材ファイル)があるので、そちらをやってみてください。
登録画面こそ英語ですが、ビデオ等は日本語版も(全コースでないですが、初心者向けコース等は)用意されています。
詳細にご教授いただき誠にありがとうございます。
いただいたワークフローファイルを修正して実行してみたところ、
下記のようなエラーメッセージが表示されます。
↓
Main has thrown an exception
Source: Word Application Scope
Message: RPC サーバーを利用できません。 (Exception from HRESULT: 0x800706BA)
Exception Type: COMException
System.Runtime.InteropServices.COMException (0x800706BA): RPC サーバーを利用できません。 (Exception from HRESULT: 0x800706BA)
at Microsoft.Office.Interop.Word.ApplicationClass.get_Documents()
at UiPath.Word.WordDocument…ctor(String documentPath, Boolean createNew)
at UiPath.Word.Activities.WordApplicationScope.Execute(NativeActivityContext context)
at System.Activities.NativeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager)
at System.Activities.ActivityInstance.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)
試しに3つのWordファイルをPDF変換しようとしていますが、フォルダ内の3つのWordファイルのうち、1つだけがPDF変換されて、上記のエラーメッセージが表示されます。
COMのエラーは難儀ですね……たまに出るのですが、なかなか解決できなかったりするもので。
1つの可能性として、Wordがビジー状態になっていて処理がうまくいかないことがあるので、添付した画像を参考に、Delayアクティビティ(待機・遅延)をいれてみてください。
-
System > Activities > Statements > Delay を選択して、Bodyにドラッグ&ドロップする
-
DelayのDuarationプロパティに以下の値を設定する(コピペで大丈夫です)
New TimeSpan(0,0,10)
これで少し様子をみてみてください。(TimeSpanの引数部分は、順番に「時」「分」「秒」なので、上記だと1回出力するごとに10秒待機します。うまくいったりいかなかったり、になるようなら、適宜、秒数を少し増やしてみる等で調節をお願いします)
できました!
親切にしていただき本当にありがとうございます!
今後とも何卒よろしくお願い申し上げます。
Honoka様
お世話になります。おかげさまで自動PDF変換できるようになったのですが、docx形式ファイルだけでなく、doc形式(word97-2003文書)で保存されたファイルも一緒に変換できるようにするにはどのようにすればよいでしょうか?なにとぞご教授お願い申し上げます。
お返事遅れてしまいごめんなさい。。。
Wordのバージョン等にもよると思うのですが、WordのActivityでうまくいかないのであれば、Wordの画面を直接操作してファイルを開く・PDFで保存する、という手順が必要になるかと思います。
(あるいはdocxファイルに保存し直す操作を経由するといいかもしれません)
お忙しいところご教授いただきありがとうございます。
docxファイルに保存し直す操作を経由する方法を試してみます!