RPA-关于Excel写入大量数据时出现的异常——Excel.WriteRange 调用出错:写入Excel区域失败

背景

近几天用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+方向下】键,就一见到底了。千万不要一下一下地按【方向下】键,按好几个小时哦~[手动滑稽]

搜索“2146827284”可以找到更多与行数相关的信息 

 

两个疑问

1、可否修改其最大行数,使其变得更大些?【答】我没有找到可以修改的方法,可能这样会带来一些性能问题,大概是不可以。

2、为什么是这几个数字,而不是其他数字?【答】也许这个等式能解答你的疑惑:1048576=1024*1024。一种比较高效的树形存储方式。见链接:为什么 Excel 的最大行数是 1048576?

 

总结

出现上述错误,有如下原因:

原因1:数据表、单元格被锁定(保护)。【解决方法】尝试解除锁定。

原因2:数据量太大,超过了最大行数或列数。该最大行列数限制仅仅是针对一个sheet表。【解决方法】单个sheet表行数限制在最大范围内,选择创建多个sheet表保存数据。

 

 

### 使用影刀RPA查找Excel中的数据 影刀RPA是一款强大的自动化工具,它不仅能够实现桌面软件的自动化操作,还可以针对Excel文件执行多种复杂任务,例如读取、写入以及查找特定的数据[^3]。以下是通过影刀RPA查找Excel数据的一个具体教程和示例。 #### 影刀RPA查找Excel数据的核心步骤说明 为了在Excel中查找目标数据,通常需要以下几个核心部分的支持: 1. **加载Excel文件**:将指定路径下的Excel文件加载至内存以便后续操作。 2. **遍历工作表与单元格**:逐行列举Excel的工作簿(Workbook)、工作表(Worksheet)及其内部的单元格内容。 3. **条件匹配**:基于预设条件判断当前单元格的内容是否满足需求。 4. **记录结果**:当找到符合条件的目标数据,将其存储下来供进一步分析或导出。 #### Python脚本集成实例 由于影刀RPA支持Python语言接入,因此可以利用Pandas库高效地处理Excel文档内的结构化数据。下面展示一段完整的代码片段用于演示如何借助影刀RPA配合Python来定位某个具体的数值: ```python import pandas as pd def find_value_in_excel(file_path, target_sheet, search_column, value_to_find): """ 在给定的Excel文件里寻找特定值的位置 参数: file_path (str): Excel 文件路径. target_sheet (str): 要查询的工作表名称. search_column (str): 需要扫描的列名. value_to_find : 待查寻的具体值. 返回: list: 找到的所有位置索引列表 [(row_index, col_index)] 或者 None 如果未发现该值. """ try: # 加载Excel文件 df = pd.read_excel(file_path, sheet_name=target_sheet) # 定位含有目标值得行号 matching_rows = df[df[search_column].isin([value_to_find])] if not matching_rows.empty: positions = [] for idx in matching_rows.index: row_num = idx + 2 # 行数从1开始计数加上标题栏偏移量 column_letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[df.columns.get_loc(search_column)] position_info = f"{column_letter}{row_num}" positions.append(position_info) return positions else: return None except Exception as e: print(f"Error occurred while processing the Excel file: {e}") return None if __name__ == "__main__": example_file = r"C:\path\to\your\file.xlsx" desired_sheet = "DataSheet" searching_col = "EmployeeID" looking_for_val = "E007" found_positions = find_value_in_excel(example_file, desired_sheet, searching_col, looking_for_val) if found_positions is not None and len(found_positions)>0 : print(f"The searched value was located at following addresses within the spreadsheet:") for pos in found_positions: print(pos) elif found_positions==[] or found_positions is None: print("No matches were detected.") ``` 上述脚本实现了基本的功能——即接受四个参数定义好之后即可调用`find_value_in_excel()`方法去探索对应Excel档案里的信息,并最终反馈出所有命中项所在的坐标地址[^4]。 #### 结合影刀RPA实际应用案例 如果希望把这段逻辑嵌套进影刀RPA流程当中,则可通过如下方式达成目的: - 创建一个新的机器人流程; - 插入“启动外部进程”的动作节点用来触发此段Pyhton脚本运行环境; - 设置变量映射关系使得前端界面可动态调整输入源文件及其他必要配置选项; - 收集返回的结果并通过邮件通知相关人员或者直接更新另一份汇总报告型Excel档[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ta叫我小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值