Windows 10
xlwings 0.30.8,
Microsoft Excel для Microsoft 365 MSO (версия 2302 16.0.16130.20586) 32 бит,
Python 3.9.12
Опишите вашу проблему (включая отслеживание!)
У меня возникла проблема с моим сценарием Python, который использует библиотеку xlwings для открытия книг Excel и работы с ними.
Когда я запускаю свой сценарий непосредственно из командной строки, все работает отлично. Однако когда я запускаю сценарий как запланированное задание с помощью планировщика задач Windows, сценарий не может открыть книгу.
Вот часть моего кода, которая вызывает проблему:
Вот часть моего кода, которая вызывает проблему:
Вот часть моего кода, которая вызывает проблему:
р>
app = xw.App(visible=False)
workbook = app.books.open(OUTPUT_EXCEL_FILE)
Скрипт успешно запускает первую строку, но не может выполнить вторую строку, которая пытается открыть книгу. Когда сценарию не удается открыть книгу, он не выдает ошибку, и выполнение просто останавливается.
Чтобы устранить эту проблему, я добавил сообщения журнала в открытый метод книги xlwings. class в исходном коде библиотеки xlwings. Из журналов видно, что выполнение останавливается при вызове self.impl.open(...) в методе open.
KeyError возникает, когда код пытается найти уже открытая книга с тем же именем, что и та, которую мы пытаемся открыть (impl = self.impl(name)). Исключение перехватывается, и выполнение должно перейти к открытию книги, но этого не происходит.
Я не уверен, почему сценарий не может открыть книгу при запуске из планировщика задач. но при запуске из командной строки проблем не возникает.
Я убедился, что путь к книге (OUTPUT_EXCEL_FILE) верен и что книга еще не открыта.
Любой совет по поводу того, что может быть причиной этой проблемы, и способы ее решения будут очень признательны. Заранее благодарим вас за помощь!
Соответствующая часть сценария выглядит следующим образом.
logger.debug('openedbook___' + OUTPUT_EXCEL_FILE)
Отладочный вывод для строка выполнена, но выполняется следующая строка, но процесс не продвигается.
import sqlite3
import datetime import xlwings as xw
import debuglog as logger
data_start_row = 11 employee_no_col = 3
def update_overtime_in_excel(config, OUTPUT_EXCEL_FILE): DB_FILE = config['DB_FILE'] EXTRA_INF = config['EXTRA_INF']
# Connect to the database
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
today = datetime.datetime.today()
# Start Excel application and open the workbook
logger.debug('openbook___' + OUTPUT_EXCEL_FILE)
app = xw.App(visible=False)
logger.debug('app___' + OUTPUT_EXCEL_FILE)
workbook = app.books.open(OUTPUT_EXCEL_FILE)
logger.debug('openedbook___' + OUTPUT_EXCEL_FILE)
# Process each sheet for each month
for sheet in workbook.sheets:
Когда я отлаживал следующий комментарий в xlwings main.py, печатается
"open5" и
оба "Не удалось открыть книгу с именем" и "Сведения об ошибке" ' выводим имя целевого файла (только имя файла, не являющееся полным путем) и прекращаем обработку.
def open(
self,
fullname=None,
update_links=None,
read_only=None,
format=None,
password=None,
write_res_password=None,
ignore_read_only_recommended=None,
origin=None,
delimiter=None,
editable=None,
notify=None,
converter=None,
add_to_mru=None,
local=None,
corrupt_load=None,
json=None,
):
"""
Opens a Book if it is not open yet and returns it. If it is already open,
it doesn't raise an exception but simply returns the Book object.
Parameters
----------
fullname : str or path-like object
filename or fully qualified filename, e.g. ``r'C:\\path\\to\\file.xlsx'``
or ``'file.xlsm'``. Without a full path, it looks for the file in the
current working directory.
Other Parameters
see: :meth:`xlwings.Book()`
Returns
-------
Book : Book that has been opened.
"""
logger.debug('open1')
if self.impl.app.engine.type == "remote":
return Book(impl=self.impl.open(json=json))
fullname = utils.fspath(fullname)
logger.debug('open2')
if not os.path.exists(fullname):
raise FileNotFoundError("No such file: '%s'" % fullname)
fullname = os.path.realpath(fullname)
_, name = os.path.split(fullname)
logger.debug('open3')
if self.impl.app.engine.type == "reader":
return Book(impl=self.impl.open(filename=fullname))
logger.debug('open4')
try:
impl = self.impl(name)
if not os.path.samefile(impl.fullname, fullname):
raise ValueError(
"Cannot open two workbooks named '%s', even if they are saved in"
"different locations." % name
)
except KeyError as e:
logger.debug('open5')
logger.debug('Failed to open workbook with name: %s', name)
logger.debug('Error details: %s', e)
impl = self.impl.open(
fullname,
update_links,
read_only,
format,
password,
write_res_password,
ignore_read_only_recommended,
origin,
delimiter,
editable,
notify,
converter,
add_to_mru,
local,
corrupt_load,
)
logger.debug('open6')
return Book(impl=impl)
Подробнее здесь: https://stackoverflow.com/questions/767 ... -windows-t
Скрипт Python с использованием xlwings не может открыть книгу Excel при запуске из планировщика задач Windows ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Openpyxl загружает книгу только после того, как я сохраню книгу вручную
Anonymous » » в форуме Python - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-