返回列表 发帖
回复 1# delab-1


    如果你只是替换A/B/C/D/E这些固定位置的数值,类似制作多人奖状,邀请函等要变更多人姓名,时间等的操作,可以用word的邮件合并功能。

TOP

回复 9# delab-1


    哈。看来是我理解错误了。再来用VBS脚本来试试吧。
1、把你要替换的文本保存为export.txt,要用编码ANSI,否则遇到中文会乱码。
格式如下:
AAAA=1111
BBBB=2222
CCCC=3333
2、把下面代码保存为VBS文件,也是用ANSI编码。
3、以上两个文件跟你的word文件放一块,最后执行vbs文件即可。
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set path = fso.GetFolder(".")
  3. Set file = fso.OpenTextFile(path & "\export.txt", 1)
  4. Set wordApp = CreateObject("Word.Application")
  5. Set doc = wordApp.Documents.Open(path & "\export.docx")
  6. Do Until file.AtEndOfStream
  7.     line = file.ReadLine()
  8.     If InStr(line, "=") > 0 Then
  9.         oldstr = Split(line, "=")(0)
  10.         newstr = Split(line, "=")(1)
  11.         With doc.Content.Find
  12.         .Text = oldStr
  13.         .Replacement.Text = newStr
  14.         .Execute ,,,,,,,,,,2
  15.         End With
  16.     End If
  17. Loop
  18. file.Close
  19. doc.Save
  20. doc.Close
  21. wordApp.Quit
  22. Set fso = Nothing
  23. MsgBox "替换完成!"
复制代码

TOP

回复 18# delab-1


    为什么txt非要用utf-8呢。默认不是ANSI编码的吗
下面是按你要求修改的。
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set path = fso.GetFolder(".")
  3. Set objStream = CreateObject("ADODB.Stream")
  4. objStream.Charset = "utf-8"
  5. objStream.Open
  6. objStream.LoadFromFile(path & "\export.txt")
  7. content = objStream.ReadText
  8. Set wordApp = CreateObject("Word.Application")
  9. Set doc = wordApp.Documents.Open(path & "\export.docx")
  10. line = Split(content, vbCrLf)
  11. For i = 0 To UBound(Line)
  12.     If InStr(line(i), "=") > 0 Then
  13.         oldstr = Split(line(i), "=")(0)
  14.         newstr = Split(line(i), "=")(1)
  15.         With doc.Content.Find
  16.         .Text = oldStr
  17.         .Replacement.Text = newStr
  18.         .Execute ,,,,,,,,,,2
  19.         End With
  20.     End If
  21. next
  22. doc.Save
  23. doc.Close
  24. objStream.Close
  25. wordApp.Quit
  26. Set fso = Nothing
  27. MsgBox "替换完成"
复制代码

TOP

回复 21# delab-1


    就用你的"笨方法",让脚本帮你从文本末尾行开始向上读取好啦。
把代码第 14 行,改为:
  1. For i = UBound(line) to 0 step -1
复制代码

TOP

返回列表