无法使用Python打开Excel文件

fra*_*ima 5 python xlrd python-2.7

我在使用Python 2.7.9的Debian GNU / Linux计算机上。

作为我工作的一部分,我一直在制作python脚本,以各种格式(例如Excel,Csv,Txt)读取输入,并将信息解析为更标准的文件。这不是我第一次打开或使用Excel文件。

有一个特定的文件给我带来了问题,我只是无法打开它。当我尝试使用xlrd(版本0.9.3)时,它给了我以下错误:

xlrd.open_workbook('sample.xls')
Run Code Online (Sandbox Code Playgroud)

XLRDError:不支持的格式或损坏的文件:BOF不是工作簿/工作表:op = 0x0009 vers = 0x0002 strm = 0x000a build = 0 year = 0-> BIFF21

我试图独自调查此事,在StackOverflow中找到了两个答案,但无论如何我都无法打开它。我发现的这个特定答案可能是问题所在(第二个解释),但其中不包含解决方法:https : //stackoverflow.com/a/16518707/4345659

可以将文件转换为csv / txt的工具也可以解决该问题。

我已经尝试过:

  • rd
  • openpyxl
  • xlsx2csv(shell工具)

此处提供示例文件:https : //ufile.io/r4m6j

作为附带说明,我可以使用LibreOffice Calc和MS Excel打开它,因此最终可以通过这种方式将其更改为csv。问题是,我需要使用python脚本来完成所有操作。

提前致谢!

Tri*_*put 2

这似乎是 MS 问题。xls 文件很奇怪,也许你应该联系 xlrd 支持。

但我有一个疯狂的解决方法给你:xls2ods。它对我有用,尽管 xls2csv 不起作用(SiC!)。

因此,首先安装 catdoc:

$sudo apt-get install catdoc
Run Code Online (Sandbox Code Playgroud)

然后将您的 xls 文件转换为 ods 并使用 pyexcel_ods 或您喜欢的任何方式打开 ods。要使用 pyexcel_ods,请先使用pip install pyexcel_ods.

import subprocess

from pyexcel_ods import get_data

file_basename = 'sample'

returncode = subprocess.call(['xls2ods', '{}.xls'.format(file_basename)])
if returnecode > 0:
    # consider to use subprocess.Popen if you need more control on stderr
    exit(returncode)

data = get_data('{}.ods'.format(file_basename))
print(data)
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

OrderedDict([(u'sample',
              [[u'labo',
                u'codfarm',
                u'farmacia',
                u'direccion',
                u'localidad',
                u'nom_medico',
                u'matricula',
                u'troquel',
                u'producto',
                u'cant_total']])])
Run Code Online (Sandbox Code Playgroud)