Put Header with Python - docx

五迷三道 提交于 2019-12-02 16:57:40

问题


I am using Python-docx to create and write a Word document.

How i can put a text in document header using python-docx?

http://image.prntscr.com/image/8757b4e6d6f545a5ab6a08a161e4c55e.png

Thanks


回答1:


Unfortunately this feature is not implemented yet. The page @SamRogers linked to is part of the enhancement proposal (aka. "analysis page"). The implementation is in progress however, by @eupharis, so might be available in a month or so. The ongoing pull request is here if you want to follow it. https://github.com/python-openxml/python-docx/pull/291




回答2:


I've been using it to work

header = document.sections[0].header
header.add_paragraph('Test Header')

Header is a subclass of BlockItemContainer, from which it inherits the same content editing capabilities as Document, such as .add_paragraph().




回答3:


(With respect that this question is old...)

I have used a work-around in my project where my "client" wanted different headers in different pages by:

  1. Creating a document using python-docx and section breaks

  2. Execute a word macro file (*.xlsm) with two arguments: (1) fileName = path, docTitle = title of the document to be inserted in footer.

The macro file will open the newly created document and add headers and footers that are already inside the macro file. This would need to be modified if the header and footer text need to vary.

Pyton code:

wd = win32com.client.Dispatch("Word.Application")
wd.Visible = False
doc = wd.Documents.Open(pathToDOCM) # path here
wd.Run("Main.RunMain",fileName, docTitle) # 2 args
doc.Close()
del wd

VBA code:

VBA (inside *.xlsm) code:

Sub RunInside()
    Call RunMain("C:\Users\???\dokument.docx", "test")
End Sub

Sub RunMain(wordDocument As String, wordTitle As String)
    ' Create Headers
    Call CreateHeaders(wordDocument, wordTitle)
End Sub

Sub CreateHeaders(wordDocument As String, wordTitle As String)

    Dim i As Integer
    Dim outputName As String

    Dim aDoc As Document
    Dim oApp As Word.Application
    Dim oSec As Word.Section
    Dim oDoc As Word.Document

    Dim hdr1, hdr2 As HeaderFooter
    Dim ftr1, ftr2 As HeaderFooter

    'Create a new document in Word
    Set oApp = New Word.Application
    'Set oDoc = oApp.Documents.Add
    Set oDoc = oApp.Documents.Open(wordDocument)
    'Set aDoc as active document
    Set aDoc = ActiveDocument


    oDoc.BuiltInDocumentProperties("Title") = wordTitle


    For i = 1 To 9:
        Set hdr1 = aDoc.Sections(i).Headers(wdHeaderFooterPrimary)
        Set hdr2 = oDoc.Sections(i).Headers(wdHeaderFooterPrimary)

        Set ftr1 = aDoc.Sections(i).Footers(wdHeaderFooterPrimary)
        Set ftr2 = oDoc.Sections(i).Footers(wdHeaderFooterPrimary)


        If i > 1 Then
            With oDoc.Sections(i).Headers(wdHeaderFooterPrimary)
             .LinkToPrevious = False
            End With

            With oDoc.Sections(i).Footers(wdHeaderFooterPrimary)
             .LinkToPrevious = False
            End With
        End If

        hdr1.Range.Copy
        hdr2.Range.Paste

        ftr1.Range.Copy
        ftr2.Range.Paste

    Next i



    outputName = Left(wordDocument, Len(wordDocument) - 5)
    outputName = outputName + ".pdf"

    oDoc.SaveAs outputName, 17

    oDoc.Close SaveChanges:=wdSaveChanges

    Set oDoc = Nothing
    Set aDoc = Nothing

End Sub

Final remark: The code loops through different sections and copy-paste the header and footers. It also saves the document to *.PDF.




回答4:


This feature has been implemented. See: https://python-docx.readthedocs.io/en/latest/dev/analysis/features/header.html

You can add text to the header of a word document using python-docx as follows:

header = document.sections[0].header
head = header.paragraphs[0]
head.text = 'Add Your Text'



回答5:


You can use header.text like

header = section.header
header.text = 'foobar'

see http://python-docx.readthedocs.io/en/latest/dev/analysis/features/header.html?highlight=header for more information



来源:https://stackoverflow.com/questions/38508320/put-header-with-python-docx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!