In hàng loạt (Batch Print)
Lặp qua một dải số (vd: 1..100), với mỗi vòng lặp:
- Ghi số đó vào một ô driver (cell điều khiển).
- Excel tự tính lại bảng dữ liệu phụ thuộc.
- In hoặc xuất PDF các sheet đã chọn.
- (Tùy chọn) gộp tất cả PDF thành 1 file cuối.
Ứng dụng điển hình: in 100 biên bản nghiệm thu cho 100 hạng mục, hoặc xuất 50 phiếu lương cho 50 nhân viên — bảng dữ liệu được thiết kế để tự đổi khi cell driver thay đổi.
Mở dialog
DVD Addin → nhóm File và In → click split-button In hàng loạt.
Cấu hình
Phạm vi số
| Tùy chọn | Mô tả |
|---|---|
| Liên tục (Start–End) | Lặp qua N → M (vd: 1 → 100). |
| Riêng lẻ (1+3+5) | Danh sách rời rạc cách bởi + (vd: 5+8+12+20). |
Driver cell (số)
Ô Excel chứa số được thay đổi mỗi vòng lặp.
Cú pháp:
DATA!$B$9— ô B9 trên sheetDATA.'Sheet One'!A1— ô A1 trên sheetSheet One(tên chứa dấu cách).B9— nếu cell ở sheet đang chọn khi mở dialog.
Click icon mũi tên bên cạnh để chọn ô bằng chuột trong Excel.
Sheet-print cell
Ô chứa tên các sheet cần in, ngăn cách bởi +:
Ví dụ giá trị ô DATA!$B$8: YCNTCV+BBNTCV+KT_DD
→ Mỗi vòng lặp, in/PDF 3 sheet này cùng lúc (multi-select trước khi gửi lệnh PrintOut/ExportPDF).
Filename cell (chỉ cho PDF)
Ô chứa tên file PDF cho vòng lặp hiện tại.
Ví dụ giá trị DATA!$T$9: BBNTCV_DD-05_2026-05-15
→ File output: BBNTCV_DD-05_2026-05-15.pdf.
Các ký tự không hợp lệ trong filename (\/:*?"<>|) tự được thay bằng _.
Số bộ copy (chỉ cho Print)
Số lần in mỗi vòng lặp. Mặc định 1.
Tùy chọn
Auto refresh AutoFilter giữa các vòng lặp
Khi cell driver đổi, AutoFilter có thể không tự refresh → bảng hiện nhầm. Tick để force AutoFilter.ApplyFilter() mỗi vòng.
Auto-fit chiều cao dòng các ô merge
Sau khi cell driver đổi, text có thể dài hơn → row height không đủ. Tick để chạy MergeAutoFit cho các vùng đã cấu hình trong Mucluc!B5:D104 (cột C = autofit ranges).
Auto-insert page break tại vùng ký
Tự chèn page break trên dòng cấu hình trong Mucluc!D{row} (cột D = "Dòng Ngắt Trang Cuối"). Đảm bảo phần chữ ký không bị dồn cuối trang.
Smart behavior (2026-05): chỉ chèn manual break NẾU đường ngắt trang tự nhiên của Excel (dashed line) đang ở bên dưới dòng cấu hình. Nếu auto break đã ở trên (vùng ký đã tự sang trang) → không chèn → tránh tạo trang trống thừa.
Gộp các file PDF xuất ra thành 1 file duy nhất (chỉ Export PDF)
Sau khi xuất hết các vòng lặp:
- Tất cả PDF tạm lưu ở folder temp.
- PdfSharp gộp chúng theo thứ tự generation (KHÔNG theo alpha — đảm bảo iteration 52 trước 53 dù filename là TS06/TS05).
- Lưu vào path bạn chọn ở dialog Save As.
- Xóa folder temp.
Định dạng thời gian
Dropdown chọn format cho biến {date} trong template (nếu có): dd/MM/yyyy (mặc định), yyyy-MM-dd, MM-yyyy, ...
Lưu thiết lập
Click Lưu thiết lập — settings được lưu vào sheet ẩn DVDAddinSetting của workbook hiện tại. Lần sau mở dialog từ workbook đó → tự load lại.
Quy trình điển hình
Setup workbook lần đầu
- Tạo sheet
DATAchứa:B9— số driver (vd: số hạng mục).B8— tên sheet cần in (vd:YCNTCV+BBNTCV+KT_DD).T9— tên file PDF (formula=CONCATENATE(...)hoặc literal).
- Tạo các sheet template (YCNTCV, BBNTCV, KT_DD, ...) có công thức
INDEX/MATCHhoặcVLOOKUPđọc từDATA!B9. - Tạo sheet
Mucluc(nếu cần config autofit/page break) với:- Cột B (row 5..104) = tên sheet.
- Cột C = autofit ranges (
A4:F50+A60:F80). - Cột D = "Dòng Ngắt Trang Cuối" (số nguyên).
Chạy
- Mở workbook đã setup.
- Mở dialog In hàng loạt.
- Cấu hình Phạm vi + 3 RefEdit (Driver/Sheet/Filename) + tùy chọn.
- Click Export PDF (xuất PDF) hoặc In (gửi lệnh print).
- Status bar Excel hiện tiến độ:
DVD Addin: Export PDF 5/100 (số 5).... - Khi xong → popup tổng kết: số vòng, số PDF/in, số lỗi, thời gian từng phase.
Phase timing report
Popup tổng kết hiển thị bảng phân tích thời gian:
⏱ Tổng: 45.12s
• Ghi driver cell: 1.23s (3%)
• Calculate: 8.45s (19%)
• AutoFilter: 0.12s (0%)
• Resolve+Select sheet: 2.34s (5%)
• Auto-fit merge: 4.56s (10%)
↳ Pass1 baseline: 1.23s
↳ Pass2 per-merge: 2.34s (45 merge)
↳ Pass3 apply: 0.99s
• Export PDF|In: 28.4s (63%)
• Gộp PDF (PdfSharp): 0.5s (1%)Nhờ bảng này, bạn biết bottleneck nằm ở đâu để optimize:
- Phase Calculate chiếm > 30% → bảng có công thức quá phức tạp.
- Phase Auto-fit merge > 20% → giảm số range trong Mucluc!C.
- Phase Export > 70% → bình thường, không tối ưu được (Excel/PrintCommunication đã được tắt).
Khắc phục sự cố
"Không có workbook đang mở"
Mở 1 workbook bất kỳ trước khi click lệnh.
"Không có số nào để lặp"
Phạm vi rỗng (Start > End hoặc Discrete để trống). Kiểm tra lại.
Workbook tự đóng giữa chừng / Excel crash
Có thể do Worksheet_Change handler trong VBA của workbook đó tạo infinite loop khi cell driver đổi. Tắt EnableEvents tạm thời hoặc fix VBA.
EnableEvents
Phiên bản hiện tại giữ EnableEvents = ON và Interactive = ON trong khi loop. Lý do: nhiều workbook (như FormNTCV.xlsx) dựa vào Worksheet_Change để propagate cell driver đến các bảng phụ thuộc. Tắt events sẽ làm mỗi vòng lặp export ra cùng dữ liệu (= vòng đầu).
File PDF gộp bị sort sai thứ tự
KHÔNG nên xảy ra ở 2.7.7+ — PdfSharp gộp theo iteration order, không theo alpha filename. Nếu vẫn xảy ra, gửi bug report.
"RPC_E_WRONG_THREAD" / Excel COM error
Có thể do macro VBA khác đang chạy. Đóng all macro → restart Excel → thử lại.
Liên quan
- Merge Word — tương tự nhưng output Word/PDF dùng template mail merge.
- Send Email — gửi email hàng loạt.
- Preferences → File and Print — config padding cho autofit.