Поиск текста в таблице MWord
Добрый День!
Ранее не работала с таблицами созданными в Word. Необходимо найти текст и получить адрес ячейки в которой он находиться. Вхождений текста может быть не одно.
Код:
$word = New-Object -Com Word.Application
$filename = 'd:\Table.doc'
$document = $word.Documents.Open($filename)
#$find = $word.Selection.Find.Text
$word.Selection.Find.Execute()
$table = $document.Tables.Item(2)
$tableCols = $table.Columns.Count
$tableRows = $table.Rows.Count
for($i=1; $i -le $tableRows; $i++) {
for($j=1; $j -le $tableCols; $j++) {
$table.Cell($i, $j).Range.Find.Text("ошибочно") # Смотрели справку вроде все нормально, но выходит ошибка "Операции с семействами не поддерживаются"
}
}
$document.Close()
$word.Quit()
# Stop Winword Process
$rc = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Word)
|
lox-ness, образец документа предоставьте.
|
Вложений: 1
Часть таблицы
|
Немного изменила код
Код:
$Word = New-Object -Comobject Word.Application
$Word.Visible = $true
$count = 0
$File = "D:\Table.docf"
$Doc = $Word.Documents.Open($File)
$Selection = $Word.Selection
$Selection.GoTo(0) | Out-Null
$Find_String="ошибочно"
foreach ($find in $Find_String)
{
$Selection.Find.Text = $find
do
{
if ($Selection.Find.Execute())
{
Write-Host "Нашел" $count
$Word.Selection.Cells()
$count++
}
}
while ($Selection.Find.Found)
}
$Selection.GoTo(0) | Out-Null
$word.Quit()
Стала получать информацию в которой меня должно интересовать видимо RowIndex и ColumnIndex, но почему-то получить их не получается, хотя например Width без проблем значение получаю
Код:
Нашел 1
Range : System.__ComObject
Application : System.__ComObject
Creator : 1297307460
Parent : System.__ComObject
RowIndex : 4
ColumnIndex : 9
Width : 176,15
Height : 9999999
HeightRule : 0
VerticalAlignment : 0
Column : System.__ComObject
Row : System.__ComObject
Next : System.__ComObject
Previous : System.__ComObject
Shading : System.__ComObject
Borders : System.__ComObject
Tables : System.__ComObject
NestingLevel : 1
WordWrap : True
PreferredWidth : 176,15
FitText : False
TopPadding : 2,85
BottomPadding : 2,85
LeftPadding : 2,85
RightPadding : 2,85
ID :
PreferredWidthType : 3
|
Получили что хотели $Word.Selection.Cells() | Select RowIndex, ColumnIndex
|
DJ Mogarych |
20-04-2021 10:17 2956063 |
По мотивам https://stackoverflow.com/questions/...ith-tables-etc
Код:
$filename = "D:\temp\Table.doc"
$search = "эквайринг"
$wd = New-Object -ComObject Word.Application
$doc = ($wd).Documents.Open($filename)
$report = @()
$cTable = 1
foreach ($table in $doc.Tables) {
$cRows = $table.Rows.Count
$cColumns = $table.Columns.Count
$cColumn = 1
do {
$cRow = 1
do {
if ($table.Cell($cRow, $cColumn).range.text -match "$search") {
$obj = [PSCustomObject]@{
'№ таблицы' = $cTable
'№ cтолбца' = $cColumn
'№ строки' = $cRow
Строка = $table.Cell($cRow, $cColumn).range.text
}
$report += $obj
}
$cRow++
} until ($cRow -gt $cRows)
$cColumn++
} until ($cColumn -gt $cColumns)
$cTable++
}
$wd.Quit()
$report
|
Время: 10:21.
© OSzone.net 2001-