有没有办法用 openpyxl 在没有工作簿的情况下读取 Excel 文件?
Is there a way to read Excel file without workbook with openpyxl?
我正在使用 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
.
这可能不是您要查找的内容,但您可以使用 pandas 读取 excel 文件,然后使用 openpyxl.utils.dataframe module.[=12 将其转换为 openpyxl 行=]
示例实现
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)
受到 and 的启发,我想出了一个解决方案,将数据读入 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])
我正在使用 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
.
这可能不是您要查找的内容,但您可以使用 pandas 读取 excel 文件,然后使用 openpyxl.utils.dataframe module.[=12 将其转换为 openpyxl 行=]
示例实现
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)
受到 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])