XLWings не может подключиться к книге Excel при запуске в виде запланированной задачи через APScheduler - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь получить доступ к книге Excel каждую минуту, чтобы сохранить данные, которые в данный момент отображаются из другой программы.Когда планировщик получает доступ к книге, я получаю «OSError: [WinError -2147467259] Unspecified error».Есть ли какое-либо исправление / обходной путь?Любая помощь будет оценена, спасибо!

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

1 Ответ

0 голосов
/ 25 декабря 2018

Не совсем решение, а скорее объяснение.Я думаю, проблема в том, что APScheduler использует потоки, и объекты xlwings не могут передаваться напрямую в потоках, см .: http://docs.xlwings.org/en/stable/threading.html

Это может быть решено с чем-то вроде этого: https://stackoverflow.com/a/27966218/918626, но в настоящее времяничего, что доступно из коробки с xlwings.

...