我这里用的pandas库读取的表格,但实际上这个问题用其它库读表格时也是同样的原理,都是 sheet名 的问题。
错误描述
我在使用 Python 读取 Excel 表格时,明明文件里是有 Sheet1这个 sheet 的,但是却报错说没有。
文件截图:
报错信息:
Traceback (most recent call last):
File "E:\Python\venv\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name
sheetx = self._sheet_names.index(sheet_name)
ValueError: 'Sheet1' is not in list
df = pd.read_excel('material\图片网址-2.xls',sheet_name="Sheet1")
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:/Python/work_dpng.py", line 14, in <module>
df = pd.read_excel('material\图片网址-2.xls',sheet_name="Sheet1")
File "E:\Python\venv\lib\site-packages\pandas\util\_decorators.py", line 299, in wrapper
return func(*args, **kwargs)
File "E:\Python\venv\lib\site-packages\pandas\io\excel\_base.py", line 367, in read_excel
mangle_dupe_cols=mangle_dupe_cols,
File "E:\Python\venv\lib\site-packages\pandas\io\excel\_base.py", line 1173, in parse
**kwds,
File "E:\Python\venv\lib\site-packages\pandas\io\excel\_base.py", line 477, in parse
sheet = self.get_sheet_by_name(asheetname)
File "E:\Python\venv\lib\site-packages\pandas\io\excel\_xlrd.py", line 47, in get_sheet_by_name
return self.book.sheet_by_name(name)
File "E:\Python\venv\lib\site-packages\xlrd\book.py", line 476, in sheet_by_name
raise XLRDError('No sheet named <%r>' % sheet_name)
xlrd.biffh.XLRDError: No sheet named <'Sheet1'>
探索过程
观察所有sheet名
df = pd.read_excel('material\图片网址-2.xls',sheet_name=None)
for i in df.keys():
print(type(i),len(i),i)
这里将 sheet_name 设置为 None,表示载入所有
结果:
明明是 6 个长度的字符串,却显示长度为 12,这里面肯定有猫腻啊!
而直接复制输出的 Sheet1 时,却变成了 S h e e t 1 ,多了空格,但是直接将复制到的这个字符串作为 sheet_name 参数时,依旧报错!!!
我们用 repr 函数来观察一下:
for i in df.keys():
print(type(i),len(i),repr(i),i)
结果:
哦豁!在 Sheet1 中每个字符的后面都有一 \x00 这么个东西,而这个东西是空格又不是空格(具体可百度)却不直接显示出来,给我们造成了困难!
那么,我们可以直接将这个 'S\x00h\x00e\x00e\x00t\x001\x00
作为我们的 sheet_name 参数!
解决办法
将 sheet_name 参数设为 ‘S\x00h\x00e\x00e\x00t\x001\x00’
不知道是否有其它可能,如果不行,读者可以按照我的过程拿 repr 函数试一下