找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 37220|回复: 22

[文本处理] 可否有什么方法利用批处理替代word中的字符或数据吗

[复制链接]
发表于 2024-9-30 11:09:30 | 显示全部楼层 |阅读模式
本帖最后由 delab-1 于 2024-9-30 14:49 编辑

各位大佬,有一个初级问题,有没有办法直接利用批处理程序,对word中的数据或者字符串进行修改或者替换的?或者退一步讲,有没有更为便捷的方法,借助小的便捷外部工具或者程序实现上述功能?

具体问题是有一个word文档,名称为export.docx。其内容大致如下:

2024年8月,中国粮食进出口AAAA百万美元,同比上升BBBB%。其中,出口CCCC百万美元,同比下降DDDD%;进口EEEE百万美元,同比上升FFFF%;当月净进口GGGG百万美元。

目前有一个上述变量对应的数值表,需要将对应代码替换成相应数值。利用批处理在文本处理中是很容易的,在word中是否有可行办法?看看大佬们有没有更好的处理方式。
发表于 2024-9-30 11:52:06 | 显示全部楼层
word查找与替换对话框有自带的类似正则的功能,但是与正则和findstr的用法有很大的不同,功能也很强大。要熟练运用需要学习。
发表于 2024-9-30 14:09:05 | 显示全部楼层
回复 2# qixiaobin0715


    听说findstr查找中文上有编码问题
发表于 2024-9-30 14:19:17 | 显示全部楼层
回复 1# delab-1


请给一个真实的例子说明一下你的需求吧,比如操作之前是怎样的,操作之后变成啥样?
上传一个Word文件,请用使用网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
 楼主| 发表于 2024-9-30 18:49:39 | 显示全部楼层
回复 4# Batcher


    已经把问题重新明确了一下,感谢楼主
 楼主| 发表于 2024-9-30 19:03:08 | 显示全部楼层
目前找到一个思路,先把word存成xml文件,然后用批处理进行处理替换,替换后再另存为docx格式,感觉格式未改变,效果还可以接受
发表于 2024-9-30 19:40:24 | 显示全部楼层
vba?都一行然后替换一行
发表于 2024-10-1 14:33:33 | 显示全部楼层
回复 1# delab-1


    如果你只是替换A/B/C/D/E这些固定位置的数值,类似制作多人奖状,邀请函等要变更多人姓名,时间等的操作,可以用word的邮件合并功能。
 楼主| 发表于 2024-10-1 18:18:05 | 显示全部楼层
回复 8# ppll2030 [/b

如果是这样,就不必用批处理,而是单独的其它程序操作呢?目前,这个操作用Jupiter可以很好实现,想探索批处理实现的可能。我目前采用:
1)将Word存为xml文件;
2)然后采用strrpc.exe命令进行替换文本
存在的问题是,替换过程比较慢,耗时较长;同时,不知为何,稳定性较差,不同版本的word,有些会出错,问题还在查找。
发表于 2024-10-2 02:19:13 | 显示全部楼层
例如变量表存在export.txt
AAAA=1
BBBB=2
CCCC=3
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit

  2. $a=new-object -com word.application
  3. $a.visible=1
  4. $b=$a.documents.open("$(dir export.docx)")

  5. type export.txt|%{
  6. $c=$_ -split '='
  7. $a.selection.find.execute($c[0],1,0,0,0,0,1,1,0,$c[1],2)
  8. }

  9. #$a.quit(-1,1,0)
复制代码
先测试一下看结果没问题再删除最后一行前面的注释#号就能自动保存了
 楼主| 发表于 2024-10-2 11:27:25 | 显示全部楼层
回复 10# idwma

运行不能成功,而且所建立的word文档也打不开了。操作过程如下:
1)建立export.docx文档,内容如下:
    2024年8月,中国粮食进出口AAAA百万美元,同比上升BBBB%。其中,出口CCCC百万美元,同比下降DDDD%;进口EEEE百万美元,同比上升FFFF%;当月净进口GGGG百万美元。
2)建立export.txt文档,内容如下:
AAAA=1
BBBB=2
CCCC=3

3)然后将提供的程序代码放在run.bat中,上述文件都在一个文件夹中。

双击运行,但是出现上述问题,运行不能成功,而且export.docx也打不开了
发表于 2024-10-2 12:18:07 | 显示全部楼层
回复 11# delab-1

运行有错误提示吗
测试是可以的
   
 楼主| 发表于 2024-10-2 16:14:19 | 显示全部楼层
本帖最后由 delab-1 于 2024-10-2 16:15 编辑

回复 12# idwma


    运行成功啦,太棒了!能否简要介绍一下上述语言(如果有专门的学习材料就更好了),这样便于理解。例如,下面的语言对我就是全新的,有点类似python的语言用法,但是还是第一次遇到,如果有相关资料,学习一下就太好了

$a=new-object -com word.application
$a.visible=1
$b=$a.documents.open("$(dir export.docx)")

特别是,这些运行后面的参数是什么意思 execute($c[0],1,0,0,0,0,1,1,0,$c[1],2)
 楼主| 发表于 2024-10-2 16:52:04 | 显示全部楼层
回复 10# idwma


    另外,做了一点扩展应用,数字替代效果都不错,有两个问题还请看看如何改建:
1)将替代的变量改为中文后,替代是成功的,但是打开的word文件显示的中文是很奇快的字符,如下:
例如,将下面左边的Name1,Name2,Name3替换成对应中文
Name1:张三
Name2:李四
Name3:王五

替换是成功的,但是打开word后,对应的中文是这样的,不知如何改进处理一下。
寮犱笁
鏉庡洓
鐜嬩簲

2) 按照您说的,把最后一行命令前的注释(#)去掉,但是运行结果显示有错误。
显示如下:
Argument:"1" should be a system.Managment.Automation. PSReference. USe [ref]
at line: 19 char:1
+$a.quit(-1,1,0)
+
       +category info : Notspecified [], MethodException
       +FullyQualifiedEorrorID:NonRefArgumentToRefParameterMsg

Press any key to continue....

因为对这个语言不熟悉,请帮助看看哪里出的问题。

感谢感谢
发表于 2024-10-3 11:28:48 | 显示全部楼层
回复 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 "替换完成!"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:43 , Processed in 0.011247 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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