Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 自动打印现有MS Access报告(最好使用Python,但也可以使用其他方法)_Python 3.x_Ms Access_Printing_Win32com - Fatal编程技术网

Python 3.x 自动打印现有MS Access报告(最好使用Python,但也可以使用其他方法)

Python 3.x 自动打印现有MS Access报告(最好使用Python,但也可以使用其他方法),python-3.x,ms-access,printing,win32com,Python 3.x,Ms Access,Printing,Win32com,我有大约30个.accdb文件,都包含一个同名的报告。我想自动将报告保存为PDF,以便后续打印。仅此而已,无需查询,无需修改,只需将保存的报告打印成PDF即可 我可以成功地打开数据库,但我不知道如何做其余的 import win32com.client a = win32com.client.Dispatch("Access.Application") a.visible = 1 filename = r'C:\bla\Exam_1\PrintTest\db.accdb' db = a.O

我有大约30个
.accdb
文件,都包含一个同名的报告。我想自动将报告保存为PDF,以便后续打印。仅此而已,无需查询,无需修改,只需将保存的报告打印成PDF即可

我可以成功地打开数据库,但我不知道如何做其余的

import win32com.client

a = win32com.client.Dispatch("Access.Application")
a.visible = 1  
filename = r'C:\bla\Exam_1\PrintTest\db.accdb'
db = a.OpenCurrentDatabase(filename)

report_name = 'My_Report'

a.Quit()
FWIW,我是一名教师,这将帮助我对提交的材料进行评分,减轻学生在考试结束时打印的负担。使用Windows10


我愿意使用任何其他脚本语言(powershell?)来帮助我轻松地自动化此任务。

您可以使用
DoCmd.OpenReport
自动打开和打印报告

import win32com.client

a = win32com.client.Dispatch("Access.Application")
a.visible = 1  
filename = r'C:\bla\Exam_1\PrintTest\db.accdb'
db = a.OpenCurrentDatabase(filename)

report_name = 'My_Report'
a.DoCmd.OpenReport('My_Report')
a.Quit()
默认情况下,
DoCmd.OpenReport
将使用报告设置中指定的打印机打印报告。我有代码在打印预览中打开它,并指定打印机

如果要导出为PDF,还可以自动执行以下操作:

import win32com.client

a = win32com.client.Dispatch("Access.Application")
a.visible = 1  
filename = r'C:\bla\Exam_1\PrintTest\db.accdb'
db = a.OpenCurrentDatabase(filename)

report_name = 'My_Report'
a.DoCmd.OutputTo(3, report_name, r'PDF Format (*.pdf)', r'C:\Path\To\file.pdf')
a.Quit()

哇!这太棒了。我能问一下你对这类信息使用了哪些参考资料吗?我看起来一点运气都没有。我最近在Excel中遇到了一个类似的查询,虽然我能够拼凑出一个可行的解决方案,但这需要很长时间,而且我不确定这是不是最好的方法。@Levon主要是来自VBA的对象浏览器。例如,使用Office COM对象几乎必须打开带有即时窗口的VBA编辑器,这样您可以发现Access
acFormatPDF
常量是
'PDF Format(*.PDF)
。例如,如何获取给定数据库中所有报告的名称,或显示查询的名称,那类东西。。如果可以的话,我喜欢用Python自动化重复的任务-我只是觉得与Access/Excel交互所需的Win32 COM文档很难。啊,好吧,我没有太广泛地使用VBA,但我想我知道你指的是什么。我将尝试进一步了解这一点。您可以迭代
应用程序.Reports
集合,然后为其中的每个报表打印
Name
属性。查询位于数据库对象的QueryDefs集合中,但请注意其中包含不可见的临时查询。VBA编辑器只是熟悉这些对象和集合的一种非常简单的方法,因为您有intellisense,即显示对象属性及其值的“局部变量”窗口,并且可以在当前打开的数据库和应用程序上快速测试