python往word文档中写入表格、段落、标题、图片...(超级全) |
您所在的位置:网站首页 › word表格中加入文字 › python往word文档中写入表格、段落、标题、图片...(超级全) |
1、安装python-docx
我们使用python-docx来操作word文档,首先是安装: pip install python-docx -i https://pypi.tuna.tsinghua.edu.cn/simple然后放两个参考文档: 官方手册:https://python-docx.readthedocs.io/en/latest/index.htmlpypi官方地址:https://pypi.org/project/python-docx/ 使用步骤 步骤1 导入docx模块步骤2 创建或读取一个文档对象步骤3 向文档写入内容步骤4 生成docx文件上代码: # 步骤1 from docx import Document # 步骤2 document = Document() # 新建文档对象 # document = Document("test.docx") # 读取现有word文档,建立文档对象 # 步骤3 ... # 步骤4 document.save("test.docx") # 保存文档 2、添加标题要求:添加标题,能设置标题的字体、大小、颜色等 上代码: from docx import Document from docx.shared import Pt, RGBColor from docx.oxml.ns import qn d = Document() # 第一种设置标题的方式 d.add_heading("一级标题 hello world", level=0) # 第二种设置标题的方式,此方式还可以设置文本的字体、颜色、大小等属性 run = d.add_heading("", level=1).add_run("二级标题") # 设置西文字体 run.font.name = u'宋体' # 设置中文字体 run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 设置字体颜色 run.font.color.rgb = RGBColor(255, 55, 55) # 红色 # 设置字体大小 run.font.size = Pt(30) # 设置下划线 run.font.underline = True # 设置删除线 run.font.strike = True # 设置加粗 run.bold = True # 设置斜体 run.italic = True # 保存文档 d.save("test.docx")代码解释: 方法名描述add_heading(text="", level=1)写入标题,默认标题样式为level1,level范围为0-9add_run(text=None, style=None)可以添加文本(包括标题、正文、表格文字等),并且能为其设置字体格式、颜色、大小等属性 设置字体有两种方式,一种是全局配置,但是只对正文起作用:d = Document() d.styles['Normal'].font.name = u'宋体' d.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') 但是上面这种方式无法对add_heading()起作用,需要对标题设置字体,需要使用下面这种方式:run = d.add_heading("", level=3).add_run("三级标题") run.font.name = u'宋体' run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') 使用run.font.size = Pt(30)设置字体大小,Pt表示磅,与字号对应关系如下: 号数磅值 (Pt)初号42小初36一号26小一24二号22小二18三号16小三15四号14小四12五号10.5小五9六号7.5小六6.5七号5.5八号5 3、添加段落 举例1:段落、分页、有序列表、无序列表、引用上代码 from docx import Document from docx.shared import Pt from docx.oxml.ns import qn d = Document() # 设置全局属性 d.styles['Normal'].font.size = Pt(20) d.styles['Normal'].font.name = u'Times New Roman' d.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'), '宋体') # 新增一个段落 p1 = d.add_paragraph("这是第一个段落:") # 继续添加文字 run = p1.add_run("段落中的文字") run.font.size = Pt(10.5) run.font.name = u'宋体' run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体') # 有序列表 d.add_paragraph("有序列表1111", style="List Number") d.add_paragraph("有序列表2222", style="List Number") # 无序列表 d.add_paragraph("无序列表3333", style="List Bullet") d.add_paragraph("无序列表4444", style="List Bullet") # 引用 d.add_paragraph("引用5555", style="Intense Quote") # 在段落p1前添加一个段落 p1.insert_paragraph_before("在段落p1前添加一个段落,我才是第一个段落") # 增加分页 d.add_page_break() # 添加一个段落 p2 = d.add_paragraph("我是新分页中的段落") # 新分页中文字首行缩进两个字 p2.paragraph_format.first_line_indent = Pt(20) * 2 d.save("1111.docx")效果图: 代码解释: 方法名描述add_paragraph(text="", style=None)1、插入段落,通过style可以设置插入段落的类型2、List Number 表示有序段落3、List Bullet 表示无序段落4、Intense Quote 表示引用insert_paragraph_before(text=None, style=)插入段落到现有段落之前add_page_break()新增分页,后续的内容会出现在新的分页中 字体效果:如果设置了全局的字体属性,那么所有正文都是那种字体,但是可以通过add_run()对象设置新的字体首行缩进:通过设置paragraph_format.first_line_indent属性可以设置缩进大小为当前字体大小的2倍 举例2:对齐、间距、行距上代码 from docx import Document from docx.shared import Pt, Inches from docx.oxml.ns import qn from docx.enum.text import WD_PARAGRAPH_ALIGNMENT d = Document() d.styles['Normal'].font.size = Pt(20) d.styles['Normal'].font.name = u'Times New Roman' d.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'), '宋体') p = d.add_paragraph("《静夜思》" "床前明月光," "疑似地上霜。" "举头望明月," "低头思故乡。") # 设置对齐格式 # 可选项有LEFT、CENTER、RIGHT、JUSTIFY、DISTRIBUTE等 p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 设置段落缩进 d.add_paragraph("右缩进,0.5英寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸寸").paragraph_format.right_indent = Inches(0.5) d.add_paragraph("左缩进,20磅").paragraph_format.left_indent = Pt(20) d.add_paragraph("首行缩进2个字符").paragraph_format.first_line_indent = Pt(20) * 2 # 设置段落间距 1.5倍行间距 1.5, 单倍行间距 1.0 d.add_paragraph("line_spacing设置为浮点数,表示行间距为行高的倍数").paragraph_format.line_spacing = 1.5 d.add_paragraph("line_spacing设置为具体的长度值,表示绝对距离").paragraph_format.line_spacing = Pt(50) d.add_paragraph("space_before表示段前间距").paragraph_format.space_before = Pt(100) d.add_paragraph("space_after表示段后间距").paragraph_format.space_after = Pt(30) # 设置段落内部文字在遇到需分页情况时处理状态 p2 = d.add_paragraph("很长的段落很长的段落很长的段落很长的段落很长的段落很长的段落很长的段落很长的段落很长的段落很长的段落很长的段落") p2.paragraph_format.keep_together = True # 段中不分页 p2.paragraph_format.keep_with_next = True # 与下段同页 p2.paragraph_format.page_break_before = True # 段前分页 p2.paragraph_format.widow_control = True # 孤行控制 d.save("11111.docx")效果图: 上代码: from docx import Document d = Document() t = d.add_table(rows=6, cols=4, style="Table Grid") # 通过行、列来确定单元格,索引从0开始 cell = t.cell(0, 0) cell.text = "第1行第1列" # 获取第2行 rows = t.rows[1] for cell in rows.cells: cell.text = f"第2行第..列" # 获取第3列 cols = t.columns[2] for cell in cols.cells: cell.text = f"第3列第..行" # 增加行、增加列 for cell in t.add_row().cells: cell.text = "新增行" t.add_column(cell.width) d.save("ttt.docx")效果图: 代码解释: 方法名描述add_row()新增1行add_column(width)新增1列,width列宽必须指定add_table(rows, cols, style=None)添加表格的方法,rows、cols为必填,style表示表格的样式,常用Table Grid,未赋值情况下表格为虚线,其他style样式如下:上代码: from docx import Document from docx.oxml.ns import nsdecls from docx.oxml import parse_xml from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT d = Document() t = d.add_table(rows=5, cols=6, style="Table Grid") # 首行设置背景色 rows = t.rows[0] for cell in rows.cells: shading_elm = parse_xml(r''.format(nsdecls('w'))) cell._tc.get_or_add_tcPr().append(shading_elm) # 合并单元格 a = t.cell(1, 0) a.text = '111' b = t.cell(2, 1) b.text = '222' b.merge(a) # 往合并单元格中写入 e = t.cell(3, 3) f = t.cell(4, 4) e.merge(f) cell = t.cell(3, 4) cell.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 水平居中 cell.paragraphs[0].add_run("合并单元格写入") cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中 d.save("tttt.docx")效果图: 代码解释: 首行设置背景色:固定写法。fill="D9D9D9"可以在http://tool.chinaz.com/Tools/PageColor.aspx中找你需要的颜色进行替换合并后的单元格写入,可以使用它所包含的所有单元格来定位,比如:合并(3, 3)和(4, 4)之间的单元格,那么可以通过(3, 3)(3, 4)(4, 3)(4, 4)定位这个合并后的单元格单元格中设置居中方式:WD_CELL_VERTICAL_ALIGNMENT可以设置为如下几种: TOP 文本与单元格的上边框对齐CENTER 文本与单元格的中心对齐BOTTOM 文本与单元格的底部边框对齐 cell = t.cell(3, 4) cell.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 水平居中 cell.paragraphs[0].add_run("合并单元格写入") cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中 4、添加图片上代码: from docx import Document from docx.shared import Pt, Inches d = Document() d.add_picture("test.png", Inches(5)) d.add_picture("test.png", Pt(200)) d.save("ppp.docx")代码解释: 方法名描述add_picture(image_path_or_stream, width=None, height=None)添加图片函数,如果没有指定width和height,会将原图添加到文档中。有指定则会按比例缩放。 5、添加页眉页脚暂时没用到,需要可以参考下面的文章 参考文章: 这个很全:https://blog.csdn.net/qq_45464895/article/details/123173742https://blog.csdn.net/hihell/article/details/121966945https://www.cnblogs.com/1gaoyu/p/12656003.htmlhttps://www.5axxw.com/wiki/content/kbhv5mhttps://www.5axxw.com/wiki/topic/l8oj0bhttps://www.5axxw.com/wiki/content/qa5cihhttps://www.cnblogs.com/wangyueping/p/16018206.htmlhttps://blog.csdn.net/weixin_47383889/article/details/119847787https://blog.csdn.net/u012034742/article/details/106022019/https://blog.csdn.net/qq_27017791/article/details/108897521http://tool.chinaz.com/Tools/PageColor.aspxhttps://www.zhihu.com/question/511536143/answer/2313422603 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |