Есть ли способ прочитать файл Excel без книги с openpyxl? - PullRequest
0 голосов
/ 26 ноября 2018

Я использую Python 2.7 & openpyxl==2.5.11.

Для файлов с действительной рабочей книгой я читаю содержимое с этим кодом:

wb = openpyxl.load_workbook('my_file.xlsx', read_only=True)
ws = wb.worksheets[1]
rows = ws.rows

Теперь тестер предоставил старыйфайл, который не имеет действительной части книги и вызывает эту ошибку:

IOError: File contains no valid workbook part

в этой строке ws = wb.worksheets[1]

Я не смог найтиПример того, как читать данные для таких файлов в документации openpyxl.

Мне удалось прочитать файл, используя pandas: data = pandas.read_excel('my_file.xlxs')

Есть ли способ прочитать файл с помощью openpyxl, потому что я уже использую openpyxl в своем приложении ине хотел бы полностью перейти на pandas или использовать их в разных местах моего приложения.В идеале я хотел бы использовать одну библиотеку для манипулирования файлами Excel во всех службах приложений, и, если возможно, я бы хотел избежать перехода с openpyxl на pandas, потому что я не могу оценить, насколько большие усилия потребуются для этого перехода, и не будут ли все моиварианты использования будут работать из коробки с pandas.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Вдохновленный Ответом Pineapple и Комментарий Джона Клементса , я придумал решение, которое считывает данные в xlrd книгу и затем создает openpyxl книгу в результатефункция.Это помогает моему варианту использования, потому что я уже использую рабочую книгу openpyxl в нескольких местах в своем приложении.Вот код:

import xlrd
from openpyxl import Workbook


def open_excel_without_workbook_part(filename):
    xlrd_workbook = xlrd.open_workbook(filename=filename)
    xlrd_worksheet = xlrd_workbook.sheet_by_index(0)
    nrows = xlrd_worksheet.nrows
    ncols = xlrd_worksheet.ncols

    # create a xlsx file using openpyxl
    openpyxl_book = Workbook()
    openpyxl_worksheet = openpyxl_book.active

    for row in xrange(0, nrows):
        for col in xrange(0, ncols):
            openpyxl_worksheet.cell(row=row + 1, column=col + 1).value = xlrd_worksheet.cell_value(row, col)

    return openpyxl_book


if __name__ == '__main__':
    workbook = open_excel_without_workbook_part('file-without-valid-workbook.xlsx')

    sheet = workbook.worksheets[0]
    for row in sheet.rows:
        print '\t'.join([cell.value for cell in row])
0 голосов
/ 26 ноября 2018

Это может быть не совсем то, что вы ищете, но вы можете прочитать файл Excel с помощью pandas, а затем преобразовать его в строки openpyxl, используя openpyxl.utils.dataframe module .

Пример реализации

from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
from openpyxl import Workbook

# pandas code 
xl = pd.ExcelFile("dummydata.xlsx")
df = xl.parse(xl.sheet_names[0])

# openpyxl code
wb = Workbook()
ws = wb.active

for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)
...