Skip to content

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:

  1. Ghi số đó vào một ô driver (cell điều khiển).
  2. Excel tự tính lại bảng dữ liệu phụ thuộc.
  3. In hoặc xuất PDF các sheet đã chọn.
  4. (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ọnMô 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 sheet DATA.
  • 'Sheet One'!A1 — ô A1 trên sheet Sheet 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:

  1. Tất cả PDF tạm lưu ở folder temp.
  2. 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).
  3. Lưu vào path bạn chọn ở dialog Save As.
  4. 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

  1. Tạo sheet DATA chứ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).
  2. Tạo các sheet template (YCNTCV, BBNTCV, KT_DD, ...) có công thức INDEX/MATCH hoặc VLOOKUP đọc từ DATA!B9.
  3. 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

  1. Mở workbook đã setup.
  2. Mở dialog In hàng loạt.
  3. Cấu hình Phạm vi + 3 RefEdit (Driver/Sheet/Filename) + tùy chọn.
  4. Click Export PDF (xuất PDF) hoặc In (gửi lệnh print).
  5. Status bar Excel hiện tiến độ: DVD Addin: Export PDF 5/100 (số 5)....
  6. 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 = ONInteractive = 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

Released under DVDAddin License.