У меня есть несколько отчетов в формате Access, и я хочу сгенерировать эти отчеты в формате PDF из сценария Python.
Я прочитал много вопросов и ответов о том, как это сделать, и придумал этот простой script.
Мой код:
import win32com.client as win
import os
access = win.Dispatch("Access.Application")
db = access.OpenCurrentDatabase(filename)
access.DoCmd.OpenReport(report_name,2)
access.DoCmd.OutputTo(3, report_name, r'PDF Format (*.pdf)','c:/temp/test.pdf' )
access.DoCmd.CloseDatabase
access.Quit()
access=None
Выполнение сценария в первый раз дает эту ошибку (переведите для меня на английский sh):
pywintypes .com_error: (-2147352567, 'Произошло исключение.', (0, Нет, 'Невозможно выполнить это действие сейчас.', Нет, -1, -2146825802), Нет)
И файл Доступ открыт.
Во второй раз, когда я выполняю, он говорит: The database is already open.
Когда я закрываю Access и выполняю, он снова дает первую ошибку.
ОБНОВЛЕНИЕ: теперь я меняю свой код для закрытия база данных во время выполнения скрипта, и это второй раз, когда я выполнял, а затем скрипты работают нормально.
import win32com.client as win
import os
import time
def file_open(file_name):
if os.path.exists(file_name):
try:
os.rename(file_name, file_name) #can't rename an open file so an error will be thrown
return False
except:
print("File Open "+file_name)
time.sleep(2)
file_open(file_name)
return True
else:
return False
raise NameError
access = win.Dispatch("Access.Application")
file_open(filename)
db = access.OpenCurrentDatabase(filename)
access.DoCmd.OpenReport(report_name,2)
if os.path.isfile('c:/temp/test.pdf'):
os.remove('c:/temp/test.pdf')
access.DoCmd.OutputTo(3, report_name, r'PDF Format (*.pdf)','c:/temp/test.pdf' )
access.DoCmd.CloseDatabase
access.Quit()
access=None
После этого правильного выполнения, если я выполнил еще один раз, у меня будет первая ошибка. Я выполняю второй раз, а потом снова работает нормально ....
Не понимаю ....