Gộp file pdf theo thứ tự bằng danh sách trong excel
+ Mục đích: In n file pdf trong 1 thư mục có m file pdf (n<=m)
+ Điều kiện: In theo thứ tự lần lượt file có tên trong cột B (Từ B2 đến hết). Tên file pdf trùng với tên file ở cột B. Trường hợp file có tên trong cột B chưa có trong thư mục chứa file pdf (Ở ví dụ là file tên A9) thì in file tên A0 để thay thế.
+ Cách thức giải quyết: Trước mình đã được thành viên giaiphap giúp đỡ code in từng file pdf theo thứ tự trên. Nhưng có nhược điểm là sẽ tạo ra hàng loạt lệnh in và thứ tự các file in sẽ bị đảo lộn. Mình đã thêm thời gian chờ cho từng lệnh in nhưng nhiều trường hợp vẫn không hiệu quả, và nếu file pdf chưa có trong danh sách in cũng không phát hiện ra được.
+ Phương án mới: Mình nghĩ sẽ gộp các file theo thứ tự in, file nào chưa có sẽ để file pdf trắng để phát hiện (file tên A0). Sau đó mới in file đã được gộp đó.
Mình tìm trên mạng thì chỉ có code gộp file pdf thông qua chương trình đọc file pdf là acrobat.Nhưng code chỉ gộp nguyên cả thư mục chứa file mà không chọn lọc cũng như không theo thứ tự mình muốn.
Xin giúp đỡ: Mong mọi người giúp đỡ sửa code để có thể chạy được theo phương án mới.
Anh chị nếu không cài acrobat có thể sửa code dùm để em test thử ạ.
Xin cảm ơn rất nhiều ạ.
Code trong file như sau ạ.Sub Main() Const DestFile As String = "MergedFile.pdf" ' <-- change to suit Dim MyPath As String, MyFiles As String Dim a() As String, i As Long, f As String ' Choose the folder or just replace that part by: MyPath = Range("E3") With Application.FileDialog(msoFileDialogFolderPicker) .AllowMultiSelect = False If .Show = False Then Exit Sub MyPath = .SelectedItems(1) DoEvents End With ' Populate the array a() by PDF file names If Right(MyPath, 1) <> "" Then MyPath = MyPath & "" ReDim a(1 To 2 ^ 14) f = Dir(MyPath & "*.pdf") While Len(f) If StrComp(f, DestFile, vbTextCompare) Then i = i + 1 a(i) = f End If f = Dir() Wend ' Merge PDFs If i Then ReDim Preserve a(1 To i) MyFiles = Join(a, ",") Application.StatusBar = "Merging, please wait ..." Call MergePDFs(MyPath, MyFiles, DestFile) Application.StatusBar = False Else MsgBox "No PDF files found in" & vbLf & MyPath, vbExclamation, "Canceled" End If End Sub Sub MergePDFs(MyPath As String, MyFiles As String, Optional DestFile As String = "MergedFile.pdf") ' ZVI:2013-08-27 https://www.vbaexpress.com/forum/showthread.php?47310-Need-code-to-merge-PDF-files-in-a-folder-using-adobe-acrobat-X ' Reference required: VBE - Tools - References - Acrobat Dim a As Variant, i As Long, n As Long, ni As Long, p As String Dim AcroApp As New Acrobat.AcroApp, PartDocs() As Acrobat.CAcroPDDoc If Right(MyPath, 1) = "" Then p = MyPath Else p = MyPath & "" a = Split(MyFiles, ",") ReDim PartDocs(0 To UBound(a)) On Error GoTo exit_ If Len(Dir(p & DestFile)) Then Kill p & DestFile For i = 0 To UBound(a) ' Check PDF file presence If Dir(p & Trim(a(i))) = "" Then MsgBox "File not found" & vbLf & p & a(i), vbExclamation, "Canceled" Exit For End If ' Open PDF document Set PartDocs(i) = CreateObject("AcroExch.PDDoc") PartDocs(i).Open p & Trim(a(i)) If i Then ' Merge PDF to PartDocs(0) document ni = PartDocs(i).GetNumPages() If Not PartDocs(0).InsertPages(n - 1, PartDocs(i), 0, ni, True) Then MsgBox "Cannot insert pages of" & vbLf & p & a(i), vbExclamation, "Canceled" End If ' Calc the number of pages in the merged document n = n + ni ' Release the memory PartDocs(i).Close Set PartDocs(i) = Nothing Else ' Calc the number of pages in PartDocs(0) document n = PartDocs(0).GetNumPages() End If Next If i > UBound(a) Then ' Save the merged document to DestFile If Not PartDocs(0).Save(PDSaveFull, p & DestFile) Then MsgBox "Cannot save the resulting document" & vbLf & p & DestFile, vbExclamation, "Canceled" End If End If exit_: ' Inform about error/success If Err Then MsgBox Err.Description, vbCritical, "Error #" & Err.Number ElseIf i > UBound(a) Then MsgBox "The resulting file is created:" & vbLf & p & DestFile, vbInformation, "Done" End If ' Release the memory If Not PartDocs(0) Is Nothing Then PartDocs(0).Close Set PartDocs(0) = Nothing ' Quit Acrobat application AcroApp.Exit Set AcroApp = Nothing End Sub
Code kiếc làm gì.
Dùng phầm mềm PDFill (free), NitroPDF gộp lèo cái xong.
Vâng, nhưng không biết phần mềm anh giới thiệu có cho phép gộp theo thứ tự mình chọn không ạ. Em làm thầu, cần in giấy tờ khá nhiều dạng pdf như này ạ
Em muốn in tầm 50-100 file pdf trong đống 200-300 file và phải theo thứ tự theo danh sách trong excel. Trước em chọn từng file in (Rất tốn cơm :D). Sau đó được anh giaiphap giúp in theo danh sách rồi nhưng nó vẫn bị lộn xộn, không theo thứ tự. Nên em nghĩ phương án gộp lại xong mới in sẽ được ạ.
Vậy có muốn dùng code để ghép nhiều file PDF nửa hay không?
Có anh ạ 😀 . Nếu được anh giúp em mới 😀
Em đã thử 2 phần mềm này rồi anh, đúng là nó đầy đủ chức năng cho pdf nhưng gộp vẫn không theo thứ tự được. Hoặc nó viết toàn tiếng anh mà em thì dốt đặc món đó lên chưa tìm thấy ạ.
Muốn vậy thì bạn phải up file PDF thực tế của bạn lên đây, vì những file PDF bạn up ở bài 1 không biết có vấn đề gì không mà nó không nối lại được (Nối được nhưng lại là trang trắng, tôi không hiểu nguyên do) , trong khi sử dụng file PDF khác thì vẫn nói được bình thường.
@giaiphap ,@befaint
Do em nói chưa rõ lên hai anh chưa hiểu hết ý em mong muốn ạ. Em xin trình bày lại ạ:
Vì folder chứa file pdf chứa giả sử 500 file. Khi có yêu cầu gộp khoảng 50 file trong 500 file đó và phải sắp xếp theo thứ tự lần lượt theo danh sách (Giả sử danh sách trong file excel).
Danh sách cần gộp em đã để tên file trùng với danh sách cần gộp.
Về việc gộp trang trắng (Giả sử file trắng có tên A0): Trong trường hợp cần gộp, có file chưa có trong folder pdf thì sẽ gộp file có tên A0 để đánh dấu khi soát lại, bổ sung.
Code trên nó sẽ gộp tất cả file trong foder luôn anh ạ, lần lượt từ trên xuống dưới mà mong muốn của em chỉ là gộp theo thứ tự danh sách trong file excel ý ạ.
Tôi cũng hiểu ngay và luôn từ bài 1, nhưng đã nói là up file pdf thực tế lên đi mà không chịu thì thôi vậy. Ý định là khi nháy nút nó tự động tìm các file theo danh sách và ghép lại thành 1 file pdf, sau đó in file này ra và xóa luôn file vừa tạo này. Nhưng khi sử dụng chỉ thấy in thôi, các công đoạn còn lại không thấy. Nhưng giờ chán rôi, không giúp nửa, ngủ cho khỏe.
Em đính kèm lại file ở bài 1 chuẩn theo thực tế em làm ạ. Danh sách em muốn gộp nó k phải theo từ a-z hay z-a mà nó lẫn nộn theo thứ tự trong file excel mà anh
Thì mình đổi tên để nó sắp xếp cho đẹp.
Trên diễn đàn có sẵn cái đổi tên files đó. Ấn nút cái rẹt. Đúng ý thích ấn nút.
File nó nặng lên em xin đính kèm lại file ở bài 1, 1 phần dữ liệu thực tế anh ạ. Trước anh giúp em tìn file để in rồi nhưng nó đôi khi bị lộn xộn. Code trên file nó hiện chỉ đang gộp các file trong cả folder. Ý em là nhờ sửa để có thể làm được như đúng ý anh hiểu đó anh. Mong anh giúp ạ!
Dạ, em đã hiểu ý của anh. Nhưng bất cập là sao ta có thể chọn tầm 50 file trong folder chứa vài trăm file anh. Em nghĩ tới phương án là chuyển tất 50 file cần chọn đó sang 1 folder khác bằng lệnh lọc theo danh sách trên file excel. Nhưng cái đó em cũng không làm được 😀
Hết bất cập là khi đổi tên những files cần gộp kia bằng cách chèn vào đầu khúc "bất cập_tên mới*.pdf". Cái đám bất cập dồn hết vào một chỗ thế là hết bất cập. Hay thật đấy!
@ Thớt và những ai còn cần vào đọc bài này.
Với thư viện này, chỉ cần liệt kê danh sách các tập tin PDF cần gộp vào cột A rồi ấn nút là xong.
5153
www.giaiphapexcel.com/diendan/threads/python-v%C3%A0-%E1%BB%A9ng-d%E1%BB%A5ng-th%C6%B0-vi%E1%BB%87n-vba-g%E1%BB%99p-v%C3%A0-t%E1%BA%A1o-m%E1%BA%ADt-kh%E1%BA%A9u-files-pdf-h%C3%A0ng-lo%E1%BA%A1t-si%C3%AAu-b%E1%BA%A3o-m%E1%BA%ADt.160264/
www.giaiphapexcel.com/diendan/threads/g%E1%BB%99p-file-pdf-theo-th%E1%BB%A9-t%E1%BB%B1-b%E1%BA%B1ng-danh-s%C3%A1ch-trong-excel.156241/
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học