自动打印现有的 MS Access 报告(最好使用 Python,但也可以考虑其他替代方案)

3

我有大约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()

顺带一提,我是一名教师,这将帮助我评分并减轻压力大的学生在考试结束时打印文件的负担。使用的操作系统是Windows 10。

我可以尝试使用任何其他脚本语言(例如powershell等),以便更轻松地自动化此任务。

1个回答

5
您可以使用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,链接是https://stackoverflow.com/questions/52601717/show-formulas-in-excel-using-python-win32com,虽然我最终拼凑出了一个可行的解决方案,但花了很长时间,而且我不确定是否是最佳方式。 - undefined
1
@Levon 主要是使用 Microsoft Docs 和 VBA 的对象浏览器。在使用 Office COM 对象时,几乎必须打开 VBA 编辑器并使用即时窗口,这样你就可以找到 Access 的 acFormatPDF 常量是 'PDF Format (*.pdf)',例如。 - undefined
1
嗯,你可以遍历Application.Reports集合,然后打印其中每个报表的Name属性。查询在数据库对象的QueryDefs集合中,但要注意其中包含了不可见的临时查询。VBA编辑器只是一个非常简单的方式来熟悉这些对象和集合,因为它具有智能感知功能、本地窗口显示对象属性及其值,并且可以快速在当前打开的数据库和应用程序上进行测试。 - undefined
Erik A,非常感谢你提供的解决方案!我遇到了一个问题,如果我使用a.DoCmd.OpenReport('My_Report'),它会使用我的默认打印机(这是我想要的),但是我必须导航到文件路径并点击保存每个报告(不太理想)。然而,如果我使用a.DoCmd.OutputTo(3, report_name, r'PDF Format (*.pdf)', r'C:\Path\To\file.pdf'),这将不使用我的默认打印机。有没有办法在使用a.DoCmd.OpenReport时设置文件路径并自动保存?或者有没有办法在使用a.DoCmd.OutputTo时告诉它使用默认打印机? - undefined
@Jenna DoCmd.OutputTo根本不使用打印机,而是使用内置的保存为PDF功能。据我所知,在Access中无法指定打印机将使用的文件位置。您的打印机可能提供在打印之前指定文件路径的选项,如果是这样,您可以使用Python进行修改,但默认的Microsoft打印机没有此选项。 - undefined
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接