我正在使用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文件进行操作,并且如果可能的话,我希望避免将form转换openpyxl
为pandas
,因为我无法估计该转换将需要多少工作量,也无法确定我的所有用例是否都可以解决带的盒子pandas
。
受菠萝的回答和乔恩·克莱门茨的评论的启发,我想出了一个解决方案,可以将数据读入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])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句