私は複数のテーブルを持つdocxファイルを持っています。リストのテーブルからすべての情報を取得したいのです(リストは 'alletabellen'と呼ばれます)。 以下のスクリプトでは、ドロップダウンリスト(一部の表のセル内)にある変数の値を除いて、表内のほとんどの情報を受け取ります。 これらのセルの値は私のリストでは空のままです(変数 'Number:'の値 '1.2'など、https://s30.postimg.org/477j8z6ch/table.pngを参照してください)。python-docx dropdownlist(テーブル)から情報を取得
これらの変数から情報を取得することは可能ですか?
import docx
bestand = docx.Document('somefile.docx')
tabellen = bestand.tables
alletabellen = []
for i, tabel in enumerate(tabellen):
for row in tabellen[i].rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
alletabellen.append(paragraph.text)
更新
私は解決策(右方向に私を指摘誰scannyのおかげで)見つけました。 私は、docxファイルが、実際には、他のものの中のすべてのテキストを含むXMLファイルを含むzipファイルであることを認識しませんでした。モジュールzipfileを使用してdocxを抽出し、モジュールbs4を使用してすべてのドロップダウンリストタグ( 'ddList')を見つけ、リストにデータを入れました。私の文書には12のドロップダウンリストがあり、そのうち3つしか必要としませんでした(そのうちの1つはスクリーンショットの「番号:」で、これは文書の最初のドロップダウンリストです)。
import docx
import zipfile
from bs4 import BeautifulSoup
doc = 'somefile.docx'
bestand = docx.Document(doc)
tabellen = bestand.tables
#get data from all the "normal" fields
alletabellen = []
for i, tabel in enumerate(tabellen):
for row in tabellen[i].rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
alletabellen.append(paragraph.text)
#get data from all the dropdown lists
document = zipfile.ZipFile(doc)
xml_data = document.read('word/document.xml')
document.close()
soup = BeautifulSoup(xml_data, 'xml')
gegevens = soup.findAll('ddList') #search dropdownlists (n = 12)
dropdownlist = []
dropdownlistdata = []
for i in gegevens:
dropdownlist.append(i.find('result'))
#convert to string for if statements
number = str(dropdownlist[0])
job = str(dropdownlist[1])
vehicle = str(dropdownlist[7])
if number == '<w:result w:val="1"/>' :
dropdownlistdata.append('0,3')
elif number == '<w:result w:val="2"/>' :
dropdownlistdata.append('1,2')
elif number == '<w:result w:val="3"/>' :
dropdownlistdata.append('onbekend')
else:
dropdownlistdata.append('geen')
if job == '<w:result w:val="1"/>' :
dropdownlistdata.append('nee')
else:
dropdownlistdata.append('ja')
if vehicle == '<w:result w:val="1"/>' :
dropdownlistdata.append('nee')
else:
dropdownlistdata.append('ja')
#show data
print alletabellen
print dropdownlistdata
Omg、今日まで私はdocxファイルが実際には圧縮されたファイルであることを知らなかった!ご回答有難うございます。 私は、zipfileモジュールを使ってdocxを解凍し、/word/document.xmlを読んで、BeautifulSoupで特定の要素を調べるためにスクリプトにいくつかの行を追加しました。私はほとんどそこにいると思う。明日は私のスクリプトを終わらせようとします。 – Joost