Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从Powershell运行Word宏(替换文本)?

如何从Powershell运行Word宏(替换文本)?
EN

Stack Overflow用户
提问于 2019-04-26 20:24:19
回答 1查看 844关注 0票数 0

我正在寻找一种通过powershell替换word文档中的文本的方法。使用normal.dot (所有文档)中的宏,并使用powershell脚本传递查找和替换文本。

代码语言:javascript
运行
AI代码解释
复制
Sub Machine()

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = $Text
        .Replacement.Text = $ReplaceText
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Powershell脚本

代码语言:javascript
运行
AI代码解释
复制
$Desktop = [Environment]::GetFolderPath("Desktop")
$Document = "$Desktop\HL2532-00E.docx"

$Text = "2532-00"
$ReplaceText = "2532-35"

$Word = New-Object -ComObject Word.Application
$Document = $Word.Documents.Open("$Document")
$Word.Run("Machine")
$Document.Save()
$Word.Quit()
$a=[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Word)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 21:30:47

您不能在宏中定义任何变量。您必须将其更新为类似以下内容:

代码语言:javascript
运行
AI代码解释
复制
Sub Machine(FindText,ReplaceText)

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = FindText
        .Replacement.Text = ReplaceText
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

然后,当您从PowerShell调用它时,只需在宏名称后添加这些参数:

代码语言:javascript
运行
AI代码解释
复制
$Word.Run("Machine",$Text,$ReplaceText)

或者,您可以跳过该宏,使用Find.Execute()方法(文档中的here)在PowerShell中完成所有这些操作。

代码语言:javascript
运行
AI代码解释
复制
$Document = "$home\Desktop\HL2532-00E.docx"

$Text = "2532-00"
$ReplaceText = "2532-35"

$Word = new-object -ComObject Word.Application
$Document = $Word.Documents.Open($Document)
$Find = $Document.Content.Find
$Find.ClearFormatting()|out-null
$Find.Execute($Text, $false, $false, $false, $false, $false, $true, 1, $false, $ReplaceText, 2)
$Document.Save()
$Word.Quit()
$a=[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Word)

Execute方法的语法如下:

代码语言:javascript
运行
AI代码解释
复制
Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace)

其中大多数是$true/$falseFindTextReplaceWith是字符串。两个奇怪的是WrapReplace,它们是枚举,其中1= wdFindContinue,2= wdReplaceAll。您可以在上面链接的页面上找到这些枚举的链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55874506

复制
相关文章
如何查找一个域名的子域名记录
起因是在Cloudflare和DNSPod添加域名时系统会扫描待添加域名的子域解析记录,感觉很神奇。
kr
2022/07/23
8.4K0
sql查找最晚一天,日期最大的一条记录 两种方法
例:查找最晚入职员工的所有信息 CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`));
用户7741497
2022/03/08
5.2K0
Pandas案例精进 | 无数据记录的日期如何填充?
因业务需要,每周需要统计每天提交资源数量,但提交时间不定,可能会有某一天或者某几天没有提,那么如何将没有数据的日期也填充进去呢?
朱小五
2021/10/18
2.6K0
Pandas案例精进 | 无数据记录的日期如何填充?
mysql查找最后一条记录_mysql查询记录总数
首先要确定什么是最后一条。 是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。 比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。 SQL如下:
全栈程序员站长
2022/10/04
6.9K0
记录修改Typecho日期格式的问题
我们在制作Typecho主题的时候,默认官方提供的日期格式是类似July 8, 2020,这样子的,我们可能需要其他的格式,比如2020-08-08。所以我们只需要找到对应模板中的日期格式就可以。这里简单记录一下,如果以后有需要的话可以使用到。
老蒋
2021/12/24
2K0
nginx根据日期记录日志
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
93年的老男孩
2019/12/18
1.6K0
记录查找分享观影记录软件TrackTV
你是否有过这样的烦恼,不久前刚看过一个有趣的电影,但是一下子就想不起来,需要花费好长时间的搜索和思考才能记起来。
程序那些事儿
2023/03/07
8020
记录查找分享观影记录软件TrackTV
MongoDB-查找表里面重复的记录
项目中使用的是mongodb数据库,在测试数据入库的时候,会根据源数据,然后生成一个自增的id到数据库里面,然后线上和测试环境针对同一条数据的id是不一致的。某些数据又只有id与线上匹配上的时候,才能关联上更多的数据,因此,我会去写一个脚本将同一条数据,将测试环境的id改成和线上的一致。但可能由于脚本写的还不够完善,导致数据库里面可能会写入一些重复id的记录进去,然后id又没有加唯一索引。有重复的数据又会导致正常执行etl任务会报错,因此,需要查询出在mongodb里面某个字段重复的记录。
小博测试成长之路
2023/02/24
2.3K0
MongoDB-查找表里面重复的记录
查找一 线性表的查找
静默虚空
2018/01/05
1K0
查找一 线性表的查找
一日一技:如何提取网页中的日期?
最近我发现Python的一个第三方库,叫做htmldate,经过测试,它提取新闻的发布时间比较准确。我们来看看这个库怎么使用。首先使用pip安装:
青南
2022/04/07
1.6K0
一日一技:如何提取网页中的日期?
在MySQL中查找重复记录
I want to pull out duplicate records in a MySQL Database. 我想在MySQL数据库中提取重复记录。 This can be done with: 这可以通过以下方式完成:
kirin
2021/04/30
3.9K0
mysql 记录根据日期字段倒序输出
select * from water where phoneNumber=@phoneNumber order by cast(date as datetime) desc
kirin
2021/01/29
3.1K0
Nginx access log 按日期保存记录
$time_iso8601    生成格式:2021-09-18T15:16:35+08:00 $time_local          生成格式: 18/Sep/2021:15:12:13 +0800
用户1349575
2022/03/18
4.3K0
golang如何计算两个日期之间的日期差?
golang如何计算两个日期之间的日期差? 日期格式:“2017-09-01” ,“2018-03-11”
双面人
2022/09/28
7.5K0
如何用Python获取两个日期之间的日期?
问:如何用Python获取两个日期之间的日期? def date_range(start, end): delta = end - start # as timedelta days = [start + timedelta(days=i) for i in range(delta.days + 1)] return days start_date = datetime(2020, 12, 1) end_date = datetime(2020, 12, 5) print(d
TalkPython
2020/12/11
5.9K0
如何在Selenium WebDriver中查找元素?(一)
有多种方法可以唯一地标识网页中的一个Web元素,例如ID,名称,类名,链接文本,部分链接文本,标记名和XPATH。
用户7466307
2020/06/24
6.2K0
idea如何查找替换_pycharm查找替换
在平时敲代码的时候经常碰到,咦,这个变量名好像不太合适,但又写了好多这时候可以怎么办呢? Pycharm/Idea里面给我们准备了替换功能
全栈程序员站长
2022/09/27
2.7K0
idea如何查找替换_pycharm查找替换
EXCEL中日期对应的数值如何转换为ABAP中的日期
默认情况下,Excel把1900-1-1 0:00:00存储为1,把1900-1-1 0:00:00以后的每一个时刻存储为该时刻与1900-1-1 0:00:00这个时刻的差值(以天为单位)。
matinal
2023/10/13
2930
OJ刷题记录:散列查找实验
题目描述: 请设计一个整型闭散列表,散列函数为除留余数法,处理冲突时的探查方法为线性探查法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,如果找到了输出位置,如果没找到,输出“none”并把该待查值插入到散列表中,如果散列表满输出“full”。
英雄爱吃土豆片
2020/11/12
5820
点击加载更多

相似问题

SERVER基于一年内最早日期的获取记录

11

Excel如何返回一年内的日期

10

如何从两年内获得记录

13

从当前日期起的最后一年内修改记录。

21

如何根据记录的日期时间查找记录

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档