我会尽力让这个问题尽可能清楚,因为我是一个初学者,我很难找到这个问题的解决方案。
目标是运行一个自动打开 excel 的 python 代码,运行一些用于的宏Bloomberg 公式然后关闭所有内容。
我的 python 代码如下所示:
import time
import win32com.client as win32
import gc
def update_excel_and_send_email():
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
try:
wb = excel.Workbooks.Open('mypath')
wb.RefreshAll()
time.sleep(10)
excel.Application.Run("Send2")
except Exception as e:
print("Error: " + str(e))
finally:
wb.Close(SaveChanges=False)
excel.Quit()
excel = None
gc.collect()
if __name__ == '__main__':
update_excel_and_send_email()
我正在使用的 bbg 公式示例
基本上,代码是打开一个 excel 实例,运行宏,然后关闭。我的梦想目标是能够运行这些宏,而无需在屏幕上弹出 Excel。我总是连接到彭博社,而且我也希望即使我的计算机被锁定也能够执行此代码,这要归功于调度程序。即使我的计算机被锁定,它也能工作一两个小时,然后随机地,我通过宏通过电子邮件收到的所有公式都不再用 bbg 更新,并显示为#N/A。每次我用 Excel 运行宏时,我都尝试用公式刷新 Bloomberg,但当 Excel 崩溃时它不起作用。
这是我的两个观察结果:
- 当它崩溃时,即使我打开 Excel手动工作表,每个数据仍然不适用,因此我需要完全关闭 Excel 并再次打开它才能正确刷新公式。
- 如果 excel 在后台,公式有时不会刷新(对我来说是个大问题,因为我希望我可以在后台运行所有这些,而不必痛苦地等待所有宏都运行完毕)
任何帮助将非常受欢迎,因为我真的在解决这个问题,目前无法找到可行的解决方案。|| |非常感谢您的帮助
Many thanks for your help
理解你的苦恼!要让 Excel 和 Bloomberg 在后台可靠地配合使用,即使在计算机锁定时也是如此,可能会很棘手。让我们来分析一下问题和可能的解决方案。
问题根源:
-
Bloomberg API 的性质:
Bloomberg Excel 插件 (加载项) 严重依赖于持续连接和桌面交互。当 Excel 在后台运行或计算机被锁定时,此连接可能会变得不稳定,从而导致
#N/A
错误。 - Excel 后台刷新限制: 虽然 Excel 确实有后台刷新功能,但它的可靠性可能会有所不同,尤其是在处理实时数据连接(如 Bloomberg)时。
可能的解决方案:
-
Bloomberg API(推荐):
-
什么是 Bloomberg API? Bloomberg 提供了强大的 API(应用程序编程接口),允许你直接从 Python 代码中获取数据,而无需依赖 Excel 插件。
-
优点:
- 可靠性: 直接连接通常比依赖 Excel 插件更稳定。
- 灵活性: 你可以更好地控制数据检索、错误处理和自动化。
- 后台执行: 你可以轻松地在后台运行 Python 脚本,即使计算机被锁定也是如此。
-
缺点:
- 学习曲线: 学习使用 API 需要一些初始设置和编码工作。
-
实施步骤:
- 访问 Bloomberg API: 确保你拥有使用 Bloomberg API 的必要凭据和访问权限。
-
选择 Python 库:
有一些 Python 库可以简化与 Bloomberg API 的交互,例如
bloomberg
和pdblp
。 - 编写 Python 代码: 使用所选库连接到 API、检索所需数据、执行计算并在 Python 中格式化结果。
- 自动化: 使用任务调度程序(如 Windows 任务调度程序)来自动执行 Python 脚本。
-
增强 Excel 后台刷新(不太可靠):
-
保持 Excel 运行: 避免在代码中完全退出 Excel (
excel.Quit()
). 相反,将工作簿关闭并将 Excel 保留在后台运行。 -
强制刷新:
探索使用
Application.CalculateFullRebuild
方法强制 Excel 重新计算所有工作簿和加载项中的所有公式。但这在大型工作簿上可能非常耗时。 - 连接设置: 检查 Bloomberg 插件和 Excel 中的任何数据连接设置。寻找选项来优化后台刷新或增加超时时间。
- 电源选项: 确保你的计算机的电源选项配置为在计算机锁定时不会阻止或限制后台进程。
代码示例(使用 Bloomberg API - 概念性):
import pdblp # 例如,使用 pdblp 库
import pandas as pd
# 连接到 Bloomberg API
con = pdblp.BCon(debug=False)
con.start()
# 检索数据(使用你的 Bloomberg 公式)
tickers = ['SPX Index', 'USDEUR Curncy']
fields = ['PX_LAST']
data = con.bdh(tickers, fields, start_date='-1W', end_date='today')
# 处理和格式化数据(使用 pandas)
df = data.to_frame().unstack(level=1)
# ...(对 df 进行必要的格式化)
# 发送电子邮件(使用你现有的电子邮件代码)
# ...
# 关闭连接
con.stop()
其他提示:
- 彻底测试: 在实现任何解决方案后,彻底测试不同的场景(计算机被锁定、断开网络连接等)以确保其可靠性。
- 日志记录: 实现日志记录以捕获错误和警告,这可以帮助你解决任何问题。
- Bloomberg 支持: 如果 Bloomberg 插件仍然存在问题,请考虑联系 Bloomberg 支持以获得进一步的帮助。
请记住,使用 Bloomberg API 通常是实现可靠性和灵活性的更强大的方法。然而,如果由于某种原因而不可行,增强 Excel 后台刷新可能会提供一种解决方法。祝你好运!
标签:python,excel,vba,bloomberg From: 78437867