之前有两篇文章讲过Excel和Word数据交互的基础知识Excel和Word数据交互读取(一)和Excel和Word数据交互读取(二),这里说个实际代工遇到的案例。
一、实际案例引入
这次遇到的案例需求:Excel数据批量写入Word,生成合同文书。数据的对应关系如下图截图中所示。
![76822554630814014f19f3e20ae84065.png](https://i-blog.csdnimg.cn/blog_migrate/ff7b945b2eacd592a9a8dcad4a4ee263.jpeg)
数据对应关系
二、思路及代码
思路很重要,代码可以不看,循环思路一定要看!
■思路:Word合同作为打开的模板文件,循环Excel数据写入Word,然后另存为新的Word文件。难点在于,每一个客户不一定只有一个产品订单。下面是代码循环的结构流程图。
![cdd43fa8e570cdea6e5540eb2294456f.png](https://i-blog.csdnimg.cn/blog_migrate/0c8a42f2d76777d0d011d6cf8b4df30a.jpeg)
具体代码如下:
Sub 写入Word数据() Application.ScreenUpdating = False Set doc = CreateObject("word.application") doc.Visible = True id_row = ActiveSheet.Cells(Rows.Count, 4).End(3).Row kehu_row = ActiveSheet.Cells(Rows.Count, 3).End(3).Row For i = 2 To kehu_row If Cells(i, 3) <> "" And Cells(i + 1, 3) = "" Then r = Cells(i, 3).End(xlDown).Row - 1 If r = Rows.Count - 1 And r <> Cells(i, 4).End(xlDown).Row - 1 Then r = Cells(i, 4).End(xlDown).Row ElseIf r = Rows.Count - 1 And r = Cells(i, 4).End(xlDown).Row - 1 Then r = i End If Set wd = doc.Documents.Open(ThisWorkbook.Path & "合同模板.docx") With doc.Documents(1).Tables(1) .Rows(2).Select If r <> i Then doc.Selection.insertrowsbelow r - i For rr = 2 To r - i + 2 .cell(rr, 1).Range = IIf(Cells(i + rr - 2, 5).Value =