You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在xlwings中将日期作为参数传入Python函数

解决VBA调用Python函数时日期参数无法识别的问题

问题根源

你当前的写法里,VBA传的28.09.2023在Python中是非法语法——Python会把连续的点号当成错误的数值格式,既不是字符串也不是日期类型,直接导致调用失败,更没法用strftime方法。

两种可行解决方案

方案1:VBA传字符串日期,Python解析为datetime

  • 修改VBA代码,把日期用单引号包裹,以字符串形式传递:
    RunPython ("import mypythonfile; mypythonfile.myfunction(cob_ToGet='28.09.2023')")
    
  • 修改Python函数,使用datetime.strptime将字符串解析为datetime对象:
    from datetime import datetime
    
    def myfunction(cob_ToGet):
        # 按指定格式解析字符串为datetime
        cob_date = datetime.strptime(cob_ToGet, "%d.%m.%Y")
        print(cob_date.strftime("%d.%m.%Y"))
    

方案2:VBA传原生日期值,Python转换为datetime

VBA中的日期本质是双精度浮点数(整数部分是1899-12-30以来的天数,小数部分是时间占比),可以直接传递数值给Python再转换:

  • VBA代码定义日期变量并传递:
    Dim targetDate As Date
    targetDate = #28/09/2023# ' VBA日期格式用#包裹,格式需匹配区域设置,如mm/dd/yyyy
    RunPython ("import mypythonfile; mypythonfile.myfunction(cob_ToGet=" & targetDate & ")")
    
  • Python函数转换数值为datetime:
    from datetime import datetime, timedelta
    
    def myfunction(cob_ToGet):
        # VBA日期起点是1899-12-30,转换为Python datetime
        base_date = datetime(1899, 12, 30)
        cob_date = base_date + timedelta(days=cob_ToGet)
        print(cob_date.strftime("%d.%m.%Y"))
    

注意事项

  • 方案1中要保证VBA传的字符串格式和Pythonstrptime的格式串完全匹配,比如日期是2023-09-28时,格式串要改成%Y-%m-%d;
  • 方案2中VBA的日期起点是1899-12-30(历史遗留的基准值,并非1900-01-01),转换时必须用这个基准日期。

内容的提问来源于stack exchange,提问作者Thanasis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:35:04