Đến nội dung

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ệnhVị trí trên ribbonViệc lệnh 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 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à:

  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. 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ị):

  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.

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:

FileLệnh mở file
FormNTCV.xlsxMẫu NT công việc — biên bản nghiệm thu công việc
FormNTVL.xlsxMẫu NT vật liệu — 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, đầu trang, chân trang, kiểu chữ (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 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 WordTrộn sang Word của DVDAddin
Nguồn dữ liệuExcel / CSV / Access / danh bạMột vùng Excel có dòng tiêu đề
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 emailNhiề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ó — đánh dấu nhiều mẫu, mỗi dòng ra trọn bộ
Nội dung có đ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 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:

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()

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:

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 — Trường trộn không được thay ​

Kiểm tra lần lượt:

  1. 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)?
  2. Vùng dữ liệu đã chọn có bao gồm dòng tiêu đề chưa?
  3. Trường có nằm trong đầu trang, chân trang hay hộp văn bản 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 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 ​

Phát hành theo giấy phép DVDAddin.