格式化导出,是指ExportWithFormatting宏操作和DoCmd.OutputTo方法。
功能是将Access中的对象(表、查询、报表等),导出为Excel、pdf、txt、rtf等文件,其中最常用的是Excel和Pdf格式的文件。特点是格式化导出,导出的数据包含格式(主要针对导出为Excel),窗体、报表也包含样式(主要针对导出为pdf)。
01
参数说明
两种导出方式分别对应于宏和VBA两个不同的环境,用法基本一致,下面以ExportWithFormatting宏操作为例介绍:
格式导出总共有八个参数,后四个基本可以忽略,所以也并不难掌握。
对于要导出的Access对象的类型和名称,直接选择即可。
不同的对象,可输出格式也不相同,如:导出表时可选择的输出格式:
导出报表时可选择的输出格式:
对于表、查询、窗体和报表,还可以导出为一个XML格式的文件,在宏操作中没有列出,DoCmd.OutputTo参数成员中也没有列出它。可以通过以下方法导出:(或使用本文后面讲解的方法)
我们常用的无非就是Excel和PDF这两种。导出为Excel是以表格的形式保存,所以导出的只有数据相关内容和格式部分,而PDF不仅能导出数据,还有窗体、报表中的样式,相当于对它们进行“打印预览”显示的结果导出为PDF文件。这样的特点,对于导出表、查询、模块等对象可能影响不大,但是对于窗体、报表,尤其是对于报表的导出会产生影响。因为我们要输出的报表,往往是动态筛选、处理后的结果,那才是想要导出内容,本文先不作这方面的讲解,先介绍怎样将这些Access对象导出。
“输出文件”参数,设置导出文件的路径和文件名,实际操作中可按以下方式处理:
1、将此参数留空。这样当执行导出时,会弹出对话框,让用户自行设置导出的位置和文件名称,比较灵活。
2、直接输入路径和文件名,与《Access导入导出功能之导入导出电子表格全讲解》中的“文件名”用法相同,也支持相对路径(如:..\销售明细表.xlsx)和字符串形式(如:= CurrentProject.Path & '\销售明细表.xlsx')。
3、导出的文件名可自己设置。无论设置的文件扩展名是什么,实际导出的文件都是“输出格式”中选择的格式。
4、这里的路径是电脑中存在的路径,不支持新建路径(文件夹)。
5、输出文件已经存在于磁盘中时,宏操作会提示是否替换或重新设置文件名;而使用DoCmd.OutputTo方法时会直接覆盖掉原文件,要特别注意。这里与ImportExportSpreadsheet宏操作和DoCmd.TransferSpreadsheet方法导出为Excel电子表格有本质的区别。因为不会将不同的表(查询)导出到一个Excel文件中。
“自动启动”参数,是指导出完成后,是否立即使用默认程序打开文件。
“模板文件”和“编码”参数,则主要是针对导出为Html(htm)网页文件而言,选择模板后,导出的文件会继承模板中的样式(Style)设置,比如文件中的css样式。设置模板文件后,就可以选择编码,明确以哪个编码格式输出文件。
至于“输出质量”,一般也无需关注,选择屏幕和打印通常情况下感觉不到区别。
02
特别说明
使用宏操作进行导出,八个参数中有六个都可以直接选择,操作很直观。而在VBA中使用的是DoCmd.OutputTo方法,参数中需要着重说明一下“输出格式”参数,即OutputFormat参数,它的类型为AcFormat,本应该是个枚举常量,在宏操作中直接选择就好,但是VBA中不能自动列出成员以选择,需要自行输入,下面是常用的枚举值:
acFormatPDF: PDF格式 (PDF) acFormatRTF: RTF格式(RTF) acFormatTXT: 文本文件 (TXT) acFormatXLS: Excel 97-2003 工作簿 (XLS) acFormatXLSX: Excel 工作簿 (XLSX) acFormatHTML: HTML (HTML)
例如,导出一个窗体记录到xlsx文件:
DoCmd.OutputTo acOutputForm, '店员表窗体', acFormatXLSX, '店员列表.xlsx'
这时我们会想,这个OutputFormat参数既然需要手动输入,怎么记忆它呢?
我要说的是,根本就无需记忆这些枚举值,这正是DoCmd.OutputTo方法的特别之处。因为这个参数对用户输入的容错度实在是太高了!比如还是要输出一个xlsx文件,你可以到ExportWithFormatting宏操作中把输出格式中的内容复制过来:
DoCmd.OutputTo acOutputForm, '店员表窗体', 'Excel 工作簿(*.xlsx)', '店员列表.xlsx'
或者在VBA的立即窗口中获取到常量acFormatXLSX的具体值:
从而参数使用这个'Microsoft Excel Workbook (*.xlsx)';而这个都不足以体现VBA对它的容错度。你甚至可以使用'(*.xlsx)'、'.xlsx',都能够正常输出文件,我最终选择的是使用'xlsx',简单易用,完全不需要记忆。其他格式以此类推。