第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 win32com.client 的 Python 導(dǎo)出報告 Microsoft Access

使用 win32com.client 的 Python 導(dǎo)出報告 Microsoft Access

慕桂英3389331 2023-03-08 16:06:28
我有一些 Access 格式的報告,我想從 Python 腳本生成這些報告的 PDF。我閱讀了很多關(guān)于如何做到這一點的問題和答案,并想出了這個簡單的腳本。我的代碼是:import win32com.client as winimport osaccess = 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.CloseDatabaseaccess.Quit()access=None第一次執(zhí)行腳本會出現(xiàn)此錯誤(幫我翻譯成英文):pywintypes.com_error: (-2147352567, 'An exception occurred.', (0, None, ' Cannot execute this action now.', None, -1, -2146825802), None)并且文件訪問是打開的。我第二次執(zhí)行時,它說The database is already open. 當我關(guān)閉 Access 并執(zhí)行它時再次出現(xiàn)第一個錯誤。更新:現(xiàn)在我更改了我的代碼以在腳本執(zhí)行時關(guān)閉數(shù)據(jù)庫,這是我第二次執(zhí)行,然后腳本工作正常。import win32com.client as winimport osimport timedef 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 NameErroraccess = 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.CloseDatabaseaccess.Quit()access=None正確執(zhí)行后,如果我再執(zhí)行一次,我會遇到第一個錯誤。我第二次執(zhí)行,然后再次正常工作。
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻1829條經(jīng)驗 獲得超6個贊

最后我找到了這個解決方案。這不是更好,但它有效。如果有人有更好的解決方案,請現(xiàn)在告訴我。


解決方案是在 Windows 中殺死 MSACCESS 進程。


這是我的代碼:


import win32com.client as win

import os


access = win.Dispatch("Access.Application")

db = access.OpenCurrentDatabase(filename)

access.DoCmd.OpenReport(report_name,2)

if os.path.isfile('c:/temp/test.pdf'): # Delete previous PDF

    os.remove('c:/temp/test.pdf')

access.DoCmd.OutputTo(3, report_name, r'PDF Format (*.pdf)','c:/temp/test.pdf' )

access.DoCmd.CloseDatabase

os.system("taskkill /im MSACCESS.exe") # Kill process in wondows


查看完整回答
反對 回復(fù) 2023-03-08
  • 1 回答
  • 0 關(guān)注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號