1 基础知识
1.1 安装python-docx
pip install python-docx
打开文档
doc = Document('test.docx')
添加段落
paragraph = doc.add_paragraph('段落1')
在段落尾部添加文本
wenben=paragraph.add_run('我是中国人')
获取段落数量
print(len(doc.paragraphs))
全局字体设置
doc.styles['Normal'].font.name = u'宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
拓展:修改文本中题号
如:1. 2. 3. 类型
all = re.sub(r'[0-9]{1,5}\.', "*", all)
查询括号内的内容
pattern = r'[(](.*?)[)]'
res = re.findall(pattern, i)
删除括号内的内容
i = re.sub(u"\(.*?\)", "( )", i)
1.2 文字大小 加粗 颜色
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt, RGBColor
doc = Document()
doc = Document()
doc.styles['Normal'].font.name = u'宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
title = doc.add_paragraph()
t1 = title.add_run('公司员工请假条')
t1.font.bold = True
t1.font.size = Pt(20)
t1.font.color.rgb = RGBColor(60,200,250)
doc.save('666.docx')
1.3 首行缩进:
缩进方式 |
属性 |
左边缩进 |
left_indent |
右边缩进 |
right_indent |
首航缩进 |
first_line_indent |
from docx import Document
from docx.shared import Inches
doc = Document()
article = doc.add_paragraph()
a2 = article.add_run(
'因______,特向您请事假____天。请假时间自_____年___月___日至_____年___月___日。这段时间内原计划安排的课程已做好处理,希望领导批准。'
)
article2_format = article.paragraph_format
article2_format.first_line_indent = Inches(0.3)
doc.save('666.docx')
1.4 对齐方式:
名称 |
属性 |
左对齐 |
LEFT |
居中 |
CENTER |
右对齐 |
RIGHT |
文本两端对齐 |
JUSTIFY |
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
doc = Document()
title = doc.add_paragraph()
t1 = title.add_run('公司员工请假条')
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
doc.save('666.docx')
1.5 读取word
word文件:

代码:
from docx import Document
doc = Document('文档.docx')
for paragraph in doc.paragraphs:
print(paragraph.text)
paragraph = doc.paragraphs[1]
runs = paragraph.runs
for run in runs:
print(run.text)
1.6 生成word
from docx import Document
from docx.shared import Cm
doc = Document()
doc.add_heading("一级标题", level=1)
paragraph1 = doc.add_paragraph()
paragraph1.add_run('加粗').bold = True
paragraph1.add_run('普通')
paragraph1.add_run('斜体').italic = True
doc.add_picture('tupian.jpg', width=Cm(5), height=Cm(10))
records = [
['学号', '姓名', '成绩'],
['101', '小红', '98'],
['102', '小明', '95'],
['103', '小李', '100']
]
table = doc.add_table(rows=4, cols=3, style='Table Grid')
for row in range(4):
cells = table.rows[row].cells
for col in range(3):
cells[col].text = str(records[row][col])
doc.add_page_break()
doc.save('测试.docx')
2 案例:请假条

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx import Document
from docx.shared import Pt, Inches
from docx.oxml.ns import qn
doc = Document()
doc.styles['Normal'].font.name = u'宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
title = doc.add_paragraph()
title1 = title.add_run('公司员工请假条')
title1.font.size = Pt(20)
title1.bold = True
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
article1 = doc.add_paragraph()
a1 = article1.add_run('__________部:')
article2 = doc.add_paragraph()
a2 = article2.add_run(
'因________________________________________,特向您请事假____天。请假时间自_____年___月___日至_____年___月___日。这段时间内原计划安排的课程已做好处理,希望领导批准。'
)
article2_format = article2.paragraph_format
article2_format.first_line_indent = Inches(0.3)
article3 = doc.add_paragraph()
a3 = article3.add_run('请假人:')
article3.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
article3_format = article3.paragraph_format
article3_format.right_indent = Inches(0.9)
nowData = doc.add_paragraph()
n3 = nowData.add_run('年 月 日')
nowData.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
nowData_format = nowData.paragraph_format
nowData_format.right_indent = Inches(0.3)
doc.save('test.docx')
<h2><a id="1__1"></a>1 基础知识</h2>
<h3><a id="11_pythondocx_2"></a>1.1 安装python-docx</h3>
<pre><div class="hljs"><code class="lang-python">pip install python-docx
</code></div></pre>
<p><strong>打开文档</strong></p>
<pre><div class="hljs"><code class="lang-python">doc = Document(<span class="hljs-string">'test.docx'</span>)
</code></div></pre>
<p><strong>添加段落</strong></p>
<pre><div class="hljs"><code class="lang-python">paragraph = doc.add_paragraph(<span class="hljs-string">'段落1'</span>)
</code></div></pre>
<p><strong>在段落尾部添加文本</strong></p>
<pre><div class="hljs"><code class="lang-python">wenben=paragraph.add_run(<span class="hljs-string">'我是中国人'</span>)
</code></div></pre>
<p><strong>获取段落数量</strong></p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-comment"># 段落数量</span>
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">len</span>(doc.paragraphs))
</code></div></pre>
<p><strong>全局字体设置</strong></p>
<pre><div class="hljs"><code class="lang-python">doc.styles[<span class="hljs-string">'Normal'</span>].font.name = <span class="hljs-string">u'宋体'</span>
doc.styles[<span class="hljs-string">'Normal'</span>]._element.rPr.rFonts.<span class="hljs-built_in">set</span>(qn(<span class="hljs-string">'w:eastAsia'</span>), <span class="hljs-string">u'宋体'</span>)
</code></div></pre>
<p><strong>拓展:修改文本中题号</strong><br />
如:1. 2. 3. 类型</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-built_in">all</span> = re.sub(<span class="hljs-string">r'[0-9]{1,5}\.'</span>, <span class="hljs-string">"*"</span>, <span class="hljs-built_in">all</span>)
</code></div></pre>
<p><strong>查询括号内的内容</strong></p>
<pre><div class="hljs"><code class="lang-python">pattern = <span class="hljs-string">r'[(](.*?)[)]'</span>
res = re.findall(pattern, i)
</code></div></pre>
<p>删除括号内的内容</p>
<pre><div class="hljs"><code class="lang-python">i = re.sub(<span class="hljs-string">u"\(.*?\)"</span>, <span class="hljs-string">"( )"</span>, i)
</code></div></pre>
<h3><a id="12____44"></a>1.2 文字大小 加粗 颜色</h3>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> docx <span class="hljs-keyword">import</span> Document
<span class="hljs-keyword">from</span> docx.oxml.ns <span class="hljs-keyword">import</span> qn
<span class="hljs-keyword">from</span> docx.shared <span class="hljs-keyword">import</span> Pt, RGBColor
doc = Document()
doc = Document()
<span class="hljs-comment"># 全局字体设置</span>
doc.styles[<span class="hljs-string">'Normal'</span>].font.name = <span class="hljs-string">u'宋体'</span>
doc.styles[<span class="hljs-string">'Normal'</span>]._element.rPr.rFonts.<span class="hljs-built_in">set</span>(qn(<span class="hljs-string">'w:eastAsia'</span>), <span class="hljs-string">u'宋体'</span>)
title = doc.add_paragraph()
t1 = title.add_run(<span class="hljs-string">'公司员工请假条'</span>) <span class="hljs-comment"># 内容</span>
t1.font.bold = <span class="hljs-literal">True</span> <span class="hljs-comment"># 加粗</span>
t1.font.size = Pt(<span class="hljs-number">20</span>) <span class="hljs-comment"># 设置字体大小</span>
t1.font.color.rgb = RGBColor(<span class="hljs-number">60</span>,<span class="hljs-number">200</span>,<span class="hljs-number">250</span>) <span class="hljs-comment">#字体颜色</span>
doc.save(<span class="hljs-string">'666.docx'</span>)
</code></div></pre>
<h3><a id="13__66"></a>1.3 首行缩进:</h3>
<table>
<thead>
<tr>
<th>缩进方式</th>
<th>属性</th>
</tr>
</thead>
<tbody>
<tr>
<td>左边缩进</td>
<td>left_indent</td>
</tr>
<tr>
<td>右边缩进</td>
<td>right_indent</td>
</tr>
<tr>
<td>首航缩进</td>
<td>first_line_indent</td>
</tr>
</tbody>
</table>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> docx <span class="hljs-keyword">import</span> Document
<span class="hljs-keyword">from</span> docx.shared <span class="hljs-keyword">import</span> Inches
doc = Document()
article = doc.add_paragraph()
a2 = article.add_run(
<span class="hljs-string">'因______,特向您请事假____天。请假时间自_____年___月___日至_____年___月___日。这段时间内原计划安排的课程已做好处理,希望领导批准。'</span>
)
<span class="hljs-comment"># 首行缩进2个字符</span>
article2_format = article.paragraph_format
article2_format.first_line_indent = Inches(<span class="hljs-number">0.3</span>)
doc.save(<span class="hljs-string">'666.docx'</span>)
</code></div></pre>
<h3><a id="14__89"></a>1.4 对齐方式:</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>属性</th>
</tr>
</thead>
<tbody>
<tr>
<td>左对齐</td>
<td>LEFT</td>
</tr>
<tr>
<td>居中</td>
<td>CENTER</td>
</tr>
<tr>
<td>右对齐</td>
<td>RIGHT</td>
</tr>
<tr>
<td>文本两端对齐</td>
<td>JUSTIFY</td>
</tr>
</tbody>
</table>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> docx <span class="hljs-keyword">import</span> Document
<span class="hljs-keyword">from</span> docx.enum.text <span class="hljs-keyword">import</span> WD_PARAGRAPH_ALIGNMENT
doc = Document()
title = doc.add_paragraph()
t1 = title.add_run(<span class="hljs-string">'公司员工请假条'</span>) <span class="hljs-comment"># 内容</span>
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER <span class="hljs-comment"># 居中</span>
doc.save(<span class="hljs-string">'666.docx'</span>)
</code></div></pre>
<h3><a id="15_word_109"></a>1.5 读取word</h3>
<p>word文件:</p>
<p><img src="https://static.couragesteak.com/article/4de179d855c2d834415d3ad6a2aa6bd6.png" alt="image.png" /></p>
<p>代码:</p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> docx <span class="hljs-keyword">import</span> Document
doc = Document(<span class="hljs-string">'文档.docx'</span>)
<span class="hljs-comment"># 获取段落文字 不带格式</span>
<span class="hljs-keyword">for</span> paragraph <span class="hljs-keyword">in</span> doc.paragraphs:
<span class="hljs-built_in">print</span>(paragraph.text)
<span class="hljs-comment"># 文字块:获取第二段文字 带格式</span>
paragraph = doc.paragraphs[<span class="hljs-number">1</span>] <span class="hljs-comment">#获取第二段落</span>
runs = paragraph.runs
<span class="hljs-keyword">for</span> run <span class="hljs-keyword">in</span> runs:
<span class="hljs-built_in">print</span>(run.text)
</code></div></pre>
<h3><a id="16_word_130"></a>1.6 生成word</h3>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> docx <span class="hljs-keyword">import</span> Document
<span class="hljs-keyword">from</span> docx.shared <span class="hljs-keyword">import</span> Cm
<span class="hljs-comment"># 实例化</span>
doc = Document()
<span class="hljs-comment"># 标题</span>
doc.add_heading(<span class="hljs-string">"一级标题"</span>, level=<span class="hljs-number">1</span>)
<span class="hljs-comment"># 添加一个带格式段落</span>
paragraph1 = doc.add_paragraph()
paragraph1.add_run(<span class="hljs-string">'加粗'</span>).bold = <span class="hljs-literal">True</span>
paragraph1.add_run(<span class="hljs-string">'普通'</span>)
paragraph1.add_run(<span class="hljs-string">'斜体'</span>).italic = <span class="hljs-literal">True</span>
<span class="hljs-comment"># 添加图片</span>
doc.add_picture(<span class="hljs-string">'tupian.jpg'</span>, width=Cm(<span class="hljs-number">5</span>), height=Cm(<span class="hljs-number">10</span>))
<span class="hljs-comment"># 添加表格 doc.add_table(rows=行, cols=列)</span>
<span class="hljs-comment"># cells; 格子</span>
records = [
[<span class="hljs-string">'学号'</span>, <span class="hljs-string">'姓名'</span>, <span class="hljs-string">'成绩'</span>],
[<span class="hljs-string">'101'</span>, <span class="hljs-string">'小红'</span>, <span class="hljs-string">'98'</span>],
[<span class="hljs-string">'102'</span>, <span class="hljs-string">'小明'</span>, <span class="hljs-string">'95'</span>],
[<span class="hljs-string">'103'</span>, <span class="hljs-string">'小李'</span>, <span class="hljs-string">'100'</span>]
]
table = doc.add_table(rows=<span class="hljs-number">4</span>, cols=<span class="hljs-number">3</span>, style=<span class="hljs-string">'Table Grid'</span>)
<span class="hljs-keyword">for</span> row <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">4</span>):
cells = table.rows[row].cells
<span class="hljs-keyword">for</span> col <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">3</span>):
cells[col].text = <span class="hljs-built_in">str</span>(records[row][col])
<span class="hljs-comment"># 添加分页</span>
doc.add_page_break()
doc.save(<span class="hljs-string">'测试.docx'</span>)
</code></div></pre>
<h2><a id="2__174"></a>2 案例:请假条</h2>
<p><img src="https://static.couragesteak.com/article/920d2f43a0c6fa646e26c290e5284829.png" alt="image.png" /></p>
<pre><div class="hljs"><code class="lang-python"><span class="hljs-keyword">from</span> docx.enum.text <span class="hljs-keyword">import</span> WD_PARAGRAPH_ALIGNMENT
<span class="hljs-keyword">from</span> docx <span class="hljs-keyword">import</span> Document
<span class="hljs-keyword">from</span> docx.shared <span class="hljs-keyword">import</span> Pt, Inches
<span class="hljs-keyword">from</span> docx.oxml.ns <span class="hljs-keyword">import</span> qn
doc = Document()
<span class="hljs-comment"># 全局字体设置</span>
doc.styles[<span class="hljs-string">'Normal'</span>].font.name = <span class="hljs-string">u'宋体'</span>
doc.styles[<span class="hljs-string">'Normal'</span>]._element.rPr.rFonts.<span class="hljs-built_in">set</span>(qn(<span class="hljs-string">'w:eastAsia'</span>), <span class="hljs-string">u'宋体'</span>)
<span class="hljs-comment"># 1、标题</span>
title = doc.add_paragraph()
title1 = title.add_run(<span class="hljs-string">'公司员工请假条'</span>) <span class="hljs-comment"># 内容</span>
title1.font.size = Pt(<span class="hljs-number">20</span>) <span class="hljs-comment"># 设置字体大小</span>
title1.bold = <span class="hljs-literal">True</span> <span class="hljs-comment"># 加粗</span>
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER <span class="hljs-comment"># 居中</span>
<span class="hljs-comment"># 2、正文</span>
article1 = doc.add_paragraph()
a1 = article1.add_run(<span class="hljs-string">'__________部:'</span>)
article2 = doc.add_paragraph()
a2 = article2.add_run(
<span class="hljs-string">'因________________________________________,特向您请事假____天。请假时间自_____年___月___日至_____年___月___日。这段时间内原计划安排的课程已做好处理,希望领导批准。'</span>
)
<span class="hljs-comment"># 首行缩进 负值表示悬挂缩进</span>
article2_format = article2.paragraph_format
article2_format.first_line_indent = Inches(<span class="hljs-number">0.3</span>)
article3 = doc.add_paragraph()
a3 = article3.add_run(<span class="hljs-string">'请假人:'</span>) <span class="hljs-comment"># 内容</span>
article3.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
article3_format = article3.paragraph_format
article3_format.right_indent = Inches(<span class="hljs-number">0.9</span>)
nowData = doc.add_paragraph()
n3 = nowData.add_run(<span class="hljs-string">'年 月 日'</span>) <span class="hljs-comment"># 内容</span>
nowData.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
nowData_format = nowData.paragraph_format
nowData_format.right_indent = Inches(<span class="hljs-number">0.3</span>)
<span class="hljs-comment"># 这一步调整文件格式为居中</span>
doc.save(<span class="hljs-string">'test.docx'</span>)
</code></div></pre>
留言