我需要遍历所有 Word 实例,无论是由用户、自动化、zumbis 等打开的。
我将描述到目前为止的所有步骤:我看到并实施了我在这里得到的解决方案;
Do
For Each objWordDocument In objWordApplication.Documents
OpenDocs(iContadorDocs - 1) = objWordDocument.Name
OpenDocs(iContadorDocs) = objWordDocument.path
iContadorDocs = iContadorDocs + 2
ReDim Preserve OpenDocs(iContadorDocs)
Next objWordDocument
iWordInstances = iWordInstances + 1
objWordApplication.Quit False
Set objWordApplication = Nothing
Set objWordApplication = GetObject(, "Word.Application")
Loop While Not objWordApplication Is Nothing
Run Code Online (Sandbox Code Playgroud)
它有效,但是:
为了迭代所有单词实例,我们必须 GetObject 并关闭它,循环直到没有更多打开的实例,然后重新打开我关心的所有内容
这需要很多时间和 R/W 周期和磁盘访问
并且当然必须在 Word 之外完成,因为它可能会先关闭运行实例的代码,或者在循环中间...
所以,经过一些谷歌搜索,我看到了一些直接访问流程的例子,这里和这里是 VB。
我设法获得了所有 Winword.exe 实例的 PID,主要是对VBForums的代码进行了一些修改:
仅显示修改后的代码段:
Do
If …Run Code Online (Sandbox Code Playgroud) 我想使用相同的 xslt 并针对不同的输出(即 xml、html、xhtml 和文本)进行测试;当然我正在这样做:
<xsl:output method="xml" indent="yes"/>
Run Code Online (Sandbox Code Playgroud)
或者
<xsl:output method="html" indent="yes"/>
Run Code Online (Sandbox Code Playgroud)
但我想通过一个通知参数动态更改,如果我省略它,则默认为 xml。
我试过这个:
<xsl:param name="outputMethod" select="xml" />
<xsl:output method="$outputMethod"indent="yes"/>
Run Code Online (Sandbox Code Playgroud)
没有成功,输出是:
XTSE0020: Invalid value for serialization method: must be
xml|html|xhtml|text|json|adaptive, or a QName in '{uri}local' form
Run Code Online (Sandbox Code Playgroud)
并尝试了这种更复杂的方式,我知道:
<xsl:variable name="thisDocument" select="document('')" />
<xsl:param name="outputMethod" select="xml" />
<xsl:variable name="myOutputMethod" select="$outputMethod"/>
<xsl:output method="$thisDocument/xsl:stylesheet/myOutputMethod" indent="yes"/>
Run Code Online (Sandbox Code Playgroud)
也没有成功,输出是:
Static error at xsl:output on line 10 column 85 of CopyingNodes.xslt:
XTSE0020: Both the prefix {$thisDocument/xsl} and the local part
{stylesheet/myOutputMethod} are invalid
Errors were reported during …Run Code Online (Sandbox Code Playgroud)