pandas Excelwriter, writer.save() 输出xlsx导致文件只读的问题

文章介绍了如何使用Python的pandas库中的ExcelWriter函数来写入数据到Excel文件,以及在操作完成后调用writer.close()进行文件关闭,并提醒读者更新到新的save方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 writer.save() 已调整过了,请使用 writer.close()

writer = pd.ExcelWriter('标准集统计情况.xlsx')
xxxxxxx.to_excel(writer,'标准集统计情况')
writer.close()
print ('已保存标准集统计情况')

请帮忙修改程序,要求1:不需要使用input_path去读取文件,直接使用函数导入的df进行处理即可。2.修改程序中的错误,目前无法运行。原程序:def process_excel(df, input_path, output_path): """Excel数据处理与格式优化一体化函数 参数: input_path - 原始文件路径(示例:"原始数据.xlsx") output_path - 输出文件路径(示例:"最终报告.xlsx") """ try: # 数据筛选逻辑 condition = ( (df['班次'] == '夜班') & (df['白班在岗(小时)'] == 0) & (df['夜班在岗(小时)'] == 0) ) result = df[~condition][[ '工号', '姓名', '日期', '班次', '白班在岗(小时)', '夜班在岗(小时)', '离岗时长', '最早打卡进入', '最晚打卡离开', '工作时间段' ]] # 关键修改1:使用ExcelWriter确保文件释放 with pd.ExcelWriter(output_path, engine='openpyxl') as writer: result.to_excel(writer, index=False) # ===== 格式优化阶段 ===== # 关键修改2:使用with语句确保工作簿关闭 with load_workbook(output_path) as wb: ws = wb.active # 1. 全局字体设置 ws.font = Font(name='微软雅黑', size=12) # 2. 列宽设置 for col in 'ABCDEFGHI': ws.column_dimensions[col].width = 12 ws.column_dimensions['J'].width = 30 # 初始宽度 # 3. 对齐设置 center_align = Alignment(horizontal='center', vertical='center') left_align = Alignment(horizontal='left', vertical='center') for row in ws.iter_rows(min_row=2): for cell in row[:9]: cell.alignment = center_align row[9].alignment = left_align # J列 # 4. 首行样式 header_fill = PatternFill("solid", fgColor="E7D5F9") header_font = Font(color="FFFFFF", bold=True, size=14) for cell in ws[1]: cell.fill = header_fill cell.font = header_font # 5. 冻结与筛选 ws.freeze_panes = 'A2' ws.auto_filter.ref = ws.dimensions # 6. 行高设置 ws.row_dimensions[1].height = 22 for row in range(2, ws.max_row + 1): ws.row_dimensions[row].height = 18 # J列自适应宽度(精确计算) max_len = 0 for cell in ws['J']: try: cell_len = len(str(cell.value)) max_len = max(max_len, cell_len) except: continue ws.column_dimensions['J'].width = max_len + 2 # 关键修改3:先保存到临时文件 temp_path = output_path.replace(".xlsx", "_temp.xlsx") wb.save(temp_path) os.replace(temp_path, output_path) print(f"文件处理完成,已安全保存至:{output_path}") except Exception as e: print(f"处理失败,错误原因:{str(e)}") # 清理可能存在的临时文件 if 'temp_path' in locals() and os.path.exists(temp_path): os.remove(temp_path)
最新发布
03-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值