通过openpyxy 导入excel的时候,load_workbook对writer的path读取结果为None,从而无法读入相应表格。
Anaconda 4.11.0 内的Jupyter Lab 3.2.1
import pandas as pd
import openpyxl
writer=pd.ExcelWriter('previous days swap curve.xlsx',engine='openpyxl')
book_with_formula=openpyxl.load_workbook('previous days swap curve.xlsx',data_only=False)
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_12940/738188215.py in
4
5 writer=pd.ExcelWriter('previous days swap curve.xlsx',engine='openpyxl')
----> 6 book_with_formula=openpyxl.load_workbook(writer.path,data_only=False)
F:\Anaconda\lib\site-packages\openpyxl\reader\excel.py in load_workbook(filename, read_only, keep_vba, data_only, keep_links)
314
315 reader = ExcelReader(filename, read_only, keep_vba,
--> 316 data_only, keep_links)
317 reader.read()
318 return reader.wb
F:\Anaconda\lib\site-packages\openpyxl\reader\excel.py in init(self, fn, read_only, keep_vba, data_only, keep_links)
122 definit(self, fn, read_only=False, keep_vba=KEEP_VBA,
123 data_only=False, keep_links=True):
--> 124 self.archive = _validate_archive(fn)
125 self.valid_files = self.archive.namelist()
126 self.read_only = read_only
F:\Anaconda\lib\site-packages\openpyxl\reader\excel.py in _validate_archive(filename)
76 is_file_like = hasattr(filename, 'read')
77 if not is_file_like:
---> 78 file_format = os.path.splitext(filename)[-1].lower()
79 if file_format not in SUPPORTED_FORMATS:
80 if file_format == '.xls':
F:\Anaconda\lib\ntpath.py in splitext(p)
200
201 def splitext(p):
--> 202 p = os.fspath(p)
203 if isinstance(p, bytes):
204 return genericpath._splitext(p, b'', b'/', b'.')
TypeError: expected str, bytes or os.PathLike object, not NoneType
这个报错提示writer的路径为空,我print out 该writer确实也是空。
我随后尝试绝对路径和相对路径,还是不行。我还尝试把openpyxl的版本升级至最新版本以及降级至3.0.1,问题依然无法解决。
且每次执行完这段代码,路径中的文件都会被损坏。
这个问题我在CSDN看过类似的情况,看完解答后依然没有头绪。请各位专家帮忙看看,谢谢。
能正常读取含公式及多个工作表的excel表。
TypeError: expected str, bytes or os.PathLike object, not NoneType这个报错是出现空值了,你看看在那一行代码。这行代码有个变量为空值
是这样的,pands.ExcleWriter()会将excel文件做一些处理(虽然我也不知道怎么处理的,应该是底层造轮子的时候),导致文件损坏,路径找不到等问题,所以pands.ExcleWriter()必须与writer.save()一起使用之后才能再次恢复路径,打开excle文件。单独使用openpyxl可以对多张工作表进行处理,不会出现覆盖问题,但是写入值的时候只能使用append,格式比较单一(之后可以手动修改,稍微有些麻烦)。pandas可以对写入格式的变化更加丰富,但是处理多个工作表一直有覆盖问题(每save一次就会对原来的数据进行覆盖)。我当时是多工作表覆盖问题,对数据的格式也有一定的要求(竖排),我最终是采用了pands.ExcleWriter()同时导入多工作表的方法,解决这个问题,把所有数据拿到之后写一个for循环,逐一to_write到多个工作表中,再save。这样所有的数据就会到不同的sheet里。就是只会生成一个文件,读起来比较麻烦。