j0h*_*hny 4 docx openxml phpword
我目前正在尝试使用PHPWord库及其模板系统处理 docx 文件。我已经找到并更新了这个库的路径(不记得名字,但它不重要)可以处理表(复制它的行,然后在每一行上使用 PHPWord 的标准 setValue())。
如果我创建自己的文档,xml中的数据是正常结构,所以要替换的变量 ${variable} 在它自己的标签中,如下所示:
<w:tbl>
<w:tr>
...
${variable}
</w:tr>
</w:tbl>
Run Code Online (Sandbox Code Playgroud)
我简化了代码,在实际代码中还有许多其他标签描述大小、样式等。
我的问题是我必须从其他人那里处理文件,我被禁止进行重大更改,我得到了一份文件,其中在某些时候它们是一个带有一个空白行的表格。我添加了 ${variable} 变量并通过 PHPWord 运行它。问题是,它失败了。经过一番研究,我发现源 XML 如下所示:
....
...
${va
...
riab
...
le}
....
Run Code Online (Sandbox Code Playgroud)
(再次大大简化,但你得到了图片)
这种结构对我来说是个问题,因为克隆行的函数使用 strpos()、substr() 和正则表达式来工作,并且不适用于这种结构(我无法想象这样做的优雅方式)。
所以问题是 - 有谁知道为什么 docx 这样做以及如何阻止他?我正在通过 word 而不是 PHP 寻找解决方案(我需要当前的函数无需太多编辑即可工作)
我已经解决了很多这个问题:
在word中,文档可以这样保存
<w:t>{</w:t>...
<w:t>variable</w:t>
<w:t>}</w:t>
Run Code Online (Sandbox Code Playgroud)
因此,我创建了一个 JS 库,即使变量名被拆分也能正常工作:Docxtemplater (works server side too) 。我在开发过程中发现,如果出现以下情况,变量名称不会被拆分:
我认为没有办法在 Word 中使用一个命令修复 docx 文档,但是重写变量以在一个 Stroke 中写入它们应该可行。