Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | Github | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

第 19 章 办公自动化

目录

19.1. Python 处理 PDF 文件
19.1.1. Word 转 PDF
19.1.2. 提取 PDF 文件中的文字和表格
19.1.2.1. 安装 pdfplumber
19.1.2.2. 获取PDF文档信息
19.1.2.3. 获取PDF总页数
19.1.2.4. 查看PDF页面信息
19.1.2.5. 提取文本内容
19.1.2.6. 提取pdf中的表格数据
19.1.2.7. 保存数据到 Excel
19.1.3. PyPDF2
19.2. Word 文字处理
19.2.1. 安装
19.2.2. 创建空白文档
19.2.3. 添加标题
19.2.4. 添加段落
19.2.5. 列表
19.2.6. 表格
19.2.7. 添加图片
19.2.8. 强制分页
19.2.9. 样式
19.2.9.1. 对齐
19.2.9.2. 首行缩进
19.2.9.3. 段落间距
19.2.9.4. 行间距
19.2.9.5. 粗体,斜体
19.2.9.6. 字体大小
19.2.9.7. 查看段落样式
19.2.9.8. 文档样式
19.2.9.9. 自动分页设置
19.2.9.10. 样式演示
19.2.10. 演示例子
19.2.10.1. 官方演示例子
19.2.10.2. 完整的演示例子
19.2.11. 另存操作
19.2.12. 读取 Word 文档
19.2.12.1. 风格筛选
19.2.13. Word 模版合并
19.2.13.1. 安装 docx-mailmerge
19.3. Python 处理 Excel
19.3.1. openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files
19.3.1.1. 创建空文档
19.3.1.2. 工作表
19.3.1.2.1. 默认工作表
19.3.1.2.2. 创建新工作表
19.3.1.2.3. 遍历工作表
19.3.1.2.4. 删除工作表
19.3.1.3. 单元格
19.3.1.3.1. 单元格填充数据
19.3.1.3.2. 获取工作表行数和列数
19.3.1.3.3. 读取单元格
19.3.1.3.4. 修改单元格
19.3.1.3.5. 单元格合并/取消合并
19.3.1.3.6. 单元格格式化
19.3.1.3.7. 使用公式
19.3.1.3.8. 插入图片
19.3.1.3.9. 行高和列宽
19.3.1.3.10. 行列隐藏
19.3.1.4. 样式设置
19.3.1.4.1. sheet选项卡背景色
19.3.1.4.2. 字体
19.3.1.4.3. 单元格背景色
19.3.1.4.4. 设置单元格样式
19.3.1.4.5. 综合应用
19.3.1.5. 工具
19.3.1.5.1. 数字列转标签
19.3.2. xlrd/xlwt/xlutils
19.3.2.1. 读 Excel
19.3.2.2. 写 Excel
19.3.2.2.1. 添加工作表
19.3.2.2.2. 合并单元格
19.3.2.2.3. 运行公式
19.3.2.2.4. 超链接
19.3.2.2.5. 样式设置
19.3.2.3. xlutils

19.1. Python 处理 PDF 文件

19.1.1. Word 转 PDF

安装

		
pip install docx2pdf		
		
		

macOS 还需要安装

		
brew install aljohri/-/docx2pdf
		
		

命令行演示

查看帮助信息 docx2pdf --help

			
neo@MacBook-Pro-Neo ~ % docx2pdf
usage: docx2pdf [-h] [--keep-active] [--version] input [output]

Example Usage:

Convert single docx file in-place from myfile.docx to myfile.pdf:
    docx2pdf myfile.docx

Batch convert docx folder in-place. Output PDFs will go in the same folder:
    docx2pdf myfolder/

Convert single docx file with explicit output filepath:
    docx2pdf input.docx output.docx

Convert single docx file and output to a different explicit folder:
    docx2pdf input.docx output_dir/

Batch convert docx folder. Output PDFs will go to a different explicit folder:
    docx2pdf input_dir/ output_dir/

positional arguments:
  input          input file or folder. batch converts entire folder or convert single file
  output         output file or folder

optional arguments:
  -h, --help     show this help message and exit
  --keep-active  prevent closing word after conversion
  --version      display version and exit
		
		

代码演示

		
from docx2pdf import convert

convert("input.docx")
convert("input.docx", "output.pdf")
convert("my_docx_folder/")
		
		

如果只是转换一个文档,我们就没有必要用Python了。下面的程序是批量转换指定目录下的 Word 文档。

		
import os
import glob
from pathlib import Path

# 指定转换目录
path = os.getcwd() + '/' 

p = Path(path) 
files=list(p.glob("**/*.docx")) 

for file in files:
    convert(file,f"{file}.pdf")		
		
		

19.1.2. 提取 PDF 文件中的文字和表格

Plumb a PDF for detailed information about each char, rectangle, and line.

19.1.2.1. 安装 pdfplumber

		
neo@MacBook-Pro-Neo ~/workspace/python % pip install pdfplumber		
		
			

查看 pdfplumber 是否安装成功

		
neo@MacBook-Pro-Neo ~/workspace/python % pip show pdfplumber
Name: pdfplumber
Version: 0.5.26
Summary: Plumb a PDF for detailed information about each char, rectangle, and line.
Home-page: https://github.com/jsvine/pdfplumber
Author: Jeremy Singer-Vine
Author-email: jsvine@gmail.com
License: UNKNOWN
Location: /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages
Requires: pdfminer.six, Pillow, Wand
Required-by: 		
		
			

19.1.2.2. 获取PDF文档信息

		
import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:
    print(pdf.metadata)		
		
			

输出结果

		
{'Producer': 'macOS 版本11.2.1(版号20D74) Quartz PDFContext', 'CreationDate': "D:20210227145013Z00'00'", 'ModDate': "D:20210227145013Z00'00'"}		
		
			

19.1.2.3. 获取PDF总页数

		
import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:
    print(len(pdf.pages))		
		
			

19.1.2.4. 查看PDF页面信息

		
import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:

    first_page = pdf.pages[0]
    
    # 查看当前页码
    print('页码:',first_page.page_number)

    # 查看当前页宽
    print('页宽:',first_page.width)

    # 查看当前页高
    print('页高:',first_page.height)		
		
			

输出结果

		
neo@MacBook-Pro-Neo ~/workspace/python % python3 pdf.py
页码: 1
页宽: 1324
页高: 7638		
		
			

19.1.2.5. 提取文本内容

		
import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:

    first_page = pdf.pages[0]
    
    # 读取文本
    text = first_page.extract_text()
    print(text)		
		
			

19.1.2.6. 提取pdf中的表格数据

		
import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:
    first_page = pdf.pages[0]
    table = first_page.extract_table()
    print(table)	
		
			

		
import os,pdfplumber
import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

with pdfplumber.open(file) as pdf:

    first_page = pdf.pages[0]
    table = first_page.extract_table()
    # print(table)
    for t in table:
        print(t)		
		
			
		
neo@MacBook-Pro-Neo ~/workspace/python % python3 pdf.py
['关注', '⽐较', '序号', '基⾦代码', '基⾦简称', '2021-02-26', None, '2021-02-25', None, '⽇增长值', '⽇增长率', '申购状态', '赎回状态', '⼿续费']
[None, None, None, None, None, '单位净值', '累计净值', '单位净值', '累计净值', None, None, None, None, None]
['', '', '1', '501030', '汇添富中证环境治理指数A 估值图 基⾦吧', '0.5501', '0.5501', '0.5421', '0.5421', '0.0080', '1.48%', '开放', '开放', '0.12%']
['', '', '2', '501031', '汇添富中证环境治理指数C 估值图 基⾦吧', '0.5471', '0.5471', '0.5392', '0.5392', '0.0079', '1.47%', '开放', '开放', '0.00%']
['', '', '3', '164908', '交银中证环境治理(LOF) 估值图 基⾦吧', '0.4890', '0.4890', '0.4820', '0.4820', '0.0070', '1.45%', '开放', '开放', '0.12%']
['', '', '4', '004005', '东⽅民丰回报赢安混合A 估值图 基⾦吧', '1.0564', '1.0709', '1.0438', '1.0583', '0.0126', '1.21%', '开放', '开放', '0.06%']
['', '', '5', '004006', '东⽅民丰回报赢安混合C 估值图 基⾦吧', '1.0463', '1.0593', '1.0338', '1.0468', '0.0125', '1.21%', '开放', '开放', '0.00%']		
		
			

19.1.2.7. 保存数据到 Excel

		
neo@MacBook-Pro-Neo ~/workspace/python % pip install openpyxl		
		
			
		
import os,pdfplumber

import pandas as pd

file = os.path.expanduser("~/tmp/每日开放式基金净值表.pdf")

# 读取pdf文件,保存为excel
with pdfplumber.open(file) as pdf:
    first_page = pdf.pages[0]

    # 自动读取表格信息,返回列表
    table = first_page.extract_table()
    # print(table)

    save = pd.DataFrame(table[2:],columns=table[0])
    # 保存excel
    save.to_excel('output.xlsx')		
		
			

19.1.3. PyPDF2