有没有办法使用ODBC连接(通过python或CMD)自动刷新Excel文件?

问题描述 投票:0回答:1

有一个

.xlsm
文件,我需要使用从 AS400 设备获取的数据定期自动刷新。

AS400设备每N小时启动一个脚本;所述脚本更新一个文件,其中包含我们需要获取 .xlsm 文件的数据。调用时,Excel 的“Refresh All”函数会创建与 AS400 的 ODBC 连接,并使用其数据填充 .xlsm 文件。

目前,刷新过程仅手动,包括:

  • 使用 MS Excel 打开文件(我正在使用 Office 365 版本,如果它能有所帮助的话)
  • 单击“全部刷新”(这将打开一个 dialog window,要求插入 ODBS 凭据)
  • 使用 AS400 凭据登录

这样做,文件会被更新,但当然,自动完成会更高效。

有没有办法让 python 脚本连接到 ODBC(使用像

pywin32
或类似的库),并使用所述连接来刷新文件而无需人工输入?或者有没有一种方法可以绕过整个刷新过程,而无需在对话框窗口中插入凭据?

python odbc ibm-midrange
1个回答
0
投票

我最终找到了一个解决方案,虽然它确实是最好的解决方案,因为它有其局限性,但除此之外它工作得很好。

在 Excel 文件中,我转到“连接”选项卡,打开受影响连接的“属性”>“使用情况”选项卡,然后选中“打开文件时刷新数据”选项;然后,在“属性”>“定义”选项卡上,我还选中了“保存密码”选项。

请注意,如果机器被很多人访问并且您不希望您的数据被看到,这可能是一个很大的漏洞,但是 这不是我的情况,因为未经授权的用户无法访问该机器。

在 BAT 文件中,我编写了以下脚本:

START excel.exe "path\to\file.xlsm"
timeout 10
python "[path]\save_refreshed_file.py"

这个 BAT 的作用基本上是打开文件(以便连接自动更新)并调用执行此操作的 python 脚本:

import xlwings as xw

def saveRefreshedFile():

    wbk = xw.Book("path\to\file.xlsm")

    wbk.save("path\to\file.xlsm")

    wbk.close()

基本上,在 BAT 打开文件(并随后更新)后,Python 脚本通过 xlwings 库连接到 Excel 工作簿并保存它。

执行完所有这些操作后,即使没有人可以手动打开文件,文件也会正确更新。要在常规数据上执行它,可以将该批处理放在任务计划程序下。

© www.soinside.com 2019 - 2024. All rights reserved.