PowerShell - 如何 select Word 文档中最后 table 的最后一行,将其复制并作为新行插入到 table 的底部?
PowerShell - How can I select the last row of the last table in a Word document, copy it, and insert as a new row at the bottom of the table?
我正在努力提高日常工作的自动化水平,其中一部分涉及在包含基本相同信息的报告中的 table 末尾添加一行,更改了一些单元格(新日期)。
我对 VB 和 C++ 有一点经验,但在 PowerShell 方面我非常业余,它似乎是任务自动化的首选。
我有几个 PowerShell 脚本可以搜索报告正文并更改文本,但报告的最后部分是一条记录,需要附加而不是修改。
我该怎么做?
我曾尝试修改我在网上找到的一些 PowerShell 代码,但无济于事。我已经 select 在正确的 table 中排了一行,但我不知道如何 select 最后一行,复制它并将其作为新的插入下面table 底部的行:
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objWord.Documents.Open("FILEPATH")
$FindText = "KEYTEXT"
$objWord.Selection.Find.Execute($FindText)
$objWord.Selection.SelectRow()
这是一个冗长的示例,其中的解释可以满足您的需求:
# open document
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$doc = $objWord.Documents.Open("C:\temp\temp.docx")
# search for row
$FindText = "Value2"
$result = $objWord.Selection.Find.Execute($FindText)
$objWord.Selection.SelectRow()
# copy the ranges from searched row
$table = $objWord.Selection.Tables[1]
$copiedCells = $objWord.Selection.Cells | select columnindex,rowindex
# add row at the end of table
$table.Rows[$table.Rows.Count].Select()
$objWord.Selection.InsertRowsBelow(1)
# insert copied text into each column of last row
foreach ($cell in $copiedCells) {
# copy value from cell in copied row
$copiedText = $table.Cell($cell.rowindex, $cell.columnindex).Range.Text
# remove last 2 characters (paragraph and end-of-cell)
$TrimmedText = $copiedText.Remove($copiedText.Length - 2)
# set value for cell in last row
$table.Cell($table.Rows.Count,$cell.columnindex).Range.Text = $TrimmedText
}
我正在努力提高日常工作的自动化水平,其中一部分涉及在包含基本相同信息的报告中的 table 末尾添加一行,更改了一些单元格(新日期)。
我对 VB 和 C++ 有一点经验,但在 PowerShell 方面我非常业余,它似乎是任务自动化的首选。
我有几个 PowerShell 脚本可以搜索报告正文并更改文本,但报告的最后部分是一条记录,需要附加而不是修改。
我该怎么做?
我曾尝试修改我在网上找到的一些 PowerShell 代码,但无济于事。我已经 select 在正确的 table 中排了一行,但我不知道如何 select 最后一行,复制它并将其作为新的插入下面table 底部的行:
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objWord.Documents.Open("FILEPATH")
$FindText = "KEYTEXT"
$objWord.Selection.Find.Execute($FindText)
$objWord.Selection.SelectRow()
这是一个冗长的示例,其中的解释可以满足您的需求:
# open document
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$doc = $objWord.Documents.Open("C:\temp\temp.docx")
# search for row
$FindText = "Value2"
$result = $objWord.Selection.Find.Execute($FindText)
$objWord.Selection.SelectRow()
# copy the ranges from searched row
$table = $objWord.Selection.Tables[1]
$copiedCells = $objWord.Selection.Cells | select columnindex,rowindex
# add row at the end of table
$table.Rows[$table.Rows.Count].Select()
$objWord.Selection.InsertRowsBelow(1)
# insert copied text into each column of last row
foreach ($cell in $copiedCells) {
# copy value from cell in copied row
$copiedText = $table.Cell($cell.rowindex, $cell.columnindex).Range.Text
# remove last 2 characters (paragraph and end-of-cell)
$TrimmedText = $copiedText.Remove($copiedText.Length - 2)
# set value for cell in last row
$table.Cell($table.Rows.Count,$cell.columnindex).Range.Text = $TrimmedText
}