錯誤描述
從 Excel 表中讀取一個單元格的數據并 Log 出來究珊,程序框圖如下:
畫好程序框圖之后運行得到如下錯誤:
不做任何修改,再次運行,一切正常:
第二次運行之后竿裂,Excel 處于啟動狀態(tài):
試驗:
- 關閉 Excel 窗口再次運行玉吁,一切正常
-
查看任務管理器,沒有找到 Excel 進程
- 關閉 Excel诈茧,關閉 UiPath,再次打開 UiPath捂掰,立即重新運行同樣的程序敢会,一切正常
4.關閉 Excel,關閉 UiPath这嚣,再次打開 UiPath鸥昏,一分鐘之后重新運行同樣的程序,又得到同樣的錯誤姐帚,再次運行吏垮,Excel 窗口激活,一切正常
5.關閉 Excel,關閉 UiPath膳汪,確認任務管理器中沒有 EXCEL 進程唯蝶,等待一分鐘之后再次打開 UiPath 運行同樣的程序,得到同樣的錯誤遗嗽,特征一樣粘我。觀察到出錯彈框之后任務管理器中有 EXCEL 活動進程
觀察到出錯彈框:
此時任務管理器中有 Excel 進程:
6.緊接著 5 運行一遍,一切正常痹换。
猜測:
當 EXCEL 進程在活動的時候征字,Excel Application Scope 運行是沒有問題的。
驗證猜測:
打開 Excel娇豫,關閉 UiPath 3 分鐘匙姜,再次打開 UiPath, 運行同樣的程序
結果:
運行一切正常,猜測正確冯痢!
原因分析
為什么第一次運行總是出錯氮昧?
Excel Application Scope Activity 啟動 EXCEL 進程的時候出了問題,鑒于最終還是啟動了 Excel 進程(實驗 4 得知)系羞,可以斷定是 Excel Application Scope Activity 啟動的 EXCEL 進程就緒時間太慢郭计,此時 UiPath 往下走的時候 Excel 進程還沒有就緒。為什么第二次運行又好了椒振?
第一次運行的時候出錯,但是并沒有殺死 Excel 進程梧乘,第二次運行的時候用的是第一次啟動澎迎,且已經就緒了的 Excel 進程,所以一切又正常了為什么關閉 UiPath 之后选调,立即打開夹供,再次運行,即使是任務管理器沒有 Excel 進程都沒有問題仁堪?
這個可能與 .NET 的垃圾回收機制有關哮洽。當時還沒有執(zhí)行垃圾回收,相應的變量仍然可用弦聂。過一段時間之后鸟辅,垃圾回收已經執(zhí)行,就會出錯了莺葫。這個問題為什么沒人提出匪凉?
和業(yè)內人士交流的時候說到這個問題,他們都說沒有遇到過這樣的問題捺檬。這個問題和計算機環(huán)境有關再层,大部分的計算機都不會出現這個問題。我也在 Win10 上運行過同樣的程序,但是在 WIN7x64 和 WIN7x32 的計算機上都遇到這樣的問題聂受。估計是 WIN7 系統上 Excel Application Scope Activity 啟動 EXECL 進程用時過長蒿秦。
解決辦法
經過上述的一番論證,問題已經很清晰了:Excel Application Scope Activity 啟動 EXECEL 進程用時過長蛋济,導致 UiPath 往下跑的時候渤早,Excel 進程還沒有就緒
解決思路:
1. 加入延時,等待 Excel 進程就緒之后再往下執(zhí)行
實驗:
- 關閉 Excel 窗口
- 確認任務管理器中沒有 Excel 進程
- 關閉 UiPath瘫俊,等待 1 分鐘
- 打開 UiPath, 執(zhí)行如下程序框圖:
結果:
增加延時:
結果仍然出錯鹊杖,可以看出延時并沒有被執(zhí)行,總的 執(zhí)行時間仍然是 00:00:01
在延時處添加斷點扛芽,調試發(fā)現執(zhí)行到 Excel application scope 處就已經彈出錯誤了骂蓖,這意味著在 Excel application scope 內部出現了錯誤,此時還沒有機會執(zhí)行 Delay川尖。在里面放置 Delay 是沒有意義的登下。
2. 創(chuàng)建Excel 進程之后再使用 Excel application scope Activity
實驗:
- 關閉 Excel 窗口
- 確認任務管理器中沒有 Excel 進程
- 關閉 UiPath,等待 1 分鐘
- 打開 UiPath, 執(zhí)行如下程序框圖:
結果:
仍然得到如下錯誤:
再次運行(此時叮喳,Excel 進程已經存在)被芳,得到正確輸出的結果。
估計 Start process 運行的速度太慢馍悟,再次嘗試在中間加入延時畔濒,程序框圖如下:
關閉所有 Excel 窗口,再任務管理器中確認沒有任何 Excel 進程锣咒,關閉 UiPath 一分鐘之后再打開侵状,運行,結果如下:
沒有錯誤毅整,終極解決方案誕生了趣兄!
留意到 Excel application scope Activity 操作 Excel 完成之后,僅僅是關閉了被操作的工作簿悼嫉,但是 并沒有關閉 Excel 進程艇潭。這意味著可能有內存溢出的問題∠访铮可以對原程序進行一些改良:在程序末尾添加 Kill process
當然關閉 Excel 的方法不止一種蹋凝,還可以用 Close Application Activity ,效果是一樣的。
這時辛臊,在執(zhí)行程序之后可以看到 Excel 已經關閉仙粱,也能正確地讀取到數據。一切都很美好彻舰!但是過了沒多久伐割,在確認資源管理器中沒有 Excel 進程的情況下候味,繼續(xù)運行該程序還是得到同樣的錯誤:第一次運行出錯,第二次沒有問題隔心。
第一次運行還是會有錯誤
從 Output 中可以看到此時 3s 的延時已經執(zhí)行白群,
資源管理器里看到有兩個 EXCEL 進程:
這意味著 即使 Start Process 已經啟動了 EXCEL 進程, Excel application scope Activity 還是會啟動自己的 EXCEL 進程硬霍。嘗試 關閉一個進程帜慢,保留一個進程,再次運行唯卖,結果一切 OK粱玲。
結論: 思路 2 不正確,但是又發(fā)現了一些新的特性:
- 這個問題的原因: Excel application scope Activity 啟動自己的 EXCEL 進程的時候還沒有就緒就引用拜轨,
- 同一個程序中 Start Process 得到的 Process 是不會被 Excel application scope Activity 引用的抽减。
- 單步執(zhí)行的時候,這個問題是不存在的橄碾,估計是由于單步執(zhí)行的時候有足夠多的時間來啟動進程卵沉。
3. 假如在工作簿已經打開的情況下,Excel application scope Activity 還會再次創(chuàng)建 EXCEL 進程嗎法牲?
實驗:
- 打開目標工作簿
- 打開 UiPath, 執(zhí)行如下程序框圖:
結果:輸出一切正常史汗,任務管理器里面只有一個 EXECEL 進程
為了看清楚是否在執(zhí)行過程新建了 EXCEL 進程,加入斷點拒垃,單步執(zhí)行停撞,發(fā)現 自始至終只有一個 EXCEL 進程
這時我們可以斷定:當工作簿已經打開,Excel application scope Activity 就不會重新創(chuàng)建 EXCEL 進程恶复,也就不存在由于 EXCEL 進程未就緒就引用的錯誤
4. 打開目標工作簿之后再使用 Excel application scope Activity
什么情況下 Excel 或啟動兩個進程怜森?假如在使用 Excel application scope Activity 之前,工作簿已經打開谤牡,是否還會創(chuàng)建兩個進程?
實驗:
- 關閉 Excel 窗口
- 確認任務管理器中沒有 Excel 進程姥宝,如果有的話就先 結束進程
- 關閉 UiPath翅萤,等待 1 分鐘
- 打開 UiPath, 執(zhí)行如下程序框圖:
注意:這里的 Start Process Activity 中指定了工作簿路徑
在 Start Process 輸入 工作簿完整路徑 的方法是設置 Properties:
注意:
Auguments 的工作簿路徑必須是完整路徑,不能是相對路徑腊满,因為WorkingDirectory 是EXECEL.EXE 所在的文件夾套么,而不是項目文件夾
結果:單步執(zhí)行觀察任務管理器,果然也始終只有一個進程碳蛋,而且運行也沒有問題胚泌,能得到正確的輸出!
- 10s 的延時感覺有點長,假如刪除延時肃弟,是否還好玷室?
結果:不好零蓉,還是會啟動兩個進程,然后得到同樣的錯誤
所以說 這個延時是必須的穷缤!
- 那么延時 10S 是不是有點長敌蜂?3S 行不行?
結果:運行成功津肛,只有一個進程章喉,沒有錯誤,結果正確身坐!
終極解決方案應該是這樣的:
要點總結:
- 在使用 Excel application scope Activity 之前要先打開目標工作簿
- 使用 Start Process 打開工作簿之后要加入延時秸脱,等待程序就緒
- Excel application scope Activity 不會自動關閉Excel進程,最后要用 Kill Process 關閉 Excel 進程
- 這個問題會出現在 WIN7 上
其它辦法
其實還有一種辦法來解決這個問題部蛇,就是不用 Excel application scope Activity 摊唇。UiPath 中提供了兩組 Activity 來實現 Excel 操作。詳細信息請看 這里
感想
為了追殺這個問題辛苦了一整天搪花,雖然很辛苦遏片,這個問題終于搞清楚了,很值得撮竿∷北悖客官,請盡情贊賞吧幢踏!
返回目錄
更多 UiPath 相關的資訊髓需,請關注公眾號:流程自動化機器人教程
由于簡書禁止直接在文章中插入公眾號二維碼,請點擊 這里 了解添加該公眾號的細節(jié)房蝉。