python-docx编辑word表格


一、修改数据类型(中英)

需求:

代码:

#-*-coding:gbk*-
import os
import docx
#from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.text import WD_ALIGN_PARAGRAPH

filepath = r'f:/1/'
def main():
    docxlist = os.listdir(filepath)
    for mydocx in docxlist:
        newdocx = docx.Document(filepath + str(mydocx))
        #newdocx.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
        table = newdocx.tables
        for oTable in table:
            rows_num = len(oTable.rows)
            columns_num = len(oTable.columns)
            if columns_num >= 5:
                for j in range(rows_num):
                    #English -> Chinese
                    ostring = oTable.cell(j, 3).text
                    oTable.cell(j, 4).paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
                    if ostring == 'TIMESTAMP':
                        oTable.cell(j, 3).text = ostring.replace("TIMESTAMP", "时间戳")
                        oTable.cell(j, 4).text = ""
                    elif ostring == 'VARCHAR2':
                        oTable.cell(j, 3).text = ostring.replace("VARCHAR2", "字符串")
                    if ostring == 'DATE':
                        oTable.cell(j, 3).text = ostring.replace("DATE", "日期")
                        oTable.cell(j, 4).text = ""
                    elif ostring == 'NUMBER':
                        oTable.cell(j, 3).text = ostring.replace("NUMBER", "整数")
                    elif ostring == 'FLOAT':
                        oTable.cell(j, 3).text = ostring.replace("FLOAT", "小数")
                #oTable.alignment = WD_TABLE_ALIGNMENT.CENTER
        newdocx.save('f:/2/'+ str(mydocx))
if __name__ == '__main__':
    main()

二、数据类型为日期时,清空位数内容

需求:

代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019/2/20 14:12
# @File    : date_del.py


from docx import Document  # 导入库
"""
word表格中
"""
path = "C:\\Users\\1\\Desktop\\福建省质监局标准信息资源目录.docx"  # 文件路径
document = Document(path)  # 读入文件
tables = document.tables  # 获取文件中的表格集
one_cells = []
for table in tables:
    rows_num = len(table.rows)
    columns_num = len(table.columns)
    if rows_num > 2 and columns_num == 4:
        for i in range(1, rows_num):  # 第二行开始
            if table.cell(i, 3).text == '日期' or table.cell(i, 1).text == '日期':
                one_cells.append(table.cell(0, 1).text)
            for j in range(0, columns_num):
                if table.cell(0, 1).text in one_cells:
                    if table.cell(i, j).text == '位数':
                        table.cell(i, j + 1).text = ''

document.save("C:\\Users\\1\\Desktop\\1\\福建省质监局标准信息资源目录.docx")
# 校验修改内容
for i in one_cells:
    print(i)

三、表格中添加单元格

需求:

参考:https://www.jianshu.com/p/9da61bf35cb7

代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2019/2/25 9:52
# @File    : table_add_cell.py


from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.shared import Pt

"""
word表格,添加一个单元格以及内容
"""
path = "C:\\Users\\1\\Desktop\\成都市质量技术监督局标准层信息资源目录.docx"  # 文件路径
document = Document(path)  # 读入文件
# 设置字体为: 宋体
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

tables = document.tables  # 获取文件中的tables
# 被修改表格的列表
one_cells = []


def match_table():
    """
    遍历文档匹配满足条件的表格
    :return:
    """
    for table in tables:
        rows_num = len(table.rows)
        columns_num = len(table.columns)
        if rows_num > 2 and columns_num == 4:
            one_text = table.cell(0, 1).text
            if len(one_text) == 29:
                one_cells.append(one_text)

                end_text = table.cell(rows_num - 1, columns_num - 1).text
                if end_text:
                    # 添加一行
                    table.add_row()
                    set_font(table, 5, 0)
                else:
                    set_font(table, rows_num - 1, columns_num - 2)
    document.save("C:\\Users\\1\\Desktop\\1\\python_word_table_add_cell.docx")


def set_font(table, a, b):
    """
    设置表格字体样式
    :param table: 表格
    :param a: 行坐标
    :param b: 列坐标
    :return:
    """
    run = table.cell(a, b).paragraphs[0].add_run(u'信息资源生产格式')  # 内容为:信息资源生产格式
    run.bold = True  # 加粗
    run.font.size = Pt(9)  # 字体大小:小五-9
    table.cell(a, b).paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中

    run1 = table.cell(a, b + 1).paragraphs[0].add_run(u'ORACLE')
    run1.font.size = Pt(9)
    table.cell(a, b + 1).paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER


def check_data():
    # 校验修改内容
    for i in one_cells:
        print(i)


if __name__ == '__main__':
    match_table()
    check_data()

优质内容筛选与推荐>>
1、假如用户提出这样的要求,请问大家如何处理...
2、区块链 (一)——基础
3、socket加入循环和粘包问题
4、linux 内核优化
5、Extjs panel 的边框


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn