Gộp file pdf theo thứ tự bằng danh sách trong excel

Liên hệ QC

VuVanHao

Thành viên thường trực
Tham gia
20/6/18
Bài viết
246
Được thích
118
+ 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 ạ.
Mã:
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 http://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
 

File đính kèm

  • GPE.rar
    4.3 MB · Đọc: 107
Lần chỉnh sửa cuối:
Giải pháp
@ 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.



1652346183409.png
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 ạ.
 
Upvote 0
Vậy có muốn dùng code để ghép nhiều file PDF nửa hay không?
Có anh ạ :D . Nếu được anh giúp em mới :D
Bài đã được tự động gộp:

Không biết thì tìm hiểu luôn và ngay đi.

Những phần mềm mình giới thiệu toàn là hàng siêu siêu xịn, toàn ưu tiên phờ ri.
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 ạ.
 
Upvote 0
Có anh ạ :D . Nếu được anh giúp em mới :D
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.
 
Upvote 0
@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 ý ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Chụp cái chỗ gộp đó lên đây mình chỉ cho.
Nó cho phép sắp xếp tùy ý các kiểu con đà điểu luôn.
Đây anh ạ, dù em đã chọn lần lượt, 5>>>3>>>1 khi vào nó vẫn để theo 1-3-5. Nếu di chuyển lại vị trí thủ công bằng tay thì khá khó anh ạ
 

File đính kèm

  • Untitled.png
    Untitled.png
    242.4 KB · Đọc: 44
Upvote 0
Đây anh ạ, dù em đã chọn lần lượt, 5>>>3>>>1 khi vào nó vẫn để theo 1-3-5. Nếu di chuyển lại vị trí thủ công bằng tay thì khá khó anh ạ
Chời đất.

Làm một hồi mà không thấy nó ra quy luật gì à?

Nó tự sắp xếp A-Z đó.

Ấn cái nút Sort là đổi lại Z-A.

1624506575682.png
 
Upvote 0
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.
(Tôi chỉ nói cho đã cái miệng thôi nhe)
 
Upvote 0
Chời đất.

Làm một hồi mà không thấy nó ra quy luật gì à?

Nó tự sắp xếp A-Z đó.

Ấn cái nút Sort là đổi lại Z-A.

View attachment 261212
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
 
Upvote 0
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.
 
Upvote 0
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.
(Tôi chỉ nói cho đã cái miệng thôi nhe)
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 ạ!
Bài đã được tự động gộp:

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.
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 :D
 
Upvote 0
Bất cập ở chỗ chỉ nói suông mà không cho tay cho chân vào làm luôn.
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!
 
Upvote 0
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 ạ!
Bài đã được tự động gộ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 :D
Rút kinh nghiệm có đưa dữ liệu là phải đưa giống với thực tế.
 
Upvote 0
Web KT
Back
Top Bottom