lauuster Ответов: 1

Как извлечь таблицу word в excel с помощью Python?


Я новичок в Python. Я попытался написать код для извлечения деталей из ячейки таблицы конкретного слова и экспорта в Excel. Тем не менее, я, кажется, не могу извлечь правильные детали из таблицы word в лист excel. Я могу извлечь детали из строки 1-3, но не для других строк

Ниже приводится таблица слов:

https://i.stack.imgur.com/0rQZS.png[^]

Что я уже пробовал:

import os
import xlsxwriter
import xlwt
import docx
 


from docx import Document
#read single file 
doc = Document ('/Users/TP/approach/data/sample.docx')

#read multiple files 
path = "/Users/TP/approach/data/"
files = os .  listdir  ( path )  
docx_list =   [  ]  
for f in files :  
    if os . path .  splitext  ( f )  [  1  ]   ==   '.docx'  :  
        docx_list .  append  ( path +   '//'   + f )  
    else  : 
        pass

#read form 
tb = doc.tables
#read line
rows = tb[0].rows
#read column
cols = rows[0].cells
#read cell
cell = cols [ 0 ] 
text = cell . text
`
mat =   [  ]  
for a in range  (  len  ( docx_list )  )  :  
    doc =  Document  ( docx_list [ a ]  )  
    tb = doc . tables [  0  ] 


row = []
#From row 1-3, the code is following.

# Get the 2nd row of data 
for i in  range ( 1 , 7 , 6 ) : 
    cell = tb . cell ( 1 , i ) 
    txt = cell . text if cell . text !=  ''  else  ''   # No content with spaces
    row . append ( txt )


#From row 5-9, the code is following
# Get the 5th row of data
for l in  range ( 1 , 7 , 6 ) : 
    cell = tb . cell ( 4 , l ) 
    txt = cell . text if cell . text !=  ''  else  ''   # No content with spaces
    row . append ( txt )
# Get the 6th row of data
for m in   ( 1, 7 , 6  ) : 
    cell = tb . cell ( 5 , m ) 
    txt = cell . text if cell . text !=  ''  else  ''   # No content with spaces
    row . append ( txt )
# Get the 7th row of data
for n in  range ( 2 , 7 , 1) : 
        cell = tb . cell ( 6 , n ) 
        txt = cell . text if cell . text !=  ''  else  ''   # No content with spaces
        row . append ( txt )
# Get the 8th row of data
for o in  range ( 3 , 7, 1) : 
    cell = tb . cell ( 7 , o ) 
    txt = cell . text if cell . text !=  ''  else  ''   # No content with spaces
    row . append ( txt )


#Create workbook
workbook = xlsxwriter.Workbook('/Users/TP/missed_approach/output/missed approach_output_7.xlsx')

#add sheet
xlsheet = workbook.add_worksheet('data')
#add header
table_head = [' date ', 'time','aircraft_call_sign','runway_in_use','aircraft_type','persons_on_board','name_of_airline','point_of_depature','aircraft_registration','destination','reason']
headlen = len(table_head)

for i in range(headlen):
    xlsheet.write(0,i,table_head[i])
for i in range(len(mat)):
    for j in range(len(row)):
        xlsheet.write(i+1,j,mat[i][j])
workbook.close()

Richard MacCutchan

Я вижу, что вы обновили свой вопрос, но все еще не объяснили, в чем заключается проблема. Почему вы используете операторы диапазона для извлечения отдельных элементов данных? Например у вас есть три блока начала

for i in  range ( 1 , 7 , 6 )

которые можно было бы объединить в одно целое.

1 Ответов

Рейтинг:
2

Richard MacCutchan

# Get the 5th row of data
for l in  range ( 1 , 7 , 6 ) : 
    cell = tb . cell ( 4 , j ) 

Вы используете индекс с именем l для вашего диапазона, но пытается использовать j чтобы обратиться к элементу данных. Индекс j никогда и нигде не объявляется.


lauuster

Спасибо! Я внес соответствующие поправки в Кодекс. Однако изъятия все равно были ошибочными. Я приложил изображение для справки выше.

Richard MacCutchan

Ну тебе нужно объяснить что ты имеешь в виду под этим - экстракция все равно была неправильной" Мы не знаем, какие данные вы пытаетесь извлечь, или что на самом деле происходит, когда вы пытаетесь.