ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python自动化办公

2021-07-20 19:59:13  阅读:264  来源: 互联网

标签:段落 sheet Python list paragraph 办公 自动化 Word document


 

Word文档自动化

hi,少年。之前我们学习了Excel文档的自动化操作,这节课我们讲讲如何使用Python控制Word文档

您可以登录1024fun乐学编程主页学习Python基础课程,还可以学习完整的自动化办公课程。

http://www.eluzhu.com:1818/

安装Python-docx第三方库

呦呵,机灵了。操作Word我们要用到Python-docx。它是Python的第三方库之一,主要用来对Word文档进行相关操作。如果你使用1024ide-Python版本,这些库都是自动安装好的。如果你使用其他编辑器,可以使用pip install Python-docx 命令进行安装

创建空白Word文档

首先我们学习如何创建空白Word文档。
导入安装好的Python-docx库,Python-docx 库拥有许多方法,这里用到的是Document类, 创建 Word 文档代码如下:

from docx import Document   #导人库 
document = Document()       #创建 word 文档


#加载已存在的 word 文档
document = Document(r"E:\1024IDE\e9.docx")

from docx import Document表示从docx模块中导入Document类,创建实例化对象 document, 如果需要编辑的Word文档己存在,则在Document(中添加 Word文档路径,路径存在绝对路径和相对路径,绝对路径是确切的地址,如C:\Windows\addins\xxx.doex。相对路径就是相对于当前文件的路径,如./A/xxx.docx。

保存文档
打开一个Word文档,编辑完后,需要执行保存命令,否则文件内容将会丢失,保存文档的代码如下:

document.save(r"E:\1024IDE\e9.docx")

添加标题
除了一些很短的文章,大多数文章的正文都分为几个部分,每部分都有一个标题。标题分为0到9级,从高到低排列,省略不写默认1级,0级标题下自带一行下划线。
新增标题代码如下:

#标题添加问题
document.add_heading("我是默认1级标题")
document.add_heading("我是0级标题")
document.add_heading("我是1级标题")
document.add_heading("我是2级标题")
document.add_heading("我是3级标题")

添加标题调用document的add heading方法,设置需要添加的标题及标题等级、在标题添加代码add_heading(“标题内容”,int)中, int是整数0到9, 0级是最高级别, 9级是最低级别,默认级别为1级,使用0级时会附带下划线样式。在文章中,一级标题为文章的大标题,其次依次使用一级、三级标题。level是add_heading方法的属性, level = 2表示2级标题, level可写可不写,此时已完成创建标题的相关代码工作,整个程序的效果如图

添加段落
在Word文档中,段落是最常见的,是构建文章的基础,创建段落的代码如下:

paragraph = document.add_paragraph("我是A段落")
paragraph = document.add_paragraph("我是B段落")

用add_paragraph方法添加段落,输入段落内容,可以直接写入字符串,或者用text参数设置段落的内容,如paragraph = document.add_paragraph(text = '这是第一个段落')。仅插入段落不对其进行样式设置,段落内容将会与左边距对齐。

效果如图

将此段落插入到上一个段落前面,代码如下:

prior_paragraph = paragraph.insert_paragraph_before("我会将段落插入在我上一个段落上面")
paragraph = document.add_paragraph("我是C段落")

paragraph.insert_paragraph_before方法可以根据单词字面意思理解,在段落之前插入一个段落, 默认情况下在最后一个段落之前添加一个段落,效果如图

如果在其他段落之前添加段落用paragraphs获取段落下标,再针对某一个段落之前插入,例如:共有5个段落,需要在第二个段落之前插入一个段落,代码如下:

para = document.paragraphs[1]
para.insert_paragraph_before("Hello World")

当需要在段落后面追加内容时,用paragraph.add_run(追加的内容)对段落继续进行编辑。

添加分页符

当前页面内容未满或已满,而想把接下来的内容放在下一页时,需要用到分页符,添加一个分页符的代码如下:

#这是一个分更符,用来断开页面
document.add_page_break()
paragraph = document.add_paragraph("因为上面有分页符,所以我们自动加入到下一页")

add_page_break 是添加分页符,为了能清晰看到已经成功添加一个分页符,在此处添加一个段落。效果如图

那这次课程我们把这两块结合起来,将Excel表格中的数据,分别导入到每个Word中。

思路:
(1)获取工作簿中的信息。
(2)用二维列表存储每一位学生数据。
(3)获取Word文档中段落数据。
(4)将表格中每位同学的信息存入Word文档中对应内容。
(5)保存文件。

案例简介

本案例为学生在校证明模板渲染,提取学生信息表所有学生信息,将提取的每一位学生数据填入对应的在校证明Word文档,主要用docx2python第三方库处理大量数据。
创建程序执行入口和读取表中数据的函数,导入对应模块,代码如下:

import xlwings as xw  #起别名
def read_sheet():
#Python序执行入口
if __name__=="__main__":
    read_sheet()    #调用函数

调用read_sheet()函数打开原工作簿,获取工作簿中所有学生数据信息, sheet_list接收数据,封装遍历sheet_list。循环便伦理所有信息,将数据存入sheet_dic字典,然后存储在list_value列表中,例如: sheet_list = [{"name":"张三","jibie":2},{"name":"杨亮","jibie":3}], name为字典的键,学生姓名为值,具体代码如下:

def read_sheet():
    list_value = []
    app = xw.App(visible = True,add_book = False) 
 #1.打开跟工作薄
    workbook = app.books.open(r"E:\1024IDE\学生信息表.xls")
    sheet = workbook.sheets[0] 
 #封装判表
    sheet_list = sheet.used_range.value 
 for i in range(1,len(sheet_list)):
 #创建空字典
        sheet_dic = {}
 #构建字典
 for j in range(0,len(sheet_list[0])):
 if type(sheet_list[i][j]) == float:
                sheet_dic[sheet_list[0][j]] = str(sheet_list[i][j])[:-2]
 else:
                sheet_dic[sheet_list[0][j]] = sheet_list[i][j]
                list_value.append(sheet_dic)
 print(list_value)

 write_data(list_value)

循环遍历构建字典,直接遍历输出结果与工作簿中数据会有差异,需要 if 判断数据类型并强制类型转换,可以通过print输出检验结果.
创建save_close()函数对文件保存和退出程序,代码如下:

 def save_close(app.workbook):
     workbook.close() 
     арр.quіt
     app.kill()

定义write_data()函数,将数据写入Word模板中,采用多层循环嵌套模式循环追历信息,替换Word中的值。具体代码如下:

from docx import Document
def write_data(sheet_list_value):
 for sheet_dic_value in sheet_list_value:
 #打开原有 Word 文档
        document = Document(r"E:\1024IDE\在校证明.docx")
 for para in document.paragraphs:
 #runs一方面可以将字符词组分开,另一方面防止文字样式改变
 for run in para.runs:
 for k,v in sheet_dic_value.items():
                    run.text = run.text.replace(k,v)
        document.save(r"E:\1024IDE\在校证明.docx" + sheet_dic_value["name"] + "_" + sheet_dic_value["sxh"] + ".docx") 

 print(sheet_dic_value["name"] + "的材料正在保存中...")

创建write_data() 函数对数据进行读写保存, 遍历Word文档中所有段落信息, 每一个段落用run对象保证文字内容和格式的准确性。items) 方法把字典中每对key和value组成一个元组, 并把这些元组放在列表中返回, 循环遍历数据赋值给k和v.run.text.replace(k, v) 将文本中的内容进行替换。打开文档与保存文档是同一级别, 对文档进行命名和保存, 用print函数了解文档保存的进程。效果如图

你可以自己练习一下今天的任务,看看还能不能在原来代码的基础上,加入更多的功能。

您可以登录1024fun乐学编程主页学习Python基础课程,还可以学习完整的自动化办公课程。

http://www.eluzhu.com:1818/

标签:段落,sheet,Python,list,paragraph,办公,自动化,Word,document
来源: https://blog.csdn.net/sinat_25903067/article/details/118943224

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有