Как получить значение ячейки в openpyxl против xlrd? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть следующий рабочий код для поиска ключевого слова в файлах Excel и печати его местоположения:

import openpyxl as xl 
import os 
import xlrd

file_extensions = ('.xlsx', '.xlsm', '.xls') 
keyword = 'EUROBUS' 
directory = 'M:\\moje makra'

def filenames(directory): 
    for root, dirs, filenames in os.walk(directory): 
        for filename in filenames: 
            if filename.endswith(file_extensions): 
                yield os.path.join(root, filename) 

for filename in filenames(directory):
    if filename.endswith(file_extensions):
        try:
            wb = xl.load_workbook(filename)
            print('Opened ' + filename)
            for sheet in wb.worksheets: 
                rows = sheet.max_row 
                columns = sheet.max_column
                for row in range(1,rows + 1): 
                    for column in range(1,columns + 1): 
                        if keyword in str(sheet.cell(row=row, column=column).value):
                            print('FOUND IN ' + filename)
                        else:
                            print("NOT FOUND")
        except:
                print('Failed to open ' + filename)

Однако модуль openpyxl не поддерживает формат .xls, поэтому мне нужно переписать скрипт, чтобы использовать вместо него xlrd.

Я попробовал следующее:

for filename in filenames(directory):
    if filename.endswith(file_extensions):
        try:
            wb = xlrd.open_workbook(filename)
            print('Opened ' + filename)
            for sheet in wb.sheets(): 
                rows = sheet.nrows
                columns = sheet.ncols
                for row in range(1,rows + 1):
                    for column in range(1,column +1):
                        if keyword in str(sheet.cell(row, column).value):
                            print('FOUND IN ' + filename)
                        else:
                            print("NOT FOUND")
        except:
                print('Failed to open ' + filename)

Но тогда код не может открыть рабочие книги («Открыт ...», а затем «Сбой ...» для каждого файла печатается).

Я также пытался изменить if keyword строку на str(sheet.cell_value(row,column)), но безрезультатно.

Как мне это исправить?

1 Ответ

0 голосов
/ 02 июля 2018

изменение

            for row in range(1,rows + 1):
                for column in range(1,column +1):

до

            for row in range(rows):  # rows + 1 will result in 'out of range'
                for column in range(columns):  # note 'columns'  not 'column'

и удалите (или сузьте) блок try, как отметил Мел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...