python - 通过 APScheduler 作为计划任务运行时,XLWings 无法连接到 Excel 工作簿

标签 python python-3.x xlwings apscheduler

我试图每分钟访问 Excel 工作簿以保存当前从不同程序显示的数据。当调度程序访问工作簿时,我收到“OSError:[WinError -2147467259]未指定错误”。有任何修复/解决方法吗?任何帮助将不胜感激,谢谢!

from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.combining import OrTrigger
from apscheduler.triggers.cron import CronTrigger
import xlwings as xw

def tick():
    wb= xw.Book('currently_open_workbook.xlsx')


sched = BlockingScheduler()

trigger = OrTrigger([
    CronTrigger(day_of_week='mon-fri', hour='0-16', second=0),
    CronTrigger(day_of_week='sun', hour='17-23', second=0)
])

sched.add_job(tick, trigger)

sched.start()

完整的错误在这里

Traceback (most recent call last):
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
    retval = job.func(*job.args, **job.kwargs)
  File "C:/Users/eric/PycharmProjects/untitled/blank.py", line 8, in tick
    wb= xw.Book('currently_open_workbook.xlsx')
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\xlwings\main.py", line 472, in __init__
    for wb in app.books:
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\xlwings\main.py", line 358, in books
    return Books(impl=self.impl.books)
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\xlwings\_xlwindows.py", line 374, in books
    return Books(xl=self.xl.Workbooks)
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\xlwings\_xlwindows.py", line 302, in xl
    self._xl = get_xl_app_from_hwnd(self._hwnd)
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\xlwings\_xlwindows.py", line 218, in get_xl_app_from_hwnd
    ptr = accessible_object_from_window(child_hwnd)
  File "C:\Users\eric\anaconda3\envs\untitled\lib\site-packages\xlwings\_xlwindows.py", line 189, in accessible_object_from_window
    byref(IDispatch._iid_), byref(ptr))
  File "_ctypes/callproc.c", line 918, in GetResult
OSError: [WinError -2147467259] Unspecified error

最佳答案

这并不是真正的解决方案,而是一种解释。我认为问题在于 APScheduler 使用线程,并且 xlwings 对象无法直接在线程中传递,请参阅:http://docs.xlwings.org/en/stable/threading.html

它可能可以用这样的东西来解决:https://stackoverflow.com/a/27966218/918626但目前 xlwings 没有任何开箱即用的功能。

关于python - 通过 APScheduler 作为计划任务运行时,XLWings 无法连接到 Excel 工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837480/

相关文章:

python - 在 python 中提交后是否可以回滚 sqlite3 更改

javascript - 从 QWebView 获取 javascript 变量值到 python

python - Python 中的哪种数据结构可用于替换 Excel 2-dim 字符串/数量数组?

javascript - 如何在 python 中转义 UNICODE 字符串(到 javascript 转义)

python - 使用 python os.path 模块分隔文件扩展名

python - 保存为 PDF 时 Web 抓取 FileNotFoundError

python-3.x - 跨工作表 xlwings 复制粘贴范围时出错

python - 使用 Python xlwings 设置边框

python - 从 Amazon Ion 文件中提取 "data"

python - 与使用两个 Numpy 数组进行矢量化相比,为什么使用 Numpy 数组和 int 进行算术运算时减法更快?