Excel 範囲に書き込みで「ルート要素が見つかりません」エラー

いつもお世話になっております。

以下のような処理を実装したいです。


・黄色部分(B列の最終行+1行目より下)にデータテーブルの内容を書き込みたい
・A列、E列には文字列や式が既に書かれている

そこで、以下の流れでフローを作成しました。
・「列を読み込み」でB列の要素数を取得
・ブックを閉じる
・取得したB列の要素数をもとに、「範囲に書き込み」でB列の最終行+1行目から書き込み

「範囲に書き込み」は、非表示のセルがあっても支障なく処理できるように、
「システム>ファイル>ワークブック>範囲に書き込み」を使用しています。
また、「ブックを閉じる」は、「別のプロセスで使用されているため、プロセスはファイル にアクセスできません。」というエラーを回避するために入れています。

この状態で実行すると、「範囲に書き込み」で「ルート要素が見つかりません」というエラーになります。
対処方法分かる方いれば教えてください。

こんにちは

原因の切り分けのために、範囲書き込みの直前に数秒の待機アクティビティを設置してみて、事象が解消するか確認してみてください

書き込み前に5秒待機入れましたが変わらずです・・

それでは、待機はそのままで
ブックを閉じるアクティビティを待機アクティビティの手前(エクセルアプリケーションスコープの外)に移動して試してもらえますか?ちなみにExcelbookはエクセルアプリケーションスコープで定義しているWorkbookApplication型変数で良いでしょうか?(そうであれば、そのまま動作すると思うので)

はい、ご認識の通りです。

「ブックを閉じる」をExcelアプリケーションスコープ外に移動しましたが変わらずです…

このエクセルファイルは既存のものでしょうか?(エクセルアプリケーションスコープで
生成されたものではないでしょうか?)もし既存のものであれば、一旦エクセル
アプリケーションスコープを無効化して(ワークブックを閉じるも無効化)して、
そもそもそのファイルに書き込めるかを確認可能でしょうか?

既存のファイルです。
「範囲に書き込み」のみで書き込めるか確認したところ、こちらでも同じエラーになりました。

こんにちは

となりますと、そのファイルにある何らかの要因を取り除かなければ、Workbook-WriteRangeアクティビティは使えなさそうですね。
ちなみにエクセルアプリケーションスコープ配下のWriteRangeでもエラーが出ますでしょうか?

エクセルアプリケーションスコープ配下のWriteRangeではエラー出ず書き込みできました。
ですが、運用上セルの非表示はマストなので、Workbook-WriteRangeアクティビティを使用したいです。。。

こんにちは

そのファイルにある何らかの要因を取り除かない限りは難しそうです。
例えば複数シートあるのであれば、どのシートに問題があるかを、削除あるいは新規ブックへのコピー等で特定していく等が考えられます。

使用しているファイルにはシートが複数あり、そのうち任意のシート1つを削除すると問題なく書き込みができました。(ブックを閉じなくても)

例えば、Excelに3つのシートがあるとして、
①書き込み対象
②、③参考情報(RPAでは使用しない)
の状態で、本件では②と③のどちらを削除しても正常に処理ができるため、どちらに原因があるのか判断できません・・・

また、エラーの場合も書き込みが出来ずにエラーになっているのではなく、
書き込み自体はできているようでした。
しかし、他のシートに書き込み対象のシートにもともと記入されていた情報の一部が転記されたりしていて、挙動が不審です。。

Workbook-WriteRangeアクティビティを使用しないというのが最善かもしれませんが…

こんにちは

何かライブラリ側でハンドリングできない参照でもあるのでしょうか…

シートの削除でなんとかなるのであれば、例えば以下を使って回避できるような気もしますが、いかがでしょうか?
(削除の方は、エクセルファイルを使用アクティビティが必要なので、こちらで統一したほうが良いかもしれません。)

「シートを挿入」「シートを削除」した後に処理しましたが、今度は
「指定されたキーはディレクトリ内に存在しませんでした。」というエラーになりました。
書き込み自体はできているようです。
(相変わらず他シートにもどこかの内容が転記されています)

また、デバッグの際に、書き込みの前で一旦止めて続行すると問題なく処理できました。
一旦止める代わりに待機(2秒)を入れてみましたが、こちらはダメでした。

こんにちは

どのように挿入・削除しましたでしょうか?
1を新規ワークブックにコピー→そこで処理→元のワークブックに書き戻し
がよさそうに思えますが、上記でしょうか?

シートの削除で上手くいくという話をしていたので、同じブック内に新規シート(TEMP)を作成→TEMPシートを削除を入れれば動くかもという解釈でした。勘違いしていました。。
その方法で試してみます。

新規ブックにコピー→そこで処理→元のブックにコピーでいけました!ありがとうございます。
エラーの根本的な対処についてはUiPathのサポートにも問い合わせています。

1 Like

UiPathのサポートに問い合わせた結果、Excelファイルの複数のシートのセルが選択状態になっていることが原因だそうです。
(共有して同時編集できるファイルをダウンロードしているから…?)
処理の最初に適当なセルをクリック等で回避可能でした。

この状態でもエラーにならないようにできないかは引き続き調査するとのことでした。
共有します。

1 Like