鱼C论坛

 找回密码
 立即注册
查看: 3028|回复: 10

[已解决]如何实现将excel里的数据写入word模板当中

[复制链接]
发表于 2022-8-2 22:42:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如excel里面有名字、身份证号、地址、电话
对应的word模板里面也有这4项
如果实现读取excel这4个信息,并且写入word里面呢
最佳答案
2022-8-3 11:21:02
你如果用excel表的vba编译器的话,请先将word的组件引用"工具--引用--Microsoft Word XX library.." 确定

如果你是用word的vba编译器的话,先将excel的组件引用"工具--引用--Microsoft Excel XX library.." 确定

然后右键左边的vba project 插入 模块(module),将以下代码复制之后,稍加修改就可以用

  1. Sub Test()
  2. '
  3. '宏 从excel复制每行指定的单元格内容到word,每行生成一个word文档
  4. '
  5. Application.ScreenUpdating = False      '关闭屏幕刷新

  6. '定义excel的部分
  7. Dim aApp     As Application
  8. Dim aBook     As Workbook
  9. Dim aSheet     As Worksheet
  10. Set aApp = CreateObject("excel.application")
  11. 'aApp.Visible = True
  12. Set aBook = aApp.Workbooks().Open(Filename:="C:\Documents and Settings\Jully\桌面\export.xls")
  13. Set aSheet = aBook.Worksheets.Item(1)

  14. '定义word部分
  15. Dim aWrd As Word.Application
  16. Set aWrd = CreateObject("word.application")
  17. 'aWrd.Visible = True



  18. Dim aRow As String   '记录excel的有效行数
  19. Dim i As Integer
  20. Dim temp As String   '取excel的指定单元格数据


  21. aRow = aSheet.Range("A1").CurrentRegion.Cells.Rows.Count

  22. For i = 1 To aRow
  23.     temp = aSheet.Cells(Trim(i), 2) & aSheet.Cells(Trim(i), 5) & aSheet.Cells(Trim(i), 5)   '取单元格每一行的第2.3.5列的内容
  24.     aWrd.Documents.Add                                                                      '添加新文档
  25.     aWrd.Documents(1).Activate                                                              '获取焦点
  26.     aWrd.Selection.TypeText Text:=temp                                                      '输出
  27.     aWrd.Documents(1).SaveAs Filename:="C:" & Trim(i) & ".doc"                             '保存
  28.     aWrd.Documents(1).Close                                                                 '关闭
  29. Next i

  30. aApp.Quit                                           '退出excel
  31. aWrd.Quit                                           '退出word

  32. Application.ScreenUpdating = True                   '恢复屏幕刷新

  33. End Sub
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-3 00:59:11 | 显示全部楼层
用第三方库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 11:21:02 | 显示全部楼层    本楼为最佳答案   
你如果用excel表的vba编译器的话,请先将word的组件引用"工具--引用--Microsoft Word XX library.." 确定

如果你是用word的vba编译器的话,先将excel的组件引用"工具--引用--Microsoft Excel XX library.." 确定

然后右键左边的vba project 插入 模块(module),将以下代码复制之后,稍加修改就可以用

  1. Sub Test()
  2. '
  3. '宏 从excel复制每行指定的单元格内容到word,每行生成一个word文档
  4. '
  5. Application.ScreenUpdating = False      '关闭屏幕刷新

  6. '定义excel的部分
  7. Dim aApp     As Application
  8. Dim aBook     As Workbook
  9. Dim aSheet     As Worksheet
  10. Set aApp = CreateObject("excel.application")
  11. 'aApp.Visible = True
  12. Set aBook = aApp.Workbooks().Open(Filename:="C:\Documents and Settings\Jully\桌面\export.xls")
  13. Set aSheet = aBook.Worksheets.Item(1)

  14. '定义word部分
  15. Dim aWrd As Word.Application
  16. Set aWrd = CreateObject("word.application")
  17. 'aWrd.Visible = True



  18. Dim aRow As String   '记录excel的有效行数
  19. Dim i As Integer
  20. Dim temp As String   '取excel的指定单元格数据


  21. aRow = aSheet.Range("A1").CurrentRegion.Cells.Rows.Count

  22. For i = 1 To aRow
  23.     temp = aSheet.Cells(Trim(i), 2) & aSheet.Cells(Trim(i), 5) & aSheet.Cells(Trim(i), 5)   '取单元格每一行的第2.3.5列的内容
  24.     aWrd.Documents.Add                                                                      '添加新文档
  25.     aWrd.Documents(1).Activate                                                              '获取焦点
  26.     aWrd.Selection.TypeText Text:=temp                                                      '输出
  27.     aWrd.Documents(1).SaveAs Filename:="C:" & Trim(i) & ".doc"                             '保存
  28.     aWrd.Documents(1).Close                                                                 '关闭
  29. Next i

  30. aApp.Quit                                           '退出excel
  31. aWrd.Quit                                           '退出word

  32. Application.ScreenUpdating = True                   '恢复屏幕刷新

  33. End Sub
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 16:04:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 16:05:15 | 显示全部楼层
漫星闪 发表于 2022-8-3 11:21
你如果用excel表的vba编译器的话,请先将word的组件引用"工具--引用--Microsoft Word XX library.." 确定

...

为啥看着有点不太像Python呢……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 22:56:47 | 显示全部楼层
tommyyu 发表于 2022-8-3 16:04
https://fishc.com.cn/forum.php?mod=forumdisplay&fid=319&filter=typeid&typeid=722

这是读写excel,但是没有读写word!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 23:20:42 | 显示全部楼层
漫星闪 发表于 2022-8-3 11:21
你如果用excel表的vba编译器的话,请先将word的组件引用"工具--引用--Microsoft Word XX library.." 确定

...

谢谢了,我研究一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-3 23:57:22 | 显示全部楼层
漫星闪 发表于 2022-8-3 11:21
你如果用excel表的vba编译器的话,请先将word的组件引用"工具--引用--Microsoft Word XX library.." 确定

...

你好,我想问一下,我是新手,希望你别见怪哈,因为你得代码我还没细细研究。
如果我要实现将excel里的数据写入一个word得合同模板中,比如这个合同模板里面又名字,地址,电话这3条要素需要EXCEL中对应得导入,这个应该改哪里呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-4 02:02:14 | 显示全部楼层
给你提供一个用python实现的思路:
1、pip安装python-docx和python-xlsx模块
2、import docx ,import xlsx
3、手动建立一个word,把合同模板调整好,需要填数据的空位用表格,隐藏边框留好
4、读取excel的数据,查询word中的表格,一一对应写入
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-4 06:44:57 | 显示全部楼层
用VBA的话,就先将要写入的地方一一标记,在用Excel把要导入的数据命名,比入我要写入通知书,把标记命名为001,002这样子的,就是这样,记的替换一些名字
  1. Sub 生成Word文件_Click()
  2. 2    Dim Word对象 As New Word.Application, 当前路径, 导出文件名, 导出路径文件名, i, j
  3. 3    Dim Word表格行号, Word表格列号, Excel数据表列号
  4. 4    Dim Str1, Str2
  5. 5    当前路径 = ThisWorkbook.Path
  6. 6     B = InputBox("请输入数据开始行", "提示")
  7. 7   c = InputBox("请输入数据结束行", "提示")
  8. 8   
  9. 9    判断 = 0
  10. 10    For i = B To c
  11. 11       导出文件名 = "通知书"
  12. 12       FileCopy 当前路径 & "\通知书.doc", 当前路径 & "" & 导出文件名 & "(" & Sheets("统计表").Range("c" & i) & ").doc" '可以将Sheets("1").Range("B" & i)换成其他数据
  13. 13       导出路径文件名 = 当前路径 & "" & 导出文件名 & "(" & Sheets("统计表").Range("c" & i) & ").doc" '可以将Sheets("1").Range("B" & i)换成其他数据
  14. 14       With Word对象
  15. 15         .Documents.Open 导出路径文件名
  16. 16         .Visible = False
  17. 17          With .Selection.Find
  18. 18             For x = 7 To 1 Step -1 '从大到小,防止字符串序号低位与高位串扰,填写数据即excel表总列数
  19. 19                Str1 = "数据" & Format(x, "000")
  20. 20                'MsgBox "str1" & Str1
  21. 21                Str2 = Sheets("统计表").Cells(i, x)
  22. 22                .Text = Str1 '查找到指定字符串
  23. 23                .Replacement.Text = Str2 '替换字符串
  24. 24               .Execute Replace:=wdReplaceAll '全部替换
  25. 25             Next x
  26. 26           End With
  27. 27              
  28. 28           
  29. 29         
  30. 30         .Selection.WholeStory '全部选中
  31. 31         .Selection.Font.Color = wdColorAutomatic '字符为自动颜色
  32. 32       End With
  33. 33       Word对象.Documents.Save
  34. 34       Word对象.Quit
  35. 35       Set Word对象 = Nothing
  36. 36 '      If i = c Then
  37. 37 '       MsgBox "已输出到 Word 文件!", 0 + 48 + 256 + 0, "提示:"
  38. 38 '      End If
  39. 39      
  40. 40    Next i
  41. 41    If 判断 = 0 Then
  42. 42       i = MsgBox("已输出到 Word 文件!", 0 + 48 + 256 + 0, "提示:")
  43. 43    End If
  44. 44   
  45. 45 End Sub
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-5 21:20:16 | 显示全部楼层
漫星闪 发表于 2022-8-4 06:44
用VBA的话,就先将要写入的地方一一标记,在用Excel把要导入的数据命名,比入我要写入通知书,把标记命名为 ...

你太给力了,我慢慢学下!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 16:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表