Reading Table Contet In Header And Footer In MS-Wo

2019-03-01 13:33发布

问题:

This is my extended question for the question:

How to read contents of an Table in MS-Word file Using Python?

The solution provided by @YusuMishi is great, but it does not catch the headers in the header and footer.

Let me elaborate on that:

Using the code

import win32com.client as win32
import os
word = win32.Dispatch("Word.Application")
word.Visible = 0
p = os.path.abspath("Catch my tables.docx")
word.Documents.Open(p)
doc = word.ActiveDocument
print doc.Tables.Count

I will get 2 printed (Table 1 and Table 2)

How do I go through the information in Table 0 and Table N

Get the document here

回答1:

Accessing Headers and Footers is a bit tricky. Here is how to do it:

HeaderTable = doc.Sections(1).Headers(1).Range.Tables(1)
FooterTable = doc.Sections(1).Footers(1).Range.Tables(1)

You can get the table count this way:

HeaderTablesCount = doc.Sections(1).Headers(1).Range.Tables.Count
FooterTablesCount = doc.Sections(1).Footers(1).Range.Tables.Count

And get the text from cells this way:

HeaderTable.Cell(1,1).Range.Text
FooterTable.Cell(1,1).Range.Text


回答2:

Unfortunately I'm not phyton programmer but have some knowledge of MS-Word VBA and objects hierarchy. This would be to much text to put in comment (where I'd rather put this tip).

If you search your table you have to analyse different Document.StoryRanges to find your table. There are Footers and Headers but they are additionally divided into different types. So, to find you Table 0 you could use something of this structure:

This is VBA code!! I hope you could adjust to your needs. And do it separately for you footers.

doc.StoryRanges(wdEvenPagesHeaderStory).Tables.Count
doc.StoryRanges(wdFirstPageHeaderStory).Tables.Count
doc.StoryRanges(wdPrimaryHeaderStory).Tables.Count