はじめに
業務でロボット稼働監視中にエラーが発生しました。
その時のエラーメッセージに危うく翻弄されかけたので、
記録として残します。
結論
この記事でお伝えしたいことは以下2点です。
今回のエラーの原因
今回の原因は、
セルの形式的に想定されている値の範囲がいのデータが入っていたことが原因でした。
以下、水科さんのスーパーわかりやすい説明です)
(なんかでリンク見れないとかあったら困るので一応全文引用しときます)
多分コレ、「範囲外」が「指定した範囲の外」ではなく「セルの形式的に想定されてる値の範囲外」なのよね。
Excelの日付って「1900/1/1を1として何日目か」だから、20230219日目は5万年以上先で「範囲外」なの。
わっかりにく!(UiPathよりはExcel側の問題)
エラーメッセージ以外にも原因特定できる材料を
エラーメッセージが「範囲外~」と出るので実装面を疑いがちですが、
実装が原因でないことも十分にあり得ます。
そのために、エラーメッセージに加えて、ファイルの編集履歴などをつけておくと
原因の特定に役に立つかと思います。
実際に再現してみる
こんなデータを今回は用意しました。
用意したデータ
このように、セルの書式を「日付」としているのにも関わらず、
20200101のように記載していると、セルの内容が####となってしまっているファイルを
読み込むと、以下のようなエラーが出ます。
(####となっている原因としては、日付が大きすぎると認識されているからのようです)
動かした
この表をUiPathの「範囲を読み込み」で読み込もうとすると、
以下のようなエラーが発生します。
22.12.0-beta.11471+Branch.release-v22.12.0.Sha.d2325c659238e9a5bce4ec0fa2d550b0024490cb
ソース: フローチャート
メッセージ: 範囲 を読み取れませんでした。
例外の型: UiPath.Excel.ExcelException
UiPath.Excel.ExcelException: 範囲 を読み取れませんでした。 ---> System.Runtime.InteropServices.COMException: 範囲外です。 (0x8002000A (DISP_E_OVERFLOW)) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Object[] aArgs, Boolean[] aArgsIsByRef, Int32[] aArgsWrapperTypes, Type[] aArgsTypes, Type retType)
at Microsoft.Office.Interop.Excel.Range.get_Value(Object RangeValueDataType)
at UiPath.Excel.Helpers.AreaHelper.ExtractRangeTo2DArray[T](Range range, Boolean preserveFormat)
at UiPath.Excel.WorkbookApplication.ReadRange(String address, Boolean preserveFormat, Boolean& isWholeRange)
--- End of inner exception stack trace ---
at UiPath.Excel.Activities.ExcelInteropActivity`1.EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
at System.Activities.AsyncCodeActivity.System.Activities.IAsyncCodeActivity.FinishExecution(AsyncCodeActivityContext context, IAsyncResult result)
at System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)
エラーが発生している場所では、セルの範囲などは指定していないにも関わらず、
「範囲外」としてエラーが出ていました。
参考文献
おわりに
尻すぼみ気味な記事になってしまいましたが、
この記事がどなたかの参考となれば幸いです。