python 创建个性化的word文档

python可以让你的报表做得又快又好,今天给大家分享一篇用python pywin32库创建word的方法。

代码所需要的第三方库为pywin32。

pip install pywin32
from win32com.client import Dispatch
import os

# 添加一段文字
def add_para(content, is_indent=True, is_alignment_center=False, is_bold=False, font_name='方正仿宋',
             font_size=16, font_color=None):
    '''
    :param content: 写入word的内容
    :param is_indent: 首行缩进2个字符
    :param is_alignment_center: 居中对齐
    :param is_bold: 字体加粗
    :param font_name: 字体名称,比如方正仿宋、方正小标宋...
    :param font_size: 字体大小,比如二号对应22磅,三号对应16磅
    :param font_color: 字体颜色
    '''
    global para_index, start
    selection = word.Selection
    selection.Start = start
    selection.InsertParagraph()
    rng = selection.Range
    rng.Text = content
    para = doc.Paragraphs(para_index)
    if is_indent:
        para.CharacterUnitFirstLineIndent = 2  # 首行缩进2个字符
    if is_alignment_center:
        rng.ParagraphFormat.Alignment = 1  # 居中对齐
    if is_bold:
        rng.Font.Bold = True  # 字体加粗
    if font_color:
        rng.Font.Color = font_color
    rng.Font.Name = font_name
    rng.Font.Size = font_size

    para_index += 1
    start = rng.End + 1

word = Dispatch('kwps.Application')
word.Visible = 1
# 新建一个word
doc = word.Documents.Add()
# 如果有设置好了的word模板,则调用下面的方法
# doc = word.Documents.Open('abosulte_path')
para_index = 1
start = 0

add_para(content='我是标题', is_alignment_center=True, font_name='方正小标宋', font_size=22)
add_para(content='一、我是方正黑体', font_name='方正黑体', font_size=16)
add_para(content='(一)我是方正楷体', font_name='方正楷体', font_size=16)
add_para(content='我是方正仿宋', font_name='方正仿宋', font_size=16,font_color=255)

doc_path = os.path.join(os.path.dirname(__file__),'xxx.docx')
doc.SaveAs(doc_path)
doc.Close()
word.Quit()

生成的效果如下,如果字体显示不对,可能是你的电脑没有这些字体,需要自己另行下载方正字体,将下载好的字体放入C:\Windows\Fonts文件夹中。

学会了pywin32库的使用,分分钟自动完成几千、几万字的材料不再是梦想。

在使用pywin32库过程中,需要经常查阅下面这两个手册。遇到问题,查阅手册,手撸代码。

Microsoft.Office.Interop.Word 命名空间 | Microsoft Learn

Microsoft.Office.Interop.Excel 命名空间 | Microsoft Learn

猜你喜欢

转载自blog.csdn.net/spiderwower/article/details/136436890