python-docx把dataframe表格添加到word文件中

 更新时间:2023年08月22日 15:03:14   作者:呆萌的代Ma  
用Python-docx库,可以轻松地添加表格到Word文档中,本文主要介绍了python-docx把dataframe表格添加到word文件中,感兴趣的可以了解一下

python-docx把dataframe表格添加到word文件中思路较为简单:

  • 先把dataframe格式转变为table
  • 新建一个段落:document.add_paragraph()
  • table添加到这个段落下方

效果图

示例代码

from docx import Document, oxml
import pandas as pd
import numpy as np
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import random
# 设置 table 的边框,用法与 cell 类似
def set_table_boarder(table, **kwargs):
    """
    Set table`s border
    Usage:
    set_table_border(
        cell,
        top={"sz": 12, "val": "single", "color": "#FF0000"},
        bottom={"sz": 12, "color": "#00FF00", "val": "single"},
        left={"sz": 24, "val": "dashed"},
        right={"sz": 12, "val": "dashed"},
    )
    """
    borders = OxmlElement('w:tblBorders')
    for tag in ('bottom', 'top', 'left', 'right', 'insideV', 'insideH'):
        edge_data = kwargs.get(tag)
        if edge_data:
            any_border = OxmlElement(f'w:{tag}')
            for key in ["sz", "val", "color", "space", "shadow"]:
                if key in edge_data:
                    any_border.set(qn(f'w:{key}'), str(edge_data[key]))
            borders.append(any_border)
            table._tbl.tblPr.append(borders)
    return table
def set_table_singleBoard(table):
    """为表格添加边框"""
    return set_table_boarder(
        table,
        top={"sz": 4, "val": "single", "color": "#000000"},
        bottom={"sz": 4, "val": "single", "color": "#000000"},
        left={"sz": 4, "val": "single", "color": "#000000"},
        right={"sz": 4, "val": "single", "color": "#000000"},
        insideV={"sz": 4, "val": "single", "color": "#000000"},
        insideH={"sz": 4, "val": "single", "color": "#000000"}
    )
def convert_df_to_table(document, dataframe: pd.DataFrame, index_list=None, column_list=None):
    """把table转为dataframe
    :param document: 文档对象
    :param dataframe: dataframe格式数据
    :param index_list: 最左边一列显示的内容
    :param column_list: (第一行)列名称需要显示的内容
    """
    rows = dataframe.shape[0]
    cols = dataframe.shape[1]
    if index_list is not None:
        cols += 1
    if column_list is not None:
        rows += 1
    table = document.add_table(rows=rows, cols=cols)
    row_i = 0
    col_i = 0
    if index_list is not None:
        raise
    if column_list is not None:
        hdr_cells = table.rows[row_i].cells
        for _col_i, _v in enumerate(column_list):
            hdr_cells[_col_i].text = str(_v)
        row_i += 1
    for _i, series_info in enumerate(dataframe.iterrows()):
        series = series_info[1]
        hdr_cells = table.rows[row_i + _i].cells
        for _c_i, _cell_value in enumerate(series):
            hdr_cells[col_i + _c_i].text = str(_cell_value)
    return table
def main():
    # 1. 把要插入的数据调整为dataframe格式
    dataframe = pd.DataFrame({
        "列1": [round(random.random(), 2) for _ in range(3)],
        "列2": [round(random.random(), 2) for _ in range(3)],
        "列3": [round(random.random(), 2) for _ in range(3)],
    })
    document = Document()
    # 2. 插入表格
    table = convert_df_to_table(document, dataframe, column_list=dataframe.columns.tolist())
    table = set_table_singleBoard(table)  # 表格添加边框
    base_paragraphs = document.add_paragraph("下面插入表格:")
    base_paragraphs._p.addnext(table._tbl)
    # 3. 保存修改后的结果
    document.save('测试_添加表格.docx')  # 保存后导出
if __name__ == '__main__':
    main()

上述代码会得到如下效果图:

到此这篇关于python-docx把dataframe表格添加到word文件中的文章就介绍到这了,更多相关python docx把表格添加到word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django 用户认证组件使用详解

    Django 用户认证组件使用详解

    这篇文章主要介绍了Django 用户认证组件使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Anaconda+vscode+pytorch环境搭建过程详解

    Anaconda+vscode+pytorch环境搭建过程详解

    这篇文章主要介绍了Anaconda+vscode+pytorch环境搭建过程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Python实现新年愿望代码雨效果

    Python实现新年愿望代码雨效果

    新的一年又要来了,这篇文章主要为大家详细介绍了如何利用Python实现新年愿望代码雨的动画效果。文中的示例代码讲解详细,感兴趣的可以动手尝试一下
    2023-01-01
  • 解决Keras中Embedding层masking与Concatenate层不可调和的问题

    解决Keras中Embedding层masking与Concatenate层不可调和的问题

    这篇文章主要介绍了解决Keras中Embedding层masking与Concatenate层不可调和的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Django 实现 Websocket 广播、点对点发送消息的代码

    Django 实现 Websocket 广播、点对点发送消息的代码

    这篇文章主要介绍了Django 实现 Websocket 广播、点对点发送消息,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 浅谈python中列表、字符串、字典的常用操作

    浅谈python中列表、字符串、字典的常用操作

    下面小编就为大家带来一篇浅谈python中列表、字符串、字典的常用操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 使用Python实现绘制地图的示例详解

    使用Python实现绘制地图的示例详解

    这篇文章主要为大家详细介绍了如何使用Python实现绘制地图相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Python动态导入模块的方法实例分析

    Python动态导入模块的方法实例分析

    这篇文章主要介绍了Python动态导入模块的方法,结合实例形式较为详细的分析了Python动态导入系统模块、自定义模块以及模块列表的相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • 一文读懂Python版本管理工具Pyenv使用

    一文读懂Python版本管理工具Pyenv使用

    在开发Python程序的时候,有时候可能需要在不同版本的Python上进行测试。pyenv就是这么一个管理多版本Python的工具,今天给大家分享Python版本管理工具Pyenv使用,感兴趣的朋友一起看看吧
    2021-06-06
  • Python如何优雅的实现自增枚举类

    Python如何优雅的实现自增枚举类

    枚举类型在编程中扮演着重要的角色,它们为变量赋予了更加清晰的含义,然而,在Python中,实现自增的枚举类并非直接而简单的任务,本文将深入讨论如何通过不同的方式优雅地实现自增的枚举类,需要的朋友可以参考下
    2023-12-12

最新评论