我有一个相当长的程序,基本上用一些数据编辑 Excel 文件的第一张表,然后 Excel 文件的第二张表进行一些数学运算并拟合数据,然后文件的第三张表提取相关参数到一排。 我对此没有任何问题,但是当我尝试使用
pandas.read_excel
将数据从第三个工作表中提取时,通过 Excel 中的某些公式从第二个工作表中提取到第三个工作表中的值被读取为 NaN。我能够毫无问题地提取刚刚编辑的值,这只是依赖于公式的值才是问题所在,因为我将这些参数放入数据框中以输入到第二个 Excel 文件中。
我知道有一个解决方案,因为我以前曾经让它工作过一次,但后来我的整个项目被删除了,我一辈子都不记得我是怎么做到的。任何帮助将不胜感激。
我尝试了
load_workbook()
并保存的各种变体,xlwings
应用程序打开和保存以及win32com
应用程序打开并等待所有查询完成,然后保存并退出,但是xlwings
和win32com
都给出了我这个错误:
(-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
During the handling of the above exception another exception occurred
...
KeyError: 'My_File.xlsx'
During the handling of the above exception another exception occurred
com_error Traceback (most recent call last)
---> ex_book = ex_app.books.open(path)
...
com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Open method of workbooks class failed', 'xlmain11.chm', 0, -2146827284), None)
我在 win32com.client 和 pythoncom 中遇到了非常相似的错误
import xlwings as xl
import win32com.client as win32
def refresh_data(path):
#One example of an attempt I made with xlwings
wb = load_workbook(path)
ex_app = xl.App(visible=False)
ex_book = ex_app.books.open(path)
ex_book.save()
ex_book.close()
ex_app.quit()
以下是尝试使用 wn32com.client 的一个版本
XLAPP = win32.DispatchEx("Excel.Application")
book= XLAPP.Workbooks.Open(path)
book.RefreshAll()
XLAPP.CalculateUntilAsyncQueriesDone()
book.save()
XLAPP.Quit()
'''
您需要使用绝对路径,例如
c:\tmp\data\
试试这个:
import os
path = os.path.abspath(path)