Integration: Word
DVDAddin nói chuyện với Microsoft Word qua COM: sinh hàng loạt văn bản từ bảng Excel, và chuyển hàng loạt Word sang PDF. Trang này nói rõ cơ chế trộn thư thật của add-in, những gì nó không làm, và cách vòng qua các giới hạn đó.
Ba lệnh liên quan Word
| Lệnh | Vị trí ribbon | Việc nó 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 placeholder: [TênCột]
Đây là điểm hay bị nhầm nhất. DVDAddin không dùng {{...}}, không dùng 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]. - Copy 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.
Use cases
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 nhiều được), vùng dữ liệu có header, 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 lọc *.doc; *.docx — chọn Ctrl/Shift/Ctrl+A. Add-in mở Word ẩn, 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 bám theo thiết lập trang của chính tài liệu Word (khổ giấy, lề, header/footer) — 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. Hai đường vòng, cả hai đều bằng lệnh thật:
Đường 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.
Đường B — không cần mạng: Word → Save As → Web Page (.htm) → mở file HTML bằng Excel; Excel nhận diện bảng thành ô. Nhanh và miễn phí, nhưng định dạng lộn xộn hơn và ô gộp thường vỡ.
4. Nội dung đ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ật là đẩy điều kiện lên Excel: thêm một cột, đặt tên đúng bằng tên placeholder, và cho nó ra 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 chấp nhậ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ở nó |
|---|---|
FormNTCV.xlsx | Mẫu NT CV — biên bản nghiệm thu công việc |
FormNTVL.xlsx | Mẫu NT VL — 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, header, footer, 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 placeholder
- 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 "run" khác nhau; tìm/thay khi đó không khớp được cả chuỗi. Cách chắc ăn: xóa hẳn placeholder rồi dán lại một lần từ Excel. - Header, footer, text box. Placeholder 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 để ở header, 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í | 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ó header |
| 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 mail | 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ó — tick nhiều mẫu, mỗi dòng ra trọn bộ |
| Nội dung đ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 dụng: 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 gửi mail merge trực tiếp thì 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 (để làm mẫu trộn chẳng hạ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()Troubleshooting
#1 — "Microsoft Word không được cài đặt."
ProgID Word.Application chưa đăng ký — máy chỉ cài Excel, hoặc bản Office bị hỏng. Cài Word, hoặc chạy Repair cho 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 ẩn có thể sống sót 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 — Placeholder không được thay
Theo thứ tự kiểm tra:
- 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?
- Placeholder có nằm trong header/footer/text box 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 thế và bố cục vỡ. Cài đủ font mà mẫu dùng, hoặc nhúng font: 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.
- Workflow: Nghiệm thu hàng loạt — Excel + Word + Email trong một chuỗi.
- Integration: Outlook — gửi bộ văn bản vừa trộn đi kèm thư.