You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas覆写Excel列保留格式时UTF-8编码不生效问题

问题根因
  • 编码适配错误:Windows系统剪贴板的标准Unicode文本采用UTF-16 LE编码,Excel粘贴时默认按该规则解析内容。代码中df.to_clipboard()指定encoding='utf-8',写入剪贴板的UTF-8字节会被Excel按中文系统默认的GBK编码解析,直接触发中文字符乱码。
  • 粘贴逻辑不符合需求:无参数调用PasteSpecial()时,会连带剪贴板内的文本格式一起写入,会覆盖目标单元格原有格式。
修复后可直接运行的代码
from win32com.client import Dispatch
import pandas as pd

xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1
wb = xlApp.Workbooks.Open(r'c:\Chadee\test.xlsx')
ws = wb.ActiveSheet
# 定位粘贴起始位置
ws.Cells(1, 1).Select

df = pd.DataFrame({'name': ['Somu', 'Kiku', 'Amol', 'Lini'],
                   'physics': ['2个蓝+2', 222222222, 77, 78],
                   'chemistry': [84, 111111, 73, 69],
                   'algebra': [78, 88, 82, 87]})

# 适配Windows剪贴板编码,生成Excel兼容的制表符分隔格式
df.to_clipboard(index=False, encoding='utf-16', excel=True)

# 仅粘贴单元格值,完全保留原有单元格的字体、边框、填充等所有格式
ws.PasteSpecial(Paste=-4163)
可选优化
  • 若不想硬编码粘贴类型常量,可以提前导入win32com常量模块:from win32com.client import constants,后续粘贴参数直接写Paste=constants.xlPasteValues,代码可读性更高。
  • 尽量避免使用ActiveSheet、ActiveWorkbook这类动态对象定位表格,多Excel文件同时打开时容易出现粘贴错位,建议明确指定要操作的工作表名称。

内容的提问来源于stack exchange,提问作者Ryan Yeung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:45:48