如何将Jupyter Notebook中带样式的DataFrame表格转为Word格式?
如何将带样式的Pandas DataFrame转为可粘贴到Word的格式化表格
你已经通过to_html()拿到了带样式的HTML字符串,接下来可以用以下几种实用方法把它转成Word能识别的格式化表格:
方法1:临时HTML文件中转(跨平台通用)
这是最稳妥的跨平台方案,不需要额外依赖:
- 把HTML字符串写入临时
.html文件:
import pandas as pd df = pd.DataFrame({'a':[1,2,3],'b':['a','b','c']}) styled_html = df.style.background_gradient('Blues').to_html() # 写入临时HTML文件 with open('temp_styled_table.html', 'w', encoding='utf-8') as f: f.write(styled_html)
- 用浏览器打开这个HTML文件,选中表格后复制,再粘贴到Word,样式会完整保留。
方法2:直接把HTML写入剪贴板(Windows/macOS)
Windows环境
用win32clipboard库直接把HTML格式数据写入剪贴板,Word能直接识别:
import win32clipboard def copy_html_to_clipboard(html): win32clipboard.OpenClipboard() win32clipboard.EmptyClipboard() # 构造Word能识别的HTML剪贴板格式 html_header = "Version:0.9\r\nStartHTML:00000000\r\nEndHTML:00000000\r\nStartFragment:00000000\r\nEndFragment:00000000\r\n" html_full = f"{html_header}StartHTML:{len(html_header):08d}\r\nEndHTML:{len(html_header)+len(html):08d}\r\nStartFragment:{len(html_header)+len('<html><body>'):08d}\r\nEndFragment:{len(html_header)+len(html)-len('</body></html>'):08d}\r\n{html}" win32clipboard.SetClipboardData(win32clipboard.CF_HTML, html_full.encode('utf-8')) win32clipboard.CloseClipboard() # 调用函数复制带样式的表格 copy_html_to_clipboard(styled_html)
运行后直接粘贴到Word,样式就会正确显示。
macOS环境
用subprocess调用系统命令,把HTML转成RTF后写入剪贴板:
import subprocess def copy_html_to_clipboard(html): # 转义双引号避免命令报错 escaped_html = html.replace('"', '\\"') cmd = f'echo "{escaped_html}" | textutil -format html -convert rtf -stdin -stdout | pbcopy' subprocess.run(cmd, shell=True) copy_html_to_clipboard(styled_html)
执行后直接粘贴到Word即可。
方法3:用win32com直接写入Word(Windows专属)
如果不想手动粘贴,可以直接用pywin32库把表格插入到Word文档:
import win32com.client as win32 # 启动Word并新建文档 word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = True doc = word.Documents.Add() # 把带样式的HTML直接插入文档 doc.Range().InsertHTML(styled_html)
这样表格会直接出现在Word里,样式完全保留。
内容的提问来源于stack exchange,提问作者Lucas Morin
相关产品推荐
相关产品推荐

