Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何抑制;更新链接“;机警_Python_Excel - Fatal编程技术网

Python 如何抑制;更新链接“;机警

Python 如何抑制;更新链接“;机警,python,excel,Python,Excel,我正在使用xlwings api与Python中的Excel文件进行交互。我正在与之交互的某些Excel文件具有旧链接,打开文件时会出现提示,询问用户是否要更新链接。这会导致代码无限期地挂在打开书本的行上,直到用户关闭此提示。是否有办法修改Excel文件的设置,使此提示不会出现,或在不打开实际文件的情况下自动取消 我尝试过使用xlwings方法: xlwings.App.display_alerts = False 以抑制提示,但据我所知,这只能在Excel实例打开后运行。有些Excel ap

我正在使用xlwings api与Python中的Excel文件进行交互。我正在与之交互的某些Excel文件具有旧链接,打开文件时会出现提示,询问用户是否要更新链接。这会导致代码无限期地挂在打开书本的行上,直到用户关闭此提示。是否有办法修改Excel文件的设置,使此提示不会出现,或在不打开实际文件的情况下自动取消

我尝试过使用xlwings方法:

xlwings.App.display_alerts = False
以抑制提示,但据我所知,这只能在Excel实例打开后运行。有些Excel api不需要打开文件才能读取xlrd之类的数据,但它们对于读取和复制大量数据(多页/整页数据)并不十分方便

以下代码演示了该问题:

import xlwings as xw

wb = xw.Book(r'C:\Path\To\File\Filename')

print('Done')

在常规Excel文件上,代码继续执行并打印“完成”,无需用户干预,但在出现“更新链接”提示的Excel文件上,在用户取消提示之前,它不会继续打印语句。

在第一次尝试时展开--您没有处理应用程序实例,而是尝试分配给
xlwings.App

但是,在
xlwings
中,请尝试以下操作:

import xlwings as xw
app = xw.App(add_book=False)
app.display_alerts = False
wb = app.books.api.Open(fullpath, UpdateLinks=False)

我相信xlwings中有一个实现,可以避免现在的更新链接消息。我可以通过添加以下内容绕过这些警报

app.books.open(fname, update_links=False, read_only=True, ignore_read_only_recommended=True)

您可以在文档中看到这些参数

我可以理解为什么这会起作用,但不幸的是,它似乎无法解决问题。我还没有想过要做这样的事情,所以我将进一步阅读api,看看是否可以利用预先存在的Excel实例来解决这个问题,谢谢!这可以通过
.api
完成,我会更新我的答案。哇,太棒了!我对VBA或pywin32不太熟悉,所以这些最后的代码对我来说有点像魔术。api是否允许我们访问底层的pywin32以便我们可以使用它,或者代码是否在VBA之后?此外,如果我没有导入任何其他模块,“Open”函数从何而来?我不熟悉xlwings的实现,但似乎
.api
公开了该函数。因此,之后的代码本身不是VBA,但我希望许多/大多数属性/方法都会以这种方式公开,并以与通过VBA相同的方式实现。
xw.Book(impl=xw.\u xlwindows.Book(xl=wb))
来获取xlwings工作簿对象。Xlwings是pywin32(Windows)或appscript(MacOSX)的包装器,由于我们必须使用特定于实现的COM API,我们必须导入私有的
\uXLWindows
,这对我使用xlsm工作簿(宏)很有效。非常感谢你!上述使用.api的答案不适用于xlsm。