一些很好的python自动化办公方案(待整理到readthedocs中)

1、批量转换.doc文件为.docx文件

# coding=utf-8
# 代码文件:chapter7/ch7.2.1.py
import os

from win32com import client as wc  # 导入模块


# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录,ext参数是文件后缀名

def findext(dir, ext):
    allfile = os.listdir(dir)

    # 返回过滤器对象
    files_filter = filter(lambda x: x.endswith(ext), allfile)
    # 从过滤器对象提取列表
    list2 = list(files_filter)
    return list2  # 返回过滤后条件文件名


if __name__ == '__main__':

    #  设置输入目录
    indir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\in'
    #  设置输出目录
    outdir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\out'

    wordapp = wc.Dispatch("Word.Application")  # 创建Word应用程序对象

    # 查找indir目录中所有.doc文件
    list2 = findext(indir, '.doc')

    for name in list2:
        infile = os.path.join(indir, name)  # 将目录和文件名连接起来
        name = name.replace('.doc', '.docx')
        outfile = os.path.join(outdir, name)
        document = wordapp.Documents.Open(infile)  # 打开Word文件
        document.SaveAs(outfile, FileFormat=12)

        print(outfile, "转换OK。")
        document.Close(0)  # 关闭Word 0表示不保存变更

    print("Game Over!")

2、采用模板批量生成证书文件

# coding=utf-8
# 代码文件:chapter7/ch7.2.2.py

from datetime import datetime

import xlwings as xw

# 从docxtpl库导入DocxTemplate对象
from docxtpl import DocxTemplate

''' # 读取Excel文件获得员工数据 '''


def readdata():
    app = xw.App(visible=False, add_book=False)
    f = r'data/员工信息.xlsx'
    print('打开文件:', f)
    wb = app.books.open(f)

    sheet1 = wb.sheets[0]

    # 选择姓名单元格区域
    rng = sheet1.range('B2').expand('down')

    names = rng.value
    wb.close()
    app.quit()

    print('关闭文件:', f)
    # 返回姓名列表
    return names


if __name__ == '__main__':

    '''获得员工姓名列表 '''
    emps = readdata()

    # 获得当前日期,设置日期格式为yyyy-mm-dd(4位年、2位月和2位日)
    date = datetime.now().strftime('%Y-%m-%d')
    #  设置输出目录
    outdir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\out'

    for emp in emps:
        tpl = DocxTemplate('data/证书模板.docx')

        context = {}  # 传递给模板的字典对象
        context['name'] = emp
        context['title'] = '关总经理'
        context['date'] = date

        tpl.render(context)  # 渲染模板生成docx文档

        file = ('{0}/证书-{1}.docx'.format(outdir, emp))
        tpl.save(file)  # 将渲染成文档对象保存为docx文件
        print('{0}证书生成完成。'.format(emp))

    print('Game Over!')

3、批量统计文件页数和字体数

# coding=utf-8
# 代码文件:chapter7/ch7.2.3.py

import os

from win32com.client import Dispatch


# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录,exts参数是指定文件后缀名列表

def findext(dir, exts):
    allfile = os.listdir(dir)
    # 返回过滤器对象
    files_filter = filter(lambda x: os.path.splitext(x)[1] in exts, allfile)
    # 从过滤器对象提取列表
    list2 = list(files_filter)
    return list2  # 返回过滤后条件文件名


if __name__ == '__main__':

    #  设置输入目录
    indir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\in'
    # 通过findext函数查找指定目录下的.doc和.docx文件
    list2 = findext(indir, ['.doc', '.docx'])

    # 打开Word文档
    wordapp = Dispatch('Word.Application')
    wordapp.Visible = False  # 设置文档不可见

    # 遍历文件列表
    for name in list2:
        infile = os.path.join(indir, name)  # 将目录和文件名连接起来
        document = wordapp.Documents.Open(infile)  # 打开word文件
        # 重新编排页面
        document.Repaginate()
        pagenum = document.ComputeStatistics(2)  # 返回文档页数
        wordnum = document.ComputeStatistics(6)  # 返回文档字符数
        # 2	页数
        # 1	行数
        # 3	字符数
        # 4	段落数
        # 6	亚洲语言字符数
        # 0 单词数

        print('文{0}文件:页数是:{1},字符数:{2}'.format(name, pagenum, wordnum))

        document.Close(0)    # 关闭Word文档 0表示不保存

    wordapp.Quit()           # 退出Word应用
    print("Game Over!")

4、批量转换Word文件为PDF文件

# coding=utf-8
# 代码文件:chapter7/ch7.2.4.py
import os

from win32com import client as wc  # 导入模块


# 查找dir目录下ext后缀名的文件列表
# dir参数是文件所在目录,exts参数是指定文件后缀名列表

def findext(dir, exts):
    allfile = os.listdir(dir)
    # 返回过滤器对象
    files_filter = filter(lambda x: os.path.splitext(x)[1] in exts, allfile)
    # 从过滤器对象提取列表
    list2 = list(files_filter)
    return list2  # 返回过滤后条件文件名


if __name__ == '__main__':

    #  设置输入目录
    indir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\in'
    #  设置输出目录
    outdir = r'C:\Users\tony\OneDrive\书\电子\Python自动化办公\code\chapter7\data\test\out'

    wordapp = wc.Dispatch("Word.Application")  # 创建Word应用程序对象

    # 查找indir目录中所有.doc文件
    # 通过findext函数查找指定目录下的.doc和.docx文件
    list2 = findext(indir, ['.doc', '.docx'])

    for name in list2:
        # 将目录和文件名连接起来
        infile = os.path.join(indir, name)
        # 将文件后缀名.docx替换为.pdf
        name = name.replace('.docx', '.pdf')
        # 将文件后缀名.docx替换替为pdf
        name = name.replace('.doc', '.pdf')
        outfile = os.path.join(outdir, name)
        document = wordapp.Documents.Open(infile)  # 打开Word文件
        document.SaveAs(outfile, FileFormat=17)

        print(outfile, "转换OK。")
        document.Close(0)  # 关闭Word文件
    wordapp.Quit()  # 退出Word应用

    print("Game Over!")

参考:《趣玩python:自动化办公真简单》p176

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值