Skip to content

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ệnhVị trí ribbonViệc nó làm
Tạo tiêu đềDVD Addin › File và In › Menu TrộnBọc dòng tiêu đề bảng thành [Tên cột] — chuẩn bị cho trộn thư
Trộn sang WordDVD Addin › File và InMỗi dòng dữ liệu → một file Word từ (các) mẫu đã chọn
Word → PDFDVD Addin › File và In › Menu PDF / OCRChọ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à:

  1. Trên sheet, chuẩn bị bảng có dòng tiêu đề.
  2. Chạy Tạo tiêu đề, quét đúng dòng tiêu đề → Số phiếu trở thành [Số phiếu].
  3. 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ị):

  1. Word → PDF file Word cần bóc.
  2. 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 AsWeb 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:

FileLệnh mở nó
FormNTCV.xlsxMẫu NT CV — biên bản nghiệm thu công việc
FormNTVL.xlsxMẫu NT VL — nghiệm thu vật liệu
FormNKCT.xlsxMẫu Nhật ký — nhật ký công trình
SendEmail.xlsxMẫu Email
GanttChart.xlsxMẫu tiến độ
RebarCutOptimizer.xlsxMẫ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

  1. Mở Word → tạo văn bản mới, dựng logo, header, footer, style.
  2. Dán các chuỗi [Tên cột] vào đúng vị trí cần điền.
  3. Lưu .docx và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 đó).
  4. 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 WordTrộn sang Word của DVDAddin
Nguồn dữ liệuExcel / CSV / Access / danh bạMột vùng Excel có header
Trường trộnMerge 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 mailNhiều file .docx rời, mỗi dòng một file
Đặt tên từng filePhải viết macroChọn một cột làm tên file
Nhiều mẫu một lượtKhôngCó — tick nhiều mẫu, mỗi dòng ra trọn bộ
Nội dung điều kiệnTrường IF, khó viếtCông thức Excel trong cột nguồn
Xuất PDFCó sẵnBướ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:

python
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:

powershell
Get-Process WINWORD -ErrorAction SilentlyContinue | Stop-Process -Force

Kiể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:

  1. Tên trong [...]trùng tuyệt đối tiêu đề cột không (dấu, hoa/thường, khoảng trắng thừa)?
  2. Vùng dữ liệu đã chọn có bao gồm dòng tiêu đề chưa?
  3. Placeholder có nằm trong header/footer/text box không?
  4. 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

Released under DVDAddin License.