VBA: Excel文件批量转化为pdf (2)
文章背景:测试仪器的数据有些会以Excel文件的形式保存,有时需要将测试数据转化为pdf格式。上篇文章(见文末的延伸阅读)通过VBA代码,采用ExportAsFixedFormat
函数将excel文件转化为pdf文件,对于部分excel文件的转化效果不太好,有些谱图显示不完整,如下图所示。
经过几次尝试后发现,如果是采用另存为
的方式导出为pdf文件,部分谱图会出现乱码,而通过虚拟打印机(Adobe PDF
或Microsoft Print to PDF
)的方式将excel文件打印输出为pdf文件,谱图则显示完整。通过使用宏记录器,发现虚拟打印机的输出过程采用的是PrintOut
函数。
因此,下面以批量转化Excel文件为例,采用VBA编程,借助PrintOut
函数,进行任务的实现。
在批量转化文件
的按钮中添加如下的宏代码:
Option Explicit
Sub ConvertFiles()
'批量转化Excel文件为pdf
Dim filefolder As String
Dim fd As FileDialog, t As String, str As String, name As String
Application.ScreenUpdating = False
'获取默认路径
ChDrive ThisWorkbook.Worksheets("Sheet1").Range("B2").Value
ChDir ThisWorkbook.Worksheets("Sheet1").Range("B3").Value
'1 选择需要转化的文件夹路径
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
If .Show = -1 Then
t = .SelectedItems(1)
Else
MsgBox "未选取文件夹!"
Exit Sub
End If
End With
'2 创建储存pdf文件的空文件夹
filefolder = ThisWorkbook.Worksheets("Sheet1").Range("B3").Value & "\pdf文件"
If Not isDirectory(filefolder) Then
VBA.MkDir (filefolder)
Else
MsgBox "默认路径的pdf文件夹已存在,请确认!"
Exit Sub
End If
'3 批量转化excel文件
str = Dir(t & "\*.xls*") ' 查找excel文件
Do While Len(str) > 0
Workbooks.Open (t & "\" & str)
name = CreateObject("Scripting.FileSystemobject").getextensionname(str) '获取文件的扩展名
ActiveWorkbook.Worksheets(1).PrintOut copies:=1, preview:=False, ActivePrinter:="Microsoft Print to PDF" _
, PrintToFile:=True, PrToFileName:=filefolder & "\" & Replace(str, name, "pdf"), IgnorePrintAreas:=False
Workbooks(str).Close False
str = Dir()
Loop
MsgBox "Done!"
Application.ScreenUpdating = True
Exit Sub
End Sub
Function isDirectory(pathName As String) As Boolean
'用于判断文件夹是否存在
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
isDirectory = fso.FolderExists(pathName)
End Function
运行效果展示http://mpvideo.qpic.cn/0bf2oiacoaaatmanhciesrqva4wde5zaajya.f10002.mp4?dis_k=6dfbb616ed245b6194e5e38e49636a47&dis_t=1663655784&vid=wxv_1981767069717135363&format_id=10002&support_redirect=0&mmversion=false
参考资料:
[1] Sheets.PrintOut method (Excel)(https://docs.microsoft.com/en-us/office/vba/api/excel.sheets.printout)
[2] Converting a worksheet to PDF using VBA PrintOut method (https://stackoverflow.com/questions/43437576/converting-a-worksheet-to-pdf-using-vba-printout-method)
延伸阅读:
相关文章
- 将Excel转换为word_excel如何将横排变成竖排
- java导出pdf模板_java模板导出PDF[通俗易懂]
- PDF Reader Pro Mac(好用的pdf编辑阅读器)
- VBA: 多份Excel文件的批量顺序打印
- 【说站】python中Excel图表的绘制
- hutool excel写数据
- phpspreadsheet 读取 Excel 表格问题
- 对象转json字符串字段丢失_excel某个对象程序库丢失
- 「干货」数据分析必备的Excel常用10大应用技巧『Excel系列2』
- EasyExcel实现对excel文件读写
- jxl解析Excel文件详解编程语言
- 报表 MySQL导出Excel数据报表的指南(mysql导出excel)
- Linux命令指南:快速掌握PDF版(linux命令手册pdf)
- 操作系统Linux下的PDF阅读优势(pdf阅读器linux)
- Linux下的PDF阅读:一款轻松高效的阅读器(linux的pdf阅读器)
- 将Excel表格数据导入MySQL数据库(excel到mysql)
- MSSQL导入Excel数据的精彩实战(mssql读excel)
- 学习MySQL 从初学者到高级开发者的必备PDF指南(mysql。pdf)
- Oracle与Excel联合提升数据分析挖掘能力(oracle与excel)
- 实现Redis数据批量导出至Excel(redis 转excel)
- PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
- 把excel表格里的数据导入sql数据库的两种方法
- ASP.NET(C#)读取EXCEL另加解决日期问题的方法分享