首页 > 编程问答 >如何确保 Excel 与 Bloomberg 保持连接以执行电子表格自动化?

如何确保 Excel 与 Bloomberg 保持连接以执行电子表格自动化?

时间:2024-07-25 12:22:28浏览次数:10  
标签:python excel vba bloomberg

我会尽力让这个问题尽可能清楚,因为我是一个初学者,我很难找到这个问题的解决方案。

目标是运行一个自动打开 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 公式示例
Example of the bbg formulas that I am using

基本上,代码是打开一个 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)时。

可能的解决方案:

  1. Bloomberg API(推荐):

  2. 什么是 Bloomberg API? Bloomberg 提供了强大的 API(应用程序编程接口),允许你直接从 Python 代码中获取数据,而无需依赖 Excel 插件。

  3. 优点:
    • 可靠性: 直接连接通常比依赖 Excel 插件更稳定。
    • 灵活性: 你可以更好地控制数据检索、错误处理和自动化。
    • 后台执行: 你可以轻松地在后台运行 Python 脚本,即使计算机被锁定也是如此。
  4. 缺点:
    • 学习曲线: 学习使用 API 需要一些初始设置和编码工作。
  5. 实施步骤:

    1. 访问 Bloomberg API: 确保你拥有使用 Bloomberg API 的必要凭据和访问权限。
    2. 选择 Python 库: 有一些 Python 库可以简化与 Bloomberg API 的交互,例如 bloomberg pdblp
    3. 编写 Python 代码: 使用所选库连接到 API、检索所需数据、执行计算并在 Python 中格式化结果。
    4. 自动化: 使用任务调度程序(如 Windows 任务调度程序)来自动执行 Python 脚本。
  6. 增强 Excel 后台刷新(不太可靠):

  7. 保持 Excel 运行: 避免在代码中完全退出 Excel ( excel.Quit() ). 相反,将工作簿关闭并将 Excel 保留在后台运行。

  8. 强制刷新: 探索使用 Application.CalculateFullRebuild 方法强制 Excel 重新计算所有工作簿和加载项中的所有公式。但这在大型工作簿上可能非常耗时。
  9. 连接设置: 检查 Bloomberg 插件和 Excel 中的任何数据连接设置。寻找选项来优化后台刷新或增加超时时间。
  10. 电源选项: 确保你的计算机的电源选项配置为在计算机锁定时不会阻止或限制后台进程。

代码示例(使用 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

相关文章

  • 无法使用适用于 Azure AI 搜索的 Python SDK 将数据添加到 ComplexField
    我想将带有嵌套字典的有效负载上传到AzureAI搜索索引。我在索引中使用ComplexField作为负载中的嵌套字典。索引无法识别嵌套字典,并且出现空错误。这是我的代码:ComplexField,CorsOptions,SearchIndex,ScoringProfile,SearchFieldDataType,Sim......
  • Java编程指南:高级技巧解析 - Excel单元格样式的编程设置
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/前言在Java开发中,处理Excel文件是一项常见的任务。在处理Excel文件时,经常需要对单元格进行样式设置,以满足特定的需求和美化要求,通过使用Java中的相关库和API,我们可以轻松地操作Excel文件并设置单元格的样式。在......
  • SpringBoot+@Validated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel
    原文链接: 霸道的程序猿的博客(cnblogs.com)若依管理系统前后端分离版基于ElementUI和SpringBoot怎样实现Excel导入和导出:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108278834SpringBoot+Vue实现excel导入带格式化的时间参数(moment格式化明天日期并设置el......
  • 如何使用 Python 从 Square 中的创建客户方法中检索客户 ID
    我正在square创建一个客户并得到如下结果。我需要的是获取客户的id。我的代码:fromsquare.clientimportClientclient=Client(access_token=settings.SQUARE_ACCESS_TOKEN,environment=settings.SQUARE_ENVIRONMENT,)api_customers=client.customers......
  • 为什么从.导入Python
    我使用的存储库的结构如下:在myrepo/src/中有:主要.pycore.py和somepkgsomepkg有init.py和其他python文件。somepkg不是任何文件中的类或函数。在main.py中,我看到:from.importcorefrom.importsomepkg我的问题是from和.......
  • 使用 Python 中的 Square API 检索客户 ID
    我正在为Square开发一个客户创建表单,它将创建一个客户,然后立即检索他们的ID以在程序中进一步使用。但是,我不知道如何使用API来过滤使用list_customers命令返回的数据。我找到了这篇文章:HowtoretrievecustomeridfromcreatecustomermethodinSquareusing......
  • 如何通过在字符串中使用 \u 或 \U 转义来正确表示 python3 (3.6.1+) 中的补充 unico
    最近我正在学习python,在python3中遇到了unicode转义文字的问题。似乎像Java一样,\u转义被解释为Java使用的UTF-16代码点,但问题来了:例如,如果我尝试放置3个字节的utf-8字符,例如“♬”(https://unicode-table.com/en/266C/),甚至是补充unicode字符,例如“......
  • 我的 Python 代码和 Cycle Time 小部件之间的平均周期时间不同
    我过去遇到过如何在周期时间小部件中计算平均周期时间的一些问题,因此我决定使用Python进行分析,看看是否找到任何方法来计算平均周期时间并获得相同的结果周期时间小部件中显示的值。我的问题是我无法达到周期时间小部件中显示的相同的平均周期时间值。你们能帮我解决这......
  • python3之requests库使用
    使用https://www.cnblogs.com/caroline2016/p/17007956.html建立的api测试下requests库怎么使用。模拟登录时laravelapi那边出现了 Sessionstorenotsetonrequest.错误。解决办法在app/Http/Kernel.php中api中间件组中添加两行代码:<?phpprotected$middlewareGrou......
  • 如何利用Python中的pyecharts制作—不同的柱状图
    目录专栏导读库的介绍库的安装1、柱状图(防止x轴标签名过长)2、柱状图—堆叠样式3、复合型柱状图4、柱状图—字典型总结专栏导读......