使用xlwings遍历Excel单元格速度过慢,求高效实现方案
优化xlwings单元格读写速度的方案
你的代码速度慢的核心原因是每次循环都单独和Excel进行读写交互,xlwings和Excel的交互本身有开销,频繁的小操作会累积成明显的延迟。最优方案是通过批量读写减少交互次数,把数据拉到Python内存里处理完再一次性写回去。
优化后的代码如下:
# 批量读取需要处理的整个区域(对应原循环的行1-199,列1-49) source_data = workSheet.range((1, 1), (199, 49)).value # 在Python内存中批量处理数据:给每个单元格内容添加前缀"※ " # 处理空单元格避免报错,空值转为空字符串 processed_data = [] for row in source_data: processed_row = [] for cell in row: if cell is not None: processed_row.append("※ " + str(cell)) else: processed_row.append("") processed_data.append(processed_row) # 批量写入到目标区域(从第6列开始,对应原代码的col+5) workSheet.range((1, 6)).value = processed_data
关键说明:
- 批量读取:一次性把所有要处理的单元格数据读入Python列表,只触发1次Excel交互,替代原循环中近10000次的单独读取操作
- 内存内处理:在Python里循环处理数据,速度远快于和Excel的交互操作
- 批量写入:把处理好的二维列表一次性写入目标区域,xlwings会自动匹配行列尺寸,只触发1次Excel交互
额外提示:
- 如果你的数据里有非字符串类型(比如数字、日期),
str(cell)会自动转换为合适的字符串格式,不会丢失信息 - 目标区域只需要指定起始单元格
(1,6),xlwings会根据processed_data的行列数自动扩展范围,不用手动计算结束位置
内容的提问来源于stack exchange,提问作者Vinz
相关产品推荐
相关产品推荐

