ReK*_*eKx 9 python header footer python-3.x python-docx
是否有在Microsoft Word(docx
)文件中添加页眉和页脚的解决方法?
提供的头实现python-docx
仍在开发中.
更具体地说,我想补充一下:
在理想的代码如下所示:
from docx import Document
document = Document()
# Add header and footer on all pages
document.save("demo.docx")
Run Code Online (Sandbox Code Playgroud)
模板方法有效,其主要优点是它是一个真正的跨平台解决方案.但是,它要求在文档中已经应用了一次样式.
让我们从python-docx
文档页面考虑玩具示例的(简化)版本.
第一步涉及创建模板文档:
from docx import Document
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first item in ordered list', style='ListNumber'
)
document.save('demo.docx')
Run Code Online (Sandbox Code Playgroud)
(请注意,您也可以在第一步中手动应用样式而不使用python-docx
,即在Word中.)
接下来,您demo.docx
在Microsoft Word中打开它,您在其中:
完成上述操作后,只需删除demo.docx
文档的主要内容(但不删除页眉和页脚的内容!)并再次保存文件.
在第二步中,您可以demo.docx
使用python-docx
来进行所需的更改:
from docx import Document
document = Document('demo.docx')
document.add_heading('A New Title for my Document', 0)
p = document.add_paragraph('A new paragraph having some plain ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('New Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
'first new item in unordered list', style='ListBullet'
)
document.add_paragraph(
'first new item in ordered list', style='ListNumber'
)
document.save('demo.docx')
Run Code Online (Sandbox Code Playgroud)
您甚至可以进一步添加内容,例如具有现有表格样式的表格:
from docx import Document
document = Document('demo.docx')
document.add_page_break()
recordset = [ [1, "101", "Spam"], [2, "42", "Eggs"], [3, "631", "Spam, spam, eggs, and spam"]]
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
row_cells = table.add_row().cells
row_cells[0].text = str(item[0])
row_cells[1].text = str(item[1])
row_cells[2].text = item[2]
table.style = 'ColorfulShading'
document.save('demo.docx')
Run Code Online (Sandbox Code Playgroud)
当然,通过复制自定义文件然后在那里进行必要的更改(例如demo_copy.docx
)而不影响模板,可以避免一直重复第一步:
import shutil
shutil.copyfile('demo.docx', 'demo_copy.docx')
Run Code Online (Sandbox Code Playgroud)
最后,值得一提的是,您还可以使用自定义样式!有关如何使用python-docx
和表样式执行此操作的示例,请参见此处.
小智 0
像这样的东西怎么样(感谢 Eliot K)
from docx import Document
import win32com.client as win32
import os.path
import tempfile
tempdir = tempfile.gettempdir()
msword = win32.gencache.EnsureDispatch('Word.Application')
tempfile = os.path.join(tempdir, "temp.doc")
document = Document()
document.save(tempfile)
doc = msword.Documents.Open(tempfile)
doc.Sections(1).Footers(1).Range.Text = r'Text to be included'
doc.Sections(1).Footers(1).PageNumbers.Add()
doc.SaveAs(tempfile, FileFormat = 0)
document = Document(tempfile)
Run Code Online (Sandbox Code Playgroud)
也许不是最优雅的方法,但应该做你需要的事情。也许将丑陋的保存/加载代码隔离在代码的某个灰尘角落的函数中;-)
再次强调,确实需要一台安装有 Microsoft Office 的 Windows 计算机。
祝你好运!
归档时间: |
|
查看次数: |
4380 次 |
最近记录: |