Trộn dữ liệu từ Excel sang Word mở rộng (phiên bản ongke0711)

Liên hệ QC

ongke0711

Thành viên gắn bó
Tham gia
7/9/06
Bài viết
1,965
Được thích
2,554
Giới tính
Nam
(Xin phép được tách bài từ bài post của bác Maika8008 (Link) để tránh lẫn lộn khi trao đổi và do cũng tài lanh xen vào, gây loãng bài của bác ấy).


Trộn dữ liệu từ Excel sang Word
-------------------------------------------------------------------------------------------

Lấy cảm hứng từ ý tưởng và file của bác Maika8008, tôi cũng thiết kế một phiên bản khác cho việc Trộn dữ liệu từ Excel sang Word.
Phiên bản này tổng hợp các nhu cầu thực tế của người dùng đã trao đổi trong chủ để này, có thể chưa đầy đủ nhưng cũng đáp ứng cơ bản cho công việc.

* Các chức năng:
- Tùy chọn trộn dữ liệu: Một (hoặc nhiều) đối tượng cho một (hoặc nhiều) văn bản.
- Tự động tạo tiêu đề cột riêng, không ảnh hưởng đến thiết kế bảng.
- Không cần cố định vị trí (dòng, cột ) của dữ liệu cần trộn vì dùng tham chiếu qua Table name.
- Chỉ lấy những dòng dữ liệu sau khi dùng Filter trong bảng dữ liệu.
- Khắc phục lỗi khi trộn đoạn văn bản nhiều hơn 255 ký tự.
- Trộn có kèm luôn file hình ảnh (.jpg, .png, .bmp).
- Trộn các Symbols (font Wingdings, Marlett, Webdings)
- Xuất file dạng .Docx, .PDF


>> Cập nhật ngày 11/10/2023:
- Trộn bảng biểu Excel vào Word Table, giữ nguyên định dạng thiết kế trong Excel.

Thiết kế cũng chưa bẫy lỗi gì nhiều, chắc chắn sẽ phát sinh lỗi khi thao tác, các bạn chạy kiểm tra thử nhé.
Tôi cũng đã thử dùng kết hợp tính năng Mail Merger có sẵn trong Word + VBA cho các tùy chọn nhưng tốc độ thực thi cũng không bằng một góc so với việc dùng thẳng Mail Merge (*) trong Word vì dù gì thì nó cũng đã qua code VBA để gọi tính năng Merge.

(*) Dùng Mail Merge trong Word rất nhanh nhưng nó chỉ đáp ứng tùy chọn cơ bản, đó là lý do có nhiều công cụ viết mở rộng thêm cho tính năng này.

Mã:
wdocSource.MailMerge.OpenDataSource...






3qgQKVn.png






Hướng dẫn sử dụng trong video.


* Đã cập nhật bẫy lỗi và chuyển sang kết nối muộn (Late binding) với Word để tránh lỗi giữa các phiên bản Office.

Link file (full code): https://www.mediafire.com/file/8fc086iogo32cie/MergeDataExcel2Word.zip/file
 
Lần chỉnh sửa cuối:
Mình gửi bạn nhé, bạn xem giúp mình
 

File đính kèm

  • Mẫu Văn bản.docx
    19.2 KB · Đọc: 15
  • MergeDataExcel2Word.xlsb
    67.2 KB · Đọc: 9
Upvote 0
Upvote 0
Bạn cứ đưa vài mẫu word số lượng khác nhau phù hợp với số liệu trong file excel lên mình xem thế nào nhé.
Mình gửi lên mẫu này phức tạp hơn , file word có 2 table chính có cấu trúc khác nhau , ngoài ra còn bị lẫn lộn thêm các table khác nữa
Bài đã được tự động gộp:

Bạn cứ đưa vài mẫu word số lượng khác nhau phù hợp với số liệu trong file excel lên mình xem thế nào nhé.
Mình gửi lên mẫu này phức tạp hơn , file word có 2 table chính có cấu trúc khác nhau , ngoài ra còn bị lẫn lộn thêm các table khác nữa
Nếu số lượng dòng trong hóa đơn không vượt quá một con số nào đó (cố định) thì dùng luôn chức năng Mail merger, khỏi phải code. :D
Cái mail merge xử lý được table nay mình mới biết , mong được mở mang kiến thức . Một tờ hóa đơn mình làm hiếm khi vượt quá 30 dòng
 

File đính kèm

  • MauHopDong.docx
    43.8 KB · Đọc: 11
Upvote 0
Mình gửi lên mẫu này phức tạp hơn , file word có 2 table chính có cấu trúc khác nhau , ngoài ra còn bị lẫn lộn thêm các table khác nữa
Bài đã được tự động gộp:


Mình gửi lên mẫu này phức tạp hơn , file word có 2 table chính có cấu trúc khác nhau , ngoài ra còn bị lẫn lộn thêm các table khác nữa

Cái mail merge xử lý được table nay mình mới biết , mong được mở mang kiến thức . Một tờ hóa đơn mình làm hiếm khi vượt quá 30 dòng
Có vài vấn đề như sau bạn ạ:
1/ Mình bảo bạn gửi file word phù hợp với nội dung dữ liệu trong file excel thì chưa thấy (file excel cũ không đủ nội dung với file word này).
2/ Bạn cho mình xem file excel nguyên bản được không. (file excel bạn gửi đây là file của anh OngKe0711)
3/ Bạn có tất cả mấy mẫu file Word
4/ File word nào phải đi kèm với dữ liệu đồng bộ với file excel đó nhé.
Bạn thử đọc bài này thì sẽ thấy có trường hợp còn phức tạp hơn của bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình đã đưa data đồng bộ với file mẫu lên rồi còn lấy các mẫu làm gì không biết. Chắc bạn không hiểu ý mình
Mình ko cần bạn code toàn bộ làm gì cho mình, giúp mình 1 sub để đưa table vào là được rồi. Cụ thể như sau
Quét qua data, lấy cột số nghiệm thu làm key chính,( mỗi key chính có số dòng chi tiết có thể khác nhau ), mỗi key chính xuất ra 1 file word. trong file word có các table đã định vị sẵn các cột rồi chỉ đưa dữ liệu tương ứng với key là xong
Ví dụ như dữ liệu kiểu này dùng file của chủ topic mình phải tạo 100 rất nhiều table rồi đặt nhiều tên , hoặc tạo sub phụ để thay đổi dữ liệu bảng tương ứng nhưng như vậy khi cần áp dụng mẫu văn bản khác lại mất công viết lại sub phụ. Với dữ liệu kiểu này để sẵn table trong word rồi định vị cột cho nó vẫn là dễ dùng hơn, có đoạn code này mình tự cải biên lại file của chủ Topic để phù hợp hơn với công việc của mình
 
Upvote 0
Mình đã đưa data đồng bộ với file mẫu lên rồi còn lấy các mẫu làm gì không biết. ...
Em có một góp ý nhỏ: Chắc do đêm muộn, do áp lực, do nhiều lý do khác... khiến bác bực bội. Nhưng với tâm thế của một người đi nhờ, em nghĩ bác nên kiềm chế cảm xúc lại!
 
Upvote 0
Em có một góp ý nhỏ: Chắc do đêm muộn, do áp lực, do nhiều lý do khác... khiến bác bực bội. Nhưng với tâm thế của một người đi nhờ, em nghĩ bác nên kiềm chế cảm xúc lại!
Xin lỗi bạn chút nhé ! Có 2 cái dữ liệu và file mẫu mình đã cung cấp cả, bạn hỏi mẫu khác mình cũng đưa luôn. và bạn nói excel file word không phù hợp nội dung với nhau trong khi mình mất công index từng vị trí.
Và mình cũng khẳng định luôn để sẵn cái table trong word định vị sẵn vị trí sẽ khó hơn tạo cái bảng trong excel rồi copy qua nhiều vì nó còn phải xác định vị trí cái bảng đó rồi mới insert dòng đưa dữ liệu tương ứng vào từng cột.
Một đằng là paste qua một đằng có sẵn bảng rồi đưa dữ liệu vào nó rất khác nhau
Có lẽ bạn hiểu sai, mình không đi nhờ làm thay cho mình , mình muốn học hỏi kiến thức, để làm bảng trong excel rồi paste qua mình cũng tự làm được nhưng trên phương diện người dùng cuối là ko tối ưu
1706320856946.png
 
Upvote 0
Mình đã đưa data đồng bộ với file mẫu lên rồi còn lấy các mẫu làm gì không biết. ...
Em có một góp ý nhỏ: Chắc do đêm muộn, do áp lực, do nhiều lý do khác... khiến bác bực bội. Nhưng với tâm thế của một người đi nhờ, em nghĩ bác nên kiềm chế cảm xúc lại!
Xin lỗi bạn chút nhé ! Có 2 cái dữ liệu và file mẫu mình đã cung cấp cả, bạn hỏi mẫu khác mình cũng đưa luôn. và bạn nói excel file word không phù hợp nội dung với nhau trong khi mình mất công index từng vị trí.
Và mình cũng khẳng định luôn để sẵn cái table trong word định vị sẵn vị trí sẽ khó hơn tạo cái bảng trong excel rồi copy qua nhiều vì nó còn phải xác định vị trí cái bảng đó rồi mới insert dòng đưa dữ liệu tương ứng vào từng cột.
Một đằng là paste qua một đằng có sẵn bảng rồi đưa dữ liệu vào nó rất khác nhau
Có lẽ bạn hiểu sai, mình không đi nhờ làm thay cho mình , mình muốn học hỏi kiến thức, để làm bảng trong excel rồi paste qua mình cũng tự làm được nhưng trên phương diện người dùng cuối là ko tối ưu
View attachment 298795
Dạ bác, em xin lỗi ạ!
 
Upvote 0

Tuyệt quá, mình bí ngay khúc đầu là xác định cái bảng chứa nội dung cần insert là cái bảng nào . Bạn thử vẫn dữ liệu đó nhưng với cái file word #190 xem kết quả thế nào
Sao mà khi thực hiện nó cứ chớp chớp như bị điện giật vậy gọi là tuyệt sao bác.

Tôi đang thử viết phiên bản "1 chớp" với vài giây là gộp hàng trăm tệp. Tôi sẽ sớm chia sẻ bác nhé
 
Upvote 0
mình bí ngay khúc đầu là xác định cái bảng chứa nội dung cần insert là cái bảng nào.
Muốn xác định bảng nào trong Word thì tôi biết có 2 cách: dùng Bookmark (như bạn đang thiết lập) hoặc Title.

Screen Shot 2024-01-27 at 19.58.40.png

Mã:
Function getTable_title(sTitle As String) As Table
    Dim tbl As Table
    For Each tbl In ActiveDocument.Tables
        If tbl.Title = sTitle Then
            Set getTable_title = tbl
            Exit Function
        End If
    Next
End Function

Function getTable_bookmark(sTableName As String) As Table
    On Error Resume Next
    Set getTable_bookmark = ThisDocument.Bookmarks(sTableName).Range.Tables(1)
End Function
 
Upvote 0
Web KT
Back
Top Bottom