影刀RPA Excel查找替换与数据定位

发布时间:2026/7/9 1:41:39
影刀RPA Excel查找替换与数据定位 影刀RPA Excel查找替换与数据定位作者林焱在Excel数据处理中“查找某个值在哪里和把某些值批量替换成新值是高频操作。手动在Excel里按CtrlF查找、CtrlH替换很方便但在RPA流程里怎么做怎么找到某个值所在的行号怎么把整个工作簿里的暂无替换成0”这篇文章把Excel查找替换的几种方案讲全。一、用影刀指令查找单元格1.1 查找指定值影刀提供【查找Excel单元格】指令【查找Excel单元格】 文件路径D:\data\product.xlsx Sheet名Sheet1 查找内容变量 target_value 查找范围A1:D100 → 输出到变量 found_cell返回单元格地址如B5如果找不到返回空字符串。1.2 查找的局限性影刀的查找指令只能返回第一个匹配的单元格位置不能返回所有匹配项。如果需要查找所有包含某个值的单元格用Python。二、用openpyxl查找2.1 查找第一个匹配importopenpyxl wbopenpyxl.load_workbook(D:\\data\\product.xlsx)wswb[Sheet1]targetget_variable(search_value)# 遍历所有单元格查找foundFalseforrowinws.iter_rows():forcellinrow:ifstr(cell.value)str(target):set_variable(found_cell,f{cell.coordinate})# 如B5set_variable(found_row,cell.row)# 如5set_variable(found_col,cell.column)# 如2foundTruebreakiffound:breakifnotfound:set_variable(found_cell,)2.2 查找所有匹配拼多多店群自动化上架方案found_cells[]forrowinws.iter_rows():forcellinrow:ifstr(cell.value)str(target):found_cells.append({cell:cell.coordinate,row:cell.row,![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/be70269bb4024122b959f8b31f5d4f61.png#pic_center)col:cell.column,value:cell.value})set_variable(found_cells,found_cells)2.3 模糊查找target手机# 查找包含手机的单元格found_cells[]forrowinws.iter_rows():forcellinrow:ifcell.valueandtargetinstr(cell.value):found_cells.append({cell:cell.coordinate,value:cell.value})set_variable(found_cells,found_cells)2.4 按列查找只在一列中查找targetget_variable(search_value)search_col2# B列found_rows[]forrowinrange(2,ws.max_row1):# 从第2行开始跳过表头cell_valuews.cell(rowrow,columnsearch_col).valueifstr(cell_value)str(target):found_rows.append(row)set_variable(found_rows,found_rows)三、用pandas查找推荐pandas的查找能力更强语法更简洁。3.1 查找值所在行importpandasaspd dfpd.read_excel(D:\\data\\product.xlsx)# 查找商品名为蓝牙耳机的行resultdf[df[商品名]蓝牙耳机]# 获取行号索引row_indicesresult.index.tolist()# 获取该行所有数据foridxinrow_indices:row_datadf.loc[idx].to_dict()print(f行号{idx}:{row_data})3.2 查找包含某个值的行# 查找商品名包含手机的所有行resultdf[df[商品名].str.contains(手机,naFalse)]# 转成字典列表data_listresult.to_dict(records)3.3 查找最大值/最小值所在行# 找价格最高的一行max_rowdf.loc[df[价格].idxmax()]# 找价格最低的一行min_rowdf.loc[df[价格].idxmin()]# 找库存最多的3行top3df.nlargest(3,库存)3.4 查找空值# 查找价格列为空的行resultdf[df[价格].isna()]# 查找任意列为空的行resultdf[df.isna().any(axis1)]# 查找所有列都为空的行resultdf[df.isna().all(axis1)]四、替换数据4.1 用影刀指令替换【替换Excel内容】 文件路径D:\data\product.xlsx Sheet名Sheet1 查找内容暂无 替换为0 替换范围全部4.2 用openpyxl替换importopenpyxl wbopenpyxl.load_workbook(D:\\data\\product.xlsx)# 在所有Sheet中替换forwsinwb.worksheets:forrowinws.iter_rows():![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f04b925f8aa04d07aec1b392228ca4eb.png#pic_center)forcellinrow:ifcell.valueand暂无instr(cell.value):cell.valuestr(cell.value).replace(暂无,0)wb.save(D:\\data\\product.xlsx)4.3 用pandas替换推荐importpandasaspd dfpd.read_excel(D:\\data\\product.xlsx)# 替换特定值dfdf.replace(暂无,0)dfdf.replace(N/A,)dfdf.replace(-,None)# 在特定列中替换df[价格]df[价格].replace(暂无,0)df[价格]df[价格].replace(面议,None)# 正则替换df[商品名]df[商品名].str.replace(r\s, ,regexTrue)# 多个空格变一个df[商品名]df[商品名].str.replace(r\(.*?\),,regexTrue)# 去掉括号内容# 替换NaNdfdf.fillna(0)# 所有NaN替换为0# 写回df.to_excel(D:\\data\\replaced.xlsx,indexFalse)4.4 批量替换映射# 用字典做批量映射替换replace_map{状态:{在售:active,预售:preorder,已下架:inactive,缺货:out_of_stock},地区:{华东:east,华南:south,华北:north}}dfdf.replace(replace_map)五、数据定位的高级用法5.1 定位特定行并更新importpandasaspd dfpd.read_excel(D:\\data\\product.xlsx)# 找到商品ID为1001的行更新其价格df.loc[df[商品ID]1001,价格]199.9df.loc[df[商品ID]1001,更新时间]2026-07-01![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f040b89250d4781b90beea192fda281.png#pic_center)# 找到状态为缺货的所有行标记为已下架df.loc[df[状态]缺货,状态]已下架df.to_excel(D:\\data\\updated.xlsx,indexFalse)5.2 VLOOKUP式查找用pandas替代Excel的VLOOKUP函数# 主表和对照表df_mainpd.read_excel(D:\\data\\sales.xlsx)df_refpd.read_excel(D:\\data\\product_info.xlsx)# 按商品ID关联把产品类别从对照表填到主表df_resultdf_main.merge(df_ref[[商品ID,产品类别]],on商品ID,howleft)df_result.to_excel(D:\\data\\sales_with_category.xlsx,indexFalse)5.3 定位重复数据TEMU店群如何管理运营# 查找重复行duplicatesdf[df.duplicated()]# 查找某列的重复值dup_in_coldf[df.duplicated(subset[商品ID])]# 查找重复值并标记df[是否重复]df.duplicated(subset[商品ID],keepFalse)5.4 定位异常值# 找价格异常偏离均值3个标准差以上mean_pricedf[价格].mean()std_pricedf[价格].std()thresholdmean_price3*std_price ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/02994ba8fbeb4fcc942141dd7632c233.png#pic_center)outliersdf[df[价格]threshold]print(f发现{len(outliers)}条异常数据)六、实战场景6.1 采集数据清洗流程importpandasaspd dfpd.read_excel(D:\\data\\raw.xlsx)# 1. 查找并替换空值标记dfdf.replace([暂无,N/A,-,null,NULL],None)# 2. 查找并删除完全为空的行dfdf.dropna(howall)# 3. 查找重复数据并去重dup_countdf.duplicated().sum()dfdf.drop_duplicates()# 4. 查找异常值df[价格]pd.to_numeric(df[价格],errorscoerce)df.loc[df[价格]0,价格]None# 负价格设为空# 5. 填充空值df[价格]df[价格].fillna(0)df[库存]df[库存].fillna(0)print(f清洗完成删除重复{dup_count}条剩余{len(df)}条)df.to_excel(D:\\data\\cleaned.xlsx,indexFalse)6.2 查找并高亮特定数据importopenpyxlfromopenpyxl.stylesimportPatternFill wbopenpyxl.load_workbook(D:\\data\\product.xlsx)wswb[Sheet1]# 查找价格超过1000的单元格并标红red_fillPatternFill(start_colorFF0000,end_colorFF0000,fill_typesolid)forrowinrange(2,ws.max_row1):price_cellws.cell(rowrow,column3)# C列是价格ifprice_cell.valueandfloat(price_cell.value)1000:price_cell.fillred_fill wb.save(D:\\data\\highlighted.xlsx)七、避坑清单坑1查找时数据类型不匹配Excel中数字100和文本100是不同的。查找时如果值类型不匹配找不到结果。用str()统一转换为文本再比较。坑2pandas替换后数据类型变化df.replace(暂无, 0)可能把整列从文本类型变成混合类型。替换后检查数据类型df[价格]pd.to_numeric(df[价格],errorscoerce)坑3openpyxl遍历大文件慢逐单元格遍历10000行数据要好几秒。大数据量用pandas的向量化操作速度快100倍。坑4正则替换误伤str.replace(r., x)会把每个字符都替换成x因为.在正则里匹配任意字符。用str.replace(., x, regexFalse)做字面替换。坑5替换后没写回文件pandas的replace返回新DataFrame不修改原文件。需要用to_excel写回文件才生效。

相关新闻