筆者很多時候都會將文件變成 Acrobat 的 PDF 存檔,也儲存了不少 PDF 資料檔,久而久之,累積了不少 PDF 檔,雖然已經是分門別類,但當需要時要找出來,也是花了不少時間,所以想將 PDF 資料檔名稱、資料和頁數紀錄在 Excel Worksheet 內,方便找尋檔案時候使用。
Excel VBA 讀取 PDF 檔案的頁數 |
- 操作系統:Windows 7 64-bit 版本
- 開發環境:Microsoft Excel 2007 版本
- 電腦:MSI GS60 2QD Ghost 龍魂筆電(Gaming Notebook)
- CPU:Intel Core i7-4720HQ 2.6GHz Haswell 四核心處理器
- GPU :NVIDIA GeForce GTX 965M 2GB GDDR5 獨顯
- Memory:8GB DDR3 + 1TB HDD
- Display:15.6吋 4K 面板
筆者使用讀取二進制檔案方法,首先是選擇了 Directory,然後祇選擇讀取 PDF(.pdf)檔案,再用 Regular Expressions 找尋 Page,最後儲存在 Worksheet 內。
Excel VBA 編程(Excel 2007):
- 檔案 → 開新檔案,打開新檔案(或按 Ctrl + N)。
- 工具 → 巨集 → Visual Basic 編輯器,進入 VBA 編輯器(或按 Alt + F11)。
- 選擇功能表命令 插入 → 點擊模組(Insert → Module)。
- 編寫 VBA 程式。
- 執行 VBA 模組(或按 F5)。
- 檔案 → 關閉並回到 Microsoft Excel(或按 Alt + Q)。
- 儲存檔案。
讀取 PDF 檔案的頁數 VBA 程式:
Private Sub PDFPage() Dim x As Long ' File Count Dim xStr As String ' Filename Dim xRange As Range ' Cell Range Dim xFilebox As FileDialog ' File Directory Box Dim xFdItem As Variant ' File Item Dim xFileName As String ' Filename Dim xFileNum As Long ' Filename Number Dim RegExp As Object ' File Object
Set xFilebox = Application.FileDialog(msoFileDialogFolderPicker)
If xFilebox.Show = -1 Then xFdItem = xFilebox.SelectedItems(1) & Application.PathSeparator xFileName = Dir(xFdItem & "*.pdf", vbDirectory) 'Select PDF File Only
Set xRange = Range("A1") Range("A:B").ClearContents ' Clear All AB Content Range("A1:B1").Font.Bold = True ' Header Font Bold xRange = "File Name" ' Header File Name xRange.Offset(0, 1) = "Pages" ' Headder Pages
x = 2 ' Start From Row 2 xStr = "" ' Clear Filename String
Do While xFileName <> "" Cells(x, 1) = xFileName ' Store Filename
' Tools -> References - > Microsoft VBScript Regular Expressions 5.5 (Pattern Search) Set RegExp = CreateObject("VBscript.RegExp") ' VBScript Regular Expressions for Search RegExp.Global = True ' Global Regular Expressions for Search RegExp.Pattern = "/Type\s*/Page[^s]" ' Search Pattern Page
xFileNum = FreeFile ' Return Integral for Next File Number Open (xFdItem & xFileName) For Binary As #xFileNum ' Open Binary File xStr = Space(LOF(xFileNum)) ' Return the Size of File Get #xFileNum, , xStr ' Get File Close #xFileNum ' Close File Cells(x, 2) = RegExp.Execute(xStr).Count ' Search Pattern and Store Page Number x = x + 1 ' x+1 for counter xFileName = Dir ' Returns the Next of a Filename until "" Loop End If End Sub |
相關網頁:
◎ RS-232 ﹣用 Excel 做串列介面數據傳輸及接收 (四)
◎ RS-232 ﹣用Excel API做串列介面數據傳輸及接收 (五)
◎ Excel:Customize Menu 如何加入自訂功能表 (一)
◎ Excel:Customize Menu 如何加入自訂功能表 - 範例 (二)
◎ Excel:User Defined Functions (UDF) 自定函數
◎ Excel:排序的順序 Sort order
◎ Excel : VLOOKUP 和 INDEX 函數應用
◎ Excel:CTRL 組合快速鍵
◎ Excel:Function 功能快速鍵
◎ Excel:打開時如何不開啟空白的工作表
◎ Excel:簡化找尋資料的 VBA 小程式
沒有留言:
張貼留言