Kết hợp với Word
DVDAddin điều khiển Microsoft Word qua COM: sinh hàng loạt văn bản từ bảng Excel, và chuyển hàng loạt file Word sang PDF. Trang này nói rõ cơ chế trộn thư thực tế của add-in, những gì nó không làm, và cách làm thay thế khi gặp các giới hạn đó.
Ba lệnh liên quan Word
| Lệnh | Vị trí trên ribbon | Việc lệnh làm |
|---|---|---|
| Tạo tiêu đề | DVD Addin › File và In › Menu Trộn | Bọc dòng tiêu đề bảng thành [Tên cột] — chuẩn bị cho trộn thư |
| Trộn sang Word | DVD Addin › File và In | Mỗi dòng dữ liệu → một file Word từ (các) mẫu đã chọn |
| Word → PDF | DVD Addin › File và In › Menu PDF / OCR | Chọn nhiều .doc/.docx → xuất PDF cùng tên, cùng thư mục |
Cú pháp trường trộn: [TênCột]
Đây là điểm hay bị nhầm nhất. DVDAddin không dùng {{...}}, không dùng trường trộn Merge Field của Word, không có bộ định dạng kiểu |VND hay |dd/MM/yyyy. Quy tắc chỉ có một:
Chuỗi
[Tên cột]trong file Word mẫu được thay bằng giá trị ô của cột cùng tên trên dòng đang xử lý.
Tên trong ngoặc vuông phải trùng chính xác tiêu đề cột — kể cả dấu tiếng Việt và khoảng trắng. Vì vậy quy trình chuẩn là:
- Trên sheet, chuẩn bị bảng có dòng tiêu đề.
- Chạy Tạo tiêu đề, quét đúng dòng tiêu đề →
Số phiếutrở thành[Số phiếu]. - Chép các chuỗi đó dán thẳng vào file Word mẫu — khỏi gõ tay, khỏi sai chính tả.
WARNING
Lệnh Tạo tiêu đề ghi đè giá trị ô, không hoàn tác được bằng Ctrl+Z, và chạy hai lần sẽ thành [[Số phiếu]]. Lưu bản sao trước khi chạy.
Các tình huống sử dụng
1. Trộn Word hàng loạt
→ Xem Trộn sang Word.
Bạn chỉ định: thư mục chứa mẫu, thư mục lưu kết quả, các mẫu cần dùng (chọn được nhiều mẫu), vùng dữ liệu có dòng tiêu đề, và cột dùng làm tên file đầu ra. Mỗi dòng × mỗi mẫu = một file .docx.
Chọn 3 mẫu và 35 dòng dữ liệu nghĩa là 105 file — số file nhân lên chứ không cộng vào. Kiểm tra trước khi bấm.
2. Chuyển Word sang PDF hàng loạt
→ Xem Word → PDF.
Hộp chọn file chỉ hiện *.doc; *.docx — giữ Ctrl/Shift hoặc bấm Ctrl+A để chọn nhiều file. Add-in mở Word chạy ngầm, mở từng file ở chế độ chỉ đọc, xuất PDF cùng tên, cùng thư mục với file gốc, rồi đóng Word. File lỗi bị bỏ qua, cuối cùng báo dạng "Đã chuyển 18/20 file Word sang PDF."
PDF theo đúng thiết lập trang của chính tài liệu Word (khổ giấy, lề, đầu trang/chân trang) — muốn PDF khác thì sửa trong Word trước.
3. Lấy bảng từ Word về Excel
Add-in không có lệnh đọc bảng trực tiếp từ .docx. Có hai cách làm thay thế, cả hai đều dùng lệnh có sẵn:
Cách A — qua PDF (khuyến nghị):
- Word → PDF file Word cần bóc.
- Trích bảng — AI nhận diện bảng trong PDF, giữ nguyên hàng/cột và cả ô gộp (
rowspan/colspan), có cửa sổ xem trước để sửa từng ô trước khi dán.
Cách B — không cần mạng: Word → Save As → Web Page (.htm) → mở file HTML bằng Excel; Excel tự nhận bảng thành các ô. Nhanh và miễn phí, nhưng định dạng lộn xộn hơn và ô gộp thường bị vỡ.
4. Nội dung có điều kiện trong văn bản
Không có cú pháp [CONDITIONAL: ...] trong mẫu Word. Cách làm thực tế là đưa điều kiện lên Excel: thêm một cột có tiêu đề trùng tên trường trộn, và cho cột đó trả về chuỗi rỗng khi không cần điều khoản.
Ví dụ cột tiêu đề [Điều khoản bảo lãnh]:
=IF(GiaTri > 1000000000; "Điều 8. Bảo lãnh thực hiện hợp đồng: ..."; "")Trong mẫu Word, đặt [Điều khoản bảo lãnh] trên một đoạn riêng. Giá trị lớn hơn 1 tỷ thì đoạn có nội dung; ngược lại đoạn rỗng — vẫn còn một dòng trắng, xóa tay hoặc để nguyên.
Muốn đọc số tiền thành chữ trong văn bản, dùng cột phụ với dvdVnd (hoặc dvdUsd) rồi trộn cột đó:
=dvdVnd(F12; 1)Tham số thứ hai là match_mode: 0 (mặc định) trả về phần chữ trần, 1 thêm tiền tố Bằng chữ: .
Chuẩn bị mẫu Word
Add-in không kèm mẫu Word nào
Thư mục C:\DVDAddin\Template\ chỉ chứa 6 file Excel:
| File | Lệnh mở file |
|---|---|
FormNTCV.xlsx | Mẫu NT công việc — biên bản nghiệm thu công việc |
FormNTVL.xlsx | Mẫu NT vật liệu — nghiệm thu vật liệu |
FormNKCT.xlsx | Mẫu Nhật ký — nhật ký công trình |
SendEmail.xlsx | Mẫu Email |
GanttChart.xlsx | Mẫu tiến độ |
RebarCutOptimizer.xlsx | Mẫu Cắt thép |
Mẫu Word cho lệnh Trộn là do bạn tự chuẩn bị. Đó lại là điểm mạnh: dùng đúng biểu mẫu mà chủ đầu tư / tư vấn giám sát của dự án yêu cầu, không phải sửa mẫu của người khác.
Tự thiết kế mẫu
- Mở Word → tạo văn bản mới, dựng logo, đầu trang, chân trang, kiểu chữ (style).
- Dán các chuỗi
[Tên cột]vào đúng vị trí cần điền. - Lưu
.docxvào một thư mục riêng chỉ chứa mẫu (hộp thoại Trộn liệt kê toàn bộ file trong thư mục đó). - Chạy thử với 2–3 dòng dữ liệu trước khi phát hành cả loạt.
Ba cái bẫy khi đặt trường trộn
- Word cắt vụn chuỗi. Nếu bạn gõ
[Hạng mục]rồi sửa chữ giữa chừng, Word có thể tách nó thành nhiều đoạn định dạng (run) khác nhau; khi đó tìm/thay không khớp được cả chuỗi. Cách chắc ăn: xóa hẳn trường rồi dán lại một lần từ Excel. - Đầu trang, chân trang, hộp văn bản (text box). Trường nằm ngoài phần thân văn bản có thể không được thay. Đặt các trường quan trọng trong thân văn bản; nếu bắt buộc phải để ở đầu trang, hãy kiểm tra kết quả file đầu tiên.
- Định dạng ký tự. Nếu chỉ bôi đậm một phần của
[Hạng mục], kết quả sau khi thay có thể mất định dạng. Bôi đậm cả chuỗi kể cả hai dấu ngoặc.
Dùng chung mẫu trong nhóm
Để thư mục mẫu trên OneDrive / SharePoint / ổ mạng và trỏ hộp thoại Trộn vào đó. Cả nhóm dùng một bộ mẫu, sửa một lần là mọi người có bản mới. Đặt tên file mẫu theo loại hồ sơ (BBNT_CongViec.docx, PhieuYCNT.docx) để danh sách chọn dễ nhìn.
Trộn thư Word gốc so với DVDAddin
| Tiêu chí | Trộn thư (Mail Merge) của Word | Trộn sang Word của DVDAddin |
|---|---|---|
| Nguồn dữ liệu | Excel / CSV / Access / danh bạ | Một vùng Excel có dòng tiêu đề |
| Trường trộn | Merge Field (Ctrl+F9) | Chuỗi văn bản [Tên cột] |
| Kết quả | Một tài liệu dài, hoặc in / gửi email | Nhiều file .docx rời, mỗi dòng một file |
| Đặt tên từng file | Phải viết macro | Chọn một cột làm tên file |
| Nhiều mẫu một lượt | Không | Có — đánh dấu nhiều mẫu, mỗi dòng ra trọn bộ |
| Nội dung có điều kiện | Trường IF, khó viết | Công thức Excel trong cột nguồn |
| Xuất PDF | Có sẵn | Bước riêng bằng Word → PDF |
Kết luận thực tế: cần một bộ file rời đặt tên theo mã hồ sơ thì dùng DVDAddin; cần một tài liệu dài hoặc trộn thư gửi email trực tiếp thì dùng Word gốc vẫn tiện hơn.
Chuyển .doc cũ sang .docx
Add-in không có lệnh riêng cho việc này, nhưng Word → PDF nhận cả .doc — nếu đích cuối là PDF thì không cần chuyển đổi trung gian.
Trường hợp thật sự cần .docx (chẳng hạn để làm mẫu trộn), đoạn script này chạy được ngay:
import win32com.client, glob
word = win32com.client.Dispatch('Word.Application')
word.Visible = False
for path in glob.glob(r'D:\OldDocs\*.doc'):
doc = word.Documents.Open(path)
doc.SaveAs(path + 'x', FileFormat=16) # 16 = wdFormatXMLDocument
doc.Close()
print('Converted:', path)
word.Quit()Xử lý sự cố
#1 — "Microsoft Word không được cài đặt."
ProgID Word.Application chưa được đăng ký — máy chỉ cài Excel, hoặc bộ Office bị hỏng. Cài Word, hoặc chạy sửa chữa (Repair) bộ Office.
#2 — Tiến trình WINWORD.EXE còn treo lại
Nếu lệnh bị ngắt giữa chừng, phiên Word chạy ngầm có thể còn sót lại và chiếm bộ nhớ. Dọn bằng Task Manager, hoặc:
Get-Process WINWORD -ErrorAction SilentlyContinue | Stop-Process -ForceKiểm tra không còn tài liệu Word nào của bạn đang mở trước khi chạy lệnh này — nó đóng tất cả, không hỏi lại.
#3 — "Document is locked for editing"
File mẫu hoặc file đầu ra đang mở trong một cửa sổ Word khác, hoặc còn file ~$tên.docx sót lại. Đóng hết Word rồi chạy lại; nếu vẫn lỗi, xóa các file ~$*.docx trong thư mục mẫu.
#4 — Trường trộn không được thay
Kiểm tra lần lượt:
- Tên trong
[...]có trùng tuyệt đối tiêu đề cột không (dấu, hoa/thường, khoảng trắng thừa)? - Vùng dữ liệu đã chọn có bao gồm dòng tiêu đề chưa?
- Trường có nằm trong đầu trang, chân trang hay hộp văn bản không?
- Có bị Word cắt vụn không — thử xóa và dán lại nguyên chuỗi.
#5 — Font trong PDF bị thay
Word xuất PDF bằng font đang có trên máy. Font của mẫu mà máy thiếu sẽ bị thay bằng font khác và bố cục bị vỡ. Cài đủ font mà mẫu dùng, hoặc nhúng font vào file: Word → File → Options → Save → Embed fonts in the file.
#6 — File đầu ra bị ghi đè mất
Cột chọn làm tên file có hai dòng trùng giá trị thì file sau đè lên file trước, không hỏi lại và không hoàn tác được. Chọn cột có giá trị duy nhất (số phiếu, mã cấu kiện), hoặc thêm cột phụ nối mã với số thứ tự bằng dvdTextJoin.
Liên quan
- Trộn sang Word — chi tiết từng ô trong hộp thoại.
- Tạo tiêu đề — sinh trường
[...]từ dòng tiêu đề. - Word → PDF và Visio → PDF.
- Trích bảng — bóc bảng từ PDF/ảnh về Excel.
- Quy trình: Nghiệm thu hàng loạt — Excel + Word + email trong một chuỗi.
- Kết hợp với Outlook — gửi bộ văn bản vừa trộn kèm theo thư.