2015-06-03 2 views
1

Я играю с xlrd, и у меня возникают некоторые трудности. Основная идея того, что я пытаюсь сделать, - открыть файл Excel, прочитать содержимое первого столбца в массиве и использовать этот массив для поиска в другом файле Excel. Когда значение найдено, оно должно вернуть содержимое трех ячеек из второго файла Excel. мой код:xlrd lookup Значения Excel в другом файле Excel

import xlrd 
import os.path 
from docx import Document 

document = Document() 

registry = xlrd.open_workbook('/root/Desktop/registry.xlsx') 
findings = xlrd.open_workbook('/root/Desktop/findings.xlsx') 

findings_sheet = findings.sheet_by_index(0) 
registry_sheet = registry.sheet_by_index(0) 

num_rows = findings.nrows - 1 
curr_row = 0 

findings_array = [] 

while curr_row < num_rows: 
    row = findings.row(curr_row) 
    findings_array += row 
    curr_row += 1 


for finding in findings_array: 
    for r in range(first_sheet.nrows): 
     cell_col1=first_sheet.cell(rowx=r,colx=0).value 
     if cell_col1 == finding: 

      print first_sheet.cell(r,3) 
      print first_sheet.cell(r,4) 
      print first_sheet.cell(r,5) 
else: 
    print "Finding not found" 

В настоящее время он не работает. Если я заменяю if cell_col1 == finding: на if cell_col1 == "ABC":, тогда условие работает, но оно выводит ячейки 5 раз, что является числом результатов в моем массиве.

Я знаю, что у меня есть проблемы в моем коде, но я не программист, и я немного застрял.

ответ

1

Я не могу запустить свой код и переписать его более вещий стиле:

import xlrd 
import os.path 

registry_doc = xlrd.open_workbook('/tmp/s.xlsx') 
findings_doc = xlrd.open_workbook('/tmp/f.xlsx') 

findings_sheet = findings_doc.sheet_by_index(0) 
registry_sheet = registry_doc.sheet_by_index(0) 

findings = {findings_sheet.cell_value(i, 0) for i in range(0, findings_sheet.nrows)} 

for r in range(0, registry_sheet.nrows): 
    cell_col1=registry_sheet.cell_value(rowx=r,colx=0) 
    if cell_col1 in findings: 
     print registry_sheet.cell_value(r,2) 
     print registry_sheet.cell_value(r,3) 
     print registry_sheet.cell_value(r,4) 

Он должен работать

Ошибка была в if cell_col1 == finding:. Вы сравниваете str и list of cell.

+0

Я хотел бы изменить тип 'findings_array' в' set' и изменить имя на 'results' (даже для списка' array' не является хорошим суффиксом имени). – BlackJack

+0

@BlackJack Я сделал, что вы предложили – sheh

0

Если вы хотите прочитать первые содержимое столбцов в массиве, эта строка:

findings_array += row 

должно быть:

findings_array += row[0] 
Смежные вопросы