背景
近几天用Uibot来写RPA机器人,机器人流程中有操作Excel的步骤,并且数据量还不小,大约在100万行以上。要求是把所有的数据合并在一个sheet中。
问题来了
合并过程中,出现了如下错误:
[2021/1/8 16:57:26][ERROR][base_process.task][619] 运行发生错误,流程中止
错误信息如下:
base_process.task 第619行:模块 Excel.WriteRange 调用出错:写入Excel区域失败,写入数据非二维数组或写入目标不存在?
(-2147352567, '发生意外。', (0, None, None, None, 0, -2146827284), None)
[2021/1/8 16:57:26][INFO][报表数据自动调取流程.flow][0] 报表数据自动调取流程.flow 运行已结束
看错误信息,有一句【写入数据非二维数组或写入目标不存在?】,这句话很诡异,它给了两个选择,不告诉我到底是什么问题也就算了,走后还给我一个问号......【气气】
没办法,挨个排查原因吧~
1、排除“数据不是二维数组”的情况:为此我把所有的数据检查了一番,都是数组,维数也没问题。
2、排除“写入目标不存在”的情况:工作簿的引用也在,表格也是使用Excel打开的,没问题。
这就很奇怪!回想这几次出错,隐约感觉是在数据量较大时出错的,可能跟数据量有关。百度搜索这个错误信息后,在结果中发现了一个关键字“行数超限”,然后查询了Excel的最大行数1048576。这正好跟我的数据吻合,我的数据出错时正是90多万行,在连续写入两个5万行数据时出错。
据搜索,在Excel2007及以后的版本中,最大行数是1048576,以前的版本是65536。Excel2019中最大是1024576行,其他版本博主没有验证。如果你想查看自己的Excel版本的最大行数,可以打开一个Excel文件,按【Ctrl+方向下】键,就一见到底了。千万不要一下一下地按【方向下】键,按好几个小时哦~[手动滑稽]
两个疑问
1、可否修改其最大行数,使其变得更大些?【答】我没有找到可以修改的方法,可能这样会带来一些性能问题,大概是不可以。
2、为什么是这几个数字,而不是其他数字?【答】也许这个等式能解答你的疑惑:1048576=1024*1024。一种比较高效的树形存储方式。见链接:为什么 Excel 的最大行数是 1048576?
总结
出现上述错误,有如下原因:
原因1:数据表、单元格被锁定(保护)。【解决方法】尝试解除锁定。
原因2:数据量太大,超过了最大行数或列数。该最大行列数限制仅仅是针对一个sheet表。【解决方法】单个sheet表行数限制在最大范围内,选择创建多个sheet表保存数据。