powershell - Powershell 中 MS Word 的范围算术
问题描述
我正在尝试使用 Powershell 自动将新表添加到 Word 文档中。
我编写了一个 Powershell 脚本,用于在适当位置添加基于整个文档的汇总表。它从文件内容中收集信息,然后在选定的范围内创建一个新的汇总表。该表始终插入到范围的末尾(这是文档中的一章)。该范围基于列表标题。但是,在将新表添加到所选范围时,我无法强制 Word 保留下一个被选为范围结尾的标题。它被删除。
例如:我的文件中有从 1.1 到 1.10 的章节,我选择在 1.1 章的末尾添加一个新表格,就在 1.2 章之前。整章 1.2。标题被删除,第 1.3 章现在标记为 1.2。
Range.End
我尝试按照 Microsoft 文档 ( https://docs.microsoft.com/en-us/office/vba/api/word.range.end ) 中的信息从属性中减去各种数字,但似乎没有给出任何结果。
代码(快捷方式):
Add-Type -AssemblyName Microsoft.Office.Interop.Word
$word = New-Object -ComObject Word.application
$report = $word.Documents.Open("C:\file.docx")
#information gathering here
#find the right location and add a new table
$start = $report.Paragraphs | ? {$_.Range.ListFormat.ListString -eq '1.1'} | % {$_.Range}
$end = $report.Paragraphs | ? {$_.Range.ListFormat.ListString -eq '1.2'} | % {$_.Range}
$first_table = $report.Range($start.Start, $end.Start).Tables.Add($end, 24, 4, [ref]$DefaultTableBehavior::wdWord9TableBehavior, [ref]$AutoFitBehavior::wdAutoFitFixed)
#continue with filling up the table
解决方案
部分问题在于,如果您有一系列空的自动编号段落,则将表格插入其中一个将意味着后续段落将放置在表格内。
此外,如果您的 1.1 部分可以包含材料,则 AFAICS 您的 $start 将包含其第一段的范围,这不是很有用 - 您真正需要的只是您要在之前插入的段落的位置。
作为替代方案,我建议您首先在 1.2 标题之前插入段落标记,然后插入表格。
例如像这样:
#$start = $report.Paragraphs | ? {$_.Range.ListFormat.ListString -eq '1.1'} | % {$_.Range}
$end = $report.Paragraphs | ? {$_.Range.ListFormat.ListString -eq '1.2'} | % {$_.Range}
$place = $report.Range($end.Start - 1, $end.Start-1)
$place.InsertParagraph()
$place = $report.Range($end.Start - 1, $end.Start-1)
$first_table = $place.Tables.Add($place, 24, 4, [ref]$DefaultTableBehavior::wdWord9TableBehavior, [ref]$AutoFitBehavior::wdAutoFitFixed)
如果你不想要那个额外的段落标记,你可以删除它,如果你真的想要,你可以使用
$report.Range($end.Start-1, $end.Start).Text = ""
表插入后。
推荐阅读
- javascript - 如何在点击时更改链接,以匹配我从另一个 API 请求中获得的 ID
- php - HTML 帖子与 PHP 数组
- regex - sed 主演的小组赛不贪婪没有开始?
- c++ - 静态类数据成员的线程安全
- python - 使用 URL 路径或查询参数进行分页
- django - 如何在 Django 中使用多个模型编写查询
- apache-spark - 使用 Spark/Scala 有效地按键分组并查找在特定时间窗口中发生的事件的上一个时间戳
- three.js - 在 Three.js 中调试低 FPS
- html - Pug : 处理的正确语法
- ofbiz - Ofbiz Websocket 示例设置未连接 wss