DoCmd.TransferSpreadsheet 问题
Posted
技术标签:
【中文标题】DoCmd.TransferSpreadsheet 问题【英文标题】:DoCmd.TransferSpreadsheet Issue 【发布时间】:2017-11-06 14:25:02 【问题描述】:我在 Access 2013 中将查询导出到 Excel。这是我用于导出的语法
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryDataExport", strExportPath, True
数据按应有的方式传输,但查询中的字段之一标题为 Player #
,导出到 Excel 时变为 Player .
如何在导出时保持#
完好无损?
【问题讨论】:
您要导出的查询对象中的字段名称是否用方括号括起来? @ChristopherD.- 是的,它是表格中的短文本类型,在查询中它被列为 [Player #] 试试 11 号帖子,这里是 AndrewKKWalker windowssecrets.com/forums/showthread.php/…。我相信问题是您在导出 support.office.com/en-us/article/… 中使用了保留符号 @user2676140 虽然您对问题的分析是正确的,但该解决方案不是(它创建一个 CSV 文件,而不是一个 xslx 文件)。如果要以这种方式导出为.xslx,则需要创建自定义导出函数。 是的,您可以使用记录集创建自定义导出功能。给我一点时间,我什至可以为你写一个。 【参考方案1】:虽然DoCmd.TransferSpreadsheet
可以重现问题,但请考虑DoCmd.OutputTo,它保留了查询的格式。前一种方法可能更侧重于电子表格格式。
事实上,DoCmd.OutputTo
看起来是外部数据\Excel 导出功能区方法的自动化版本(选择保留所有格式):
DoCmd.OutputTo acOutputQuery, "qryDataExport", acFormatXLSX, strExportPath
【讨论】:
【参考方案2】:您可以使用以下函数将内容导出到 .xlsx 文件,而不必处理 DoCmd.TransferSpreadsheet
的限制
Public Sub CustomExcelExport(QueryOrTableOrSQL As String, FileLocation As String)
Dim rs As DAO.Recordset
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")
Set rs = CurrentDb.OpenRecordset(QueryOrTableOrSQL)
excelApp.Workbooks.Add
Dim colNo As Long: colNo = 1
Dim rowNo As Long: rowNo = 1
Dim fld As Variant
For Each fld In rs.Fields
excelApp.Cells(rowNo, colNo) = fld.Name
colNo = colNo + 1
Next fld
Do While Not rs.EOF
colNo = 1
rowNo = rowNo + 1
For Each fld In rs.Fields
excelApp.Cells(rowNo, colNo) = fld.Value
colNo = colNo + 1
Next fld
rs.MoveNext
Loop
excelApp.ActiveWorkbook.SaveAs FileLocation, 51 'xlOpenXMLWorkbook
excelApp.Quit
End Sub
打电话给:CustomExcelExport "qryDataExport", strExportPath
【讨论】:
我刚刚将语法移到我的生产数据库中,它正在点击 Set rs = CurrentDb.OpenRecordset(QueryOrTableOrSQL) 行,然后离开该过程?所以实际上没有出口。 - 如果有差异,那就是 Excel 2013。 您的查询实际上是否返回行?如果您的查询返回 0 行和 0 个字段,就会发生这种情况。 它正在返回行 - 但似乎一个字段有错误,因为它要求我输入一个值。这会是罪魁祸首吗? 是的,这对参数化查询不起作用(DoCmd.TransferSpreadsheet
也不起作用)。您可以调整它以使用QueryDef
和参数,并使用ParamArray
将参数发送到查询,或者您可以修复您的查询。
是的 - 我删除了这些字段并且查询正在执行,现在上面的过程给了我运行时错误'13':类型不匹配以上是关于DoCmd.TransferSpreadsheet 问题的主要内容,如果未能解决你的问题,请参考以下文章