在使用xlwings向Excel写入数据时,一个常见的问题是,如果循环中写入的目标单元格地址始终固定(例如 sheet.range('A1').value = row),那么每次循环迭代都会覆盖前一次写入的数据,导致最终只保留最后一次写入的内容。这与我们期望的逐行追加数据的功能相悖。
要实现数据的逐行追加,关键在于在每次循环写入数据时,动态地改变目标行的地址。这可以通过引入一个“行号”变量来实现,该变量在每次成功写入一行数据后递增。
实现步骤:
除了动态行号,为了提高代码效率和可读性,我们还需要注意以下几点:
立即学习“Python免费学习笔记(深入)”;
以下是经过优化和修正后的代码示例:
import pandas as pd import xlwings as xw # 假设 wx 实际上是 xlwings 的别名 # 假设 File1, File2, CompFile 已经定义并指向正确的路径 # loadfile1 = pd.read_excel(File1) # loadfile2 = pd.read_excel(File2) # l = loadfile1.values.tolist() # m = loadfile2.values.tolist() # 模拟数据,以便代码可以直接运行测试 l = [[1, 'apple'], [2, 'banana'], [3, 'orange'], [4, 'grape']] m = [[2, 'banana'], [4, 'grape'], [5, 'kiwi']] # 连接到Excel工作簿 # A = xw.Book(CompFile) # 如果文件已存在 A = xw.Book() # 如果是新建一个工作簿进行测试 # 获取目标工作表对象,将其移到循环外部 sheet = A.sheets['Sheet1'] # 假设目标工作表名为 'Sheet1',请根据实际情况修改 # 初始化写入的起始行号 # 如果需要从第一行开始写入,设置为 1 # 如果需要从已有数据下方开始写入,可以先找到最后一行,例如 sheet.range('A1').end('down').row + 1 row_number = 1 print("开始写入数据...") for row_data in l: # 将变量名改为 row_data 以避免与行号变量混淆 if row_data in m: print(f'匹配成功,准备写入数据: {row_data}') # 使用 f-string 构建动态单元格地址,例如 'A1', 'A2', 'A3'... sheet.range(f'A{row_number}').value = row_data row_number += 1 # 写入后,行号递增,指向下一行 else: print(f'未匹配: {row_data}') # 所有数据写入完成后,保存工作簿 # A.save(CompFile) # 如果是保存到指定文件 A.save('Output_Data.xlsx') # 保存为新的文件进行测试 A.close() # 关闭工作簿 print("数据写入完成并已保存。")
通过遵循上述指南,您可以有效地使用Python和xlwings库,实现Excel文件中数据的逐行动态插入,从而自动化您的数据处理流程,确保数据的完整性和准确性。
以上就是使用Python xlwings在Excel文件中按行循环插入数据的详细内容,更多请关注php中文网其它相关文章!
Windows激活工具是正版认证的激活工具,永久激活,一键解决windows许可证即将过期。可激活win7系统、win8.1系统、win10系统、win11系统。下载后先看完视频激活教程,再进行操作,100%激活成功。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号