如何用xlwings将len()或去重结果写入指定Excel单元格?
解决xlwings写入DataFrame行数统计到Excel的问题
现有代码的问题
tot_dups定义错误:当前tot_dups = len(df.index)导致len(df.index) - tot_dups结果恒为0,无法得到实际重复数量- 语法错误:
Sheet1['B7'] = (len(df.index) - tot_dups))多了一个右括号 - 去重后行数未正确计算:
RawData_ws['A2']仍写入原行数,未处理去重逻辑
修正后的完整实现代码
import xlwings as xw import pandas as pd # 确保导入pandas(操作DataFrame必备) # 先加载或定义你的目标DataFrame(示例) # df = pd.read_csv("your_data_source.csv") # 1. 计算三个核心统计值 original_row_count = len(df.index) df_deduped = df.drop_duplicates() # 全局去重,需按指定列去重可加subset参数,如subset=['ID', 'Name'] deduped_row_count = len(df_deduped.index) tot_dups = original_row_count - deduped_row_count # 实际重复的行数 # 2. 用xlwings写入Excel指定单元格 app = xw.App(visible=False) wb = xw.Book(FilePath) RawData_ws = wb.sheets['Raw Data'] Sheet1 = wb.sheets['Sheet 1'] # 写入对应值 RawData_ws['A1'] = original_row_count # 原数据总行数 RawData_ws['A2'] = deduped_row_count # 去重后的行数 Sheet1['B7'] = original_row_count - tot_dups # 等价于deduped_row_count,直接写后者更直观 # 保存并关闭资源,避免后台残留Excel进程 wb.save() wb.close() app.quit()
关键说明
- 若需按特定列判断重复,修改
drop_duplicates()参数即可,比如df.drop_duplicates(subset=['订单号'], keep='first') - 必须执行
wb.save()、wb.close()和app.quit(),防止后台Excel进程占用系统资源 Sheet1['B7']的计算式本质和deduped_row_count完全一致,直接写入后者代码可读性更强
内容的提问来源于stack exchange,提问作者Jose Daniel Rojas
相关产品推荐
相关产品推荐

