day10 代码操作word
1. 基本内容
# 安装第三方库时安装python-docx;导入docx
from docx import Document
创建空白文档
doc = Document()
添加标题
文档对象.add_heading(标题内容,level=级别)
doc.add_heading('一级标题',level=1) # 1到9,表几级标题
# 若level=0,表正文
doc.add_heading('二级标题',level=2)
doc.add_heading('三级',level=3)
doc.add_heading('四级',level=4)
添加正文段落
文档对象.add_paragraph(正文内容,style=None)
doc.add_paragraph('文字内容:毕业论文毕业论文毕业论文毕业论文论文论文论文来晚了忘了问了我五楼五楼五楼五楼五楼')
doc.add_paragraph('用问卷星创建问卷调查、在线考试、360度评估等应用;问卷星提供2700万问卷调查模板;统计分析报告和原始答卷可免费下载;问卷星支持手机填写、微信群发、红包抽奖、自定义域名等功能;超过18亿.')
添加换页
文档对象.add_page_break()
doc.add_page_break()
添加表格
文档对象.add_table(行数,列数)----------添加表格
表格对象.cell(行下标,列下标) -----------获取单元格
单元格对象.text = 数据----------------修改单元格内容
table=doc.add_table(3,4) # 三行四列
cell1 = table.cell(0,0)
cell1.text='姓名'
添加图片
文档对象.add_picture(图片地址,width=None,height=None)
doc.add_picture('files/玉米.png')
保存
doc.save('files/demo1.docx')
2. 文档内容的样式
from docx import Document
from docx.shared import Pt,Cm,RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
# 样式设置优先级问题:document < paragraph < heading < run
"""
例如:
若设置document ,则也会作用到后三者,但document 与 heading 同时给设置
则会优先显示heading设置的
"""
doc =Document()
h1=doc.add_heading('高启强',level=1)
标题样式
1).标题居中
h1.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
2).设置标题字体大小
h1.style.font.size=Pt(20)
3).设置标题的文字颜色
h1.style.font.color.rgb =RGBColor(0,255,255)
段落样式
1).设置段落字体名称
p1 = doc.add_paragraph('哈哈哈哈哈哈问卷星是一个专业的在线问卷调查、考试、测评、投票平台,专注于为用户提供功能强大、人性化的在线设计问卷、采集数据、自定义报表、调查结果分析等系列服务。与传统调查方式和其他调查网站或调查系统相比,问卷星具有快捷、易用、低成本的明显优势,已经被大...')
p1.style.font.name='宋体'
# 如果使用的是中文字体是中文字体,必须加下面的代码
r = p1.style._element.rPr.rFonts
r.set(qn('w:eastAsia'),'宋体')
2).设置字体大小
p1.style.font.size=Pt(15)
3).设置字体颜色
p1.style.font.color.rgb =RGBColor(255,0,0)
4).设置字体加粗
p1.style.font.bold=True
5).设置字体倾斜
p1.style.font.italic =True
6).加下划线
p1.style.font.underline = True
# 倾斜、下划线、下划线会作用全局
7).删除线
p1.style.font.strike=True
8).添加阴影效果
p1.style.font.shadow=True
run的用法
给word文档提供文字内容的时候有两种方式
直接提供文字内容:doc.add_paragraph(文字内容)、doc.add_heading(文字内容)
通过run对象提供文字内容
# 先创建一个空的
h2 = doc.add_heading(level=2)
run1 = h2.add_run('大家都在搜')
run2 = h2.add_run('"高启强"') # run拼接两次内容输出:大家都在搜"高启强"
# 优点在于可以给两个run 设置不同的样式
# 标题段落都可以用run拼接
段落样式
1). 段落内
p3 = doc.add_paragraph('考试、测评、投票平台,专注于为用户提供功能强大')
p4 = doc.add_paragraph('哈哈哈哈哈考试、测评、投票平台,专注于为用户提供功能强大')
p3.paragraph_format.line_spacing = 1.5
2).段前段后
p4.paragraph_format.space_before = Pt(120) # 段前
p3.paragraph_format.space_after=Pt(50) # 段后
3).行前缩进
p4.paragraph_format.first_line_indent=Pt(40)
doc.save('files/demo2.docx')
3. 主题样式
from docx import Document
from docx.enum.style import WD_STYLE_TYPE,WD_BUILTIN_STYLE
from docx.shared import Pt,Cm,RGBColor
doc = Document()
主题样式有三种:基于run添加的样式、基于paragraph、基于table
# 所有的主题样式 print(doc.styles) for x in doc.styles: print(x,x.type)
基于run添加的主题样式
h1=doc.add_heading(level=1)
run1 = h1.add_run('hello',style='Subtle Reference')
run1.font.size=Pt(40)
1. 将和run相关的所有主题样式显示出来
for x in doc.styles:
if x.type==WD_STYLE_TYPE.CHARACTER:
p=doc.add_paragraph()
p.add_run('character(run) style is:'+x.name,style=x.name)
基于paragraph的主题样式
p1=doc.add_paragraph('word',style='Title')
doc.add_heading('1.基于paragraph添加的所有的主题名称对应的样式:')
for x in doc.styles:
if x.type==WD_STYLE_TYPE.PARAGRAPH:
doc.add_paragraph('character(paragraph) style is:'+x.name,style=x.name)
基于table的主题样式
doc.add_table(4,3,style='Medium Grid 3 Accent 4')
doc.add_heading('3.基于table添加的所有的主题名称对应的样式:')
for x in doc.styles:
if x.type==WD_STYLE_TYPE.TABLE:
p=doc.add_paragraph('表格主题名称:'+x.name)
p.paragraph_format_space_before=Pt(50)
doc.add_table(4,3,style=x.name)
doc.save('files/主题样式.docx')
4. 表格使用
from docx import Document
from docx.shared import Pt,Cm,RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
doc=Document()
添加表格
table=doc.add_table(3,4,style='Table Grid')
添加行和列
table.add_row() # 在最下面添加一行
table.add_column(Pt(100)) # 在最右边添加一列
设置单元格内容
1).直接给单元格赋值
cell1=table.cell(0,0)
cell1.text='姓名'
cell1.vertical_alignment=WD_CELL_VERTICAL_ALIGNMENT.CENTER
2).通过获取单元格的段落对象来添加run赋值
cell2=table.cell(0,1)
p=cell2.paragraphs[0]
run1=p.add_run('价格')
run2=p.add_run('(元)')
设置表格样式
1).直接设置表格样式,会直接作用于整个表格
table.style.font.size=Pt(20)
table.style.font.color.rgb=RGBColor(100,89,70)
table.style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
2).基于单元格设置样式,必须基于单元格内容对应的run去设置
run1.font.color.rgb =RGBColor(255,0,0)
行高与列宽
# 设置每一行的高度
rows =table.rows # 获取所有的行
cols =table.columns #获取所有的列
for row in rows:
# 获取所有的单元格
print(row.cells)
row.cells[1].text='100'
# 获取行下标
print(row._index)
if row._index==0:
row.height = Pt(40) # 设置行高需要获得行对象
else:
row.height = Pt(25) # 行对象.height=Pt(高度)
for col in cols:
print(col.cells)
col.cells[0].text='hello' # 每一列的第一个单元格
print(col._index) # 列下标
# 行宽不允许设
doc.save('files/表格.docx')
5. 作业
from docx import Document
from docx.shared import Pt,RGBColor
from docx.oxml.ns import qn
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
import openpyxl
doc = Document()
# # 封面:
p1 = doc.add_heading('筑梦高中期中考试数学成绩报告',level=1)
r = p1.style._element.rPr.rFonts
r.set(qn('w:eastAsia'),'宋体')
p1.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
p1.style.font.size = Pt(50)
p1.style.font.bold=True
p2 = doc.add_paragraph()
p3 = doc.add_paragraph()
run2 = p2.add_run('报告人:高二三班班主任张三')
run2.font.bold=True
run3 = p3.add_run('时间:2022年4月15日')
run3.font.bold=True
p1.paragraph_format.space_before=Pt(30)
p1.paragraph_format.space_after=Pt(40)
p2.paragraph_format.first_line_indent=Pt(80)
p3.paragraph_format.first_line_indent=Pt(80)
run2.font.size =Pt(20)
run3.font.size =Pt(20)
doc.add_page_break()
# 取出excel中数据填入word中
wb = openpyxl.load_workbook('files/学生信息.xlsx')
name =wb.sheetnames
print(name)
sheet = wb['students']
m_r=sheet.max_row
m_c=sheet.max_column
a=sheet.cell(1,1).value
n=0 # 不及格人数
m=0 # 最高分人数
score = sheet.cell(2,4).value
for i in range(2,m_r+1):
if sheet.cell(i,4).value < 60:
n+=1
elif sheet.cell(i,4).value > score:
score = sheet.cell(i,4).value
for i in range(2,m_r+1):
if sheet.cell(i,4).value == score:
m+=1
# 创建表格
p4=doc.add_paragraph()
run4 = p4.add_run('下面是学生的数学成绩表:')
run4.font.size=Pt(15)
table=doc.add_table(m_r,m_c,style='Light List Accent 1')
for i in range(1,m_c+1):
a = str(sheet.cell(1, i).value)
cell = table.cell(0,i-1)
p = cell.paragraphs[0]
run3 = p.add_run(a)
run3.font.bold=True
for i in range(2,m_r+1):
for j in range(1,m_c+1):
a = str(sheet.cell(i,j).value)
cell =table.cell(i-1,j-1)
p = cell.paragraphs[0]
run1 = p.add_run(a)
if j == 4 and int(a)<60:
run1.font.color.rgb = RGBColor(255, 0, 0)
elif i == 1:
cell = table.cell(0, j - 1)
p = cell.paragraphs[0]
run2 = p.add_run(a)
run2.font.bold = False
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
for row in table.rows:
row.height=Pt(25)
# 文字总结
p5=doc.add_paragraph()
run5 = p5.add_run('班级一共'+str(m_r)+'位同学'+',其中共有')
p5.paragraph_format.first_line_indent=Pt(10)
p5.paragraph_format.space_before=Pt(20)
run6 = p5.add_run(str(n))
run7=p5.add_run('位同学不及格,此次考试共有'+str(m)+'位同学考了最高分'+str(score)+'分')
run6.font.color.rgb=RGBColor(255,0,0)
p5.style.font.size=Pt(15)
doc.save('files/demo1.docx')
