鱼C论坛

 找回密码
 立即注册
查看: 2494|回复: 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),将以下代码复制之后,稍加修改就可以用
Sub Test()
'
'宏 从excel复制每行指定的单元格内容到word,每行生成一个word文档
'
Application.ScreenUpdating = False      '关闭屏幕刷新

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

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



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


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

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

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

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

End Sub
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-3 00:59:11 | 显示全部楼层
用第三方库
想知道小甲鱼最近在做啥?请访问 -> 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),将以下代码复制之后,稍加修改就可以用
Sub Test()
'
'宏 从excel复制每行指定的单元格内容到word,每行生成一个word文档
'
Application.ScreenUpdating = False      '关闭屏幕刷新

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

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



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


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

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

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

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

End Sub
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 16:04:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

...

为啥看着有点不太像Python呢……
想知道小甲鱼最近在做啥?请访问 -> 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!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

...

谢谢了,我研究一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

...

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

使用道具 举报

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

使用道具 举报

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

你太给力了,我慢慢学下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 10:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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