如何将 Access 报表(包括子报表)保存为 Excel 兼容文件和可读 PDF?
Posted
技术标签:
【中文标题】如何将 Access 报表(包括子报表)保存为 Excel 兼容文件和可读 PDF?【英文标题】:how do i save an Access report (including a subreport) as an Excel-compatible file and a readable PDF? 【发布时间】:2019-11-22 15:10:06 【问题描述】:我定义了一个 Access (Office 365) 报告。当我在我设计的 Access 应用程序中打开它时,它会正确打开并显示正常。该应用程序与处理医疗保健数据有关,因此我们希望通过将报告另存为 PDF(第一个偏好)或 Excel 文件(第二个偏好)来保存报告中的信息日志。代码创建文件,但两个文件中都没有可用的内容。当我尝试打开 excel 文件时,我收到错误“无法打开文件,因为文件格式扩展名无效。”。当我打开 PDF 文件时,它包含错误信息。
我在表单上有一个按钮。这是事件过程。
Private Sub cmdRpt_Excel_Proc_Summary_Click()
Call ExportReport("Rpt_FileProcessing_Summary", "Rpt_FileProc_Summary", acFormatXLS)
Call ExportReport("Rpt_FileProcessing_Summary", "Rpt_FileProc_Summary", acFormatPDF)
End Sub
这是ExportReport的代码
Sub ExportReport(strQry As String, strOutFile As String, strOutType As String)
On Error GoTo errHandler
Dim xlApp As Object, wkbk As Object
Dim strMsg
Dim strFileNm As String
strFileNm = DEFAULT_FOLDER & strOutFile & "_" & Format(Now(), "yyyy-mm-dd_hhnn")
If strOutType = acFormatXLS Then
strFileNm = strFileNm & ".xlsx"
Else
strFileNm = strFileNm & ".pdf"
End If
'DoCmd.OutputTo acOutputReport, strQry, strOutType, strFileNm, , , , acExportQualityScreen
DoCmd.OutputTo acOutputReport, strQry, strOutType, strFileNm, True
If strOutType = acFormatXLS Then
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Visible = True
Set wkbk = .Workbooks.Open(strFileNm)
End With
End If
procDone:
Set wkbk = Nothing
Set xlApp = Nothing
Exit Sub
errHandler:
strMsg = Err.Description
MsgBox strMsg, vbExclamation, "Unanticipated Error"
Resume procDone
End Sub
错误事件永远不会触发。创建了excel和pdf文件,但是我无法打开excel文件,pdf文件的内容是:
在诊断问题方面的任何帮助将不胜感激。提前谢谢
【问题讨论】:
当我打开报告时,我尝试将报告“打印”到 PDF 文件(输出驱动程序是 Microsoft 到 PDF)。我得到与错误消息相同的文件内容并且没有报告数据。当我从其他 Office 产品打印到 PDF 时,我会得到内容的有效 PDF 文件。所以我绝对认为这是一个访问问题,而不是创建 PDF 文件的能力。 acFormatXLS 是 .xls,对于 .xlsx 使用 acFormatXLSX。 @krish KM,我根据您的建议重新审核了我的代码。但是,我发现其他研究表明 Access Reports 不能保存为 XLSX 格式,但可以保存为 XLS。我不确定为什么。我将我的代码调整为 acFormatXLS,并确保我分配了正确的文件扩展名(“.xls”),并且我得到了代码工作。 excel 看起来并不漂亮,但数据都在那里用于剪切和粘贴目的。如果用户想要漂亮的报告版本,他们可以使用 PDF 版本。感谢您的帮助。 【参考方案1】:尝试使用其他程序来读取这些文件,因为 MS Edge 有时有点奇怪。您可以使用 FireFox 阅读 .pdf
你能打开 Excel 文件吗?
【讨论】:
感谢您的建议。我能够使用不同的软件阅读 PDF。必须让 IT 部门安装它,因为 Edge 是默认设置,而像我这样的最终用户无法在计算机上安装任何东西。【参考方案2】:在@krish KM 和@Phillipp Stappert 指出正确的方向后,我能够让代码正常工作。最后我的表单上有 2 个按钮。第一个按钮将报告保存为 Excel 文件的 XLS 版本并在 Excel 中打开。第二个按钮将报告保存为 PDF 文件并在 Chrome 中打开。为了让 PDF 部分正常工作,我将计算机上的默认程序更改为 Chrome 浏览器(在 IT 部门为我安装之后)。两个按钮创建各自的文件并在创建后自动打开文件。最终代码如下。
Private Sub cmdRpt_Excel_Proc_Summary_Click()
Call ExportReport("Rpt_FileProcessing_Summary", "Rpt_FileProc_Summary", acFormatXLS)
End Sub
Private Sub cmdRpt_PDF_Proc_Summary_Click()
Call ExportReport("Rpt_FileProcessing_Summary", "Rpt_FileProc_Summary", acFormatPDF)
End Sub
Sub ExportReport(strQry As String, strOutFile As String, strOutType As String)
On Error GoTo errHandler
Dim xlApp As Object, wkbk As Object
Dim strMsg
Dim strFileNm As String
strFileNm = DEFAULT_FOLDER & strOutFile & "_" & Format(Now(), "yyyy-mm-dd_hhnn")
If strOutType = acFormatXLS Then
strFileNm = strFileNm & ".xls"
DoCmd.OutputTo acOutputReport, strQry, strOutType, strFileNm, False
Else
strFileNm = strFileNm & ".pdf"
DoCmd.OutputTo acOutputReport, strQry, strOutType, strFileNm, , , , acExportQualityScreen
End If
If strOutType = acFormatXLS Then
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Visible = True
Set wkbk = .Workbooks.Open(strFileNm)
End With
ElseIf strOutType = acFormatPDF Then
Application.FollowHyperlink strFileNm
End If
procDone:
Set wkbk = Nothing
Set xlApp = Nothing
Exit Sub
errHandler:
strMsg = Err.Description
MsgBox strMsg, vbExclamation, "Unanticipated Error"
Resume procDone
End Sub
【讨论】:
以上是关于如何将 Access 报表(包括子报表)保存为 Excel 兼容文件和可读 PDF?的主要内容,如果未能解决你的问题,请参考以下文章