Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск текста в таблице MWord (http://forum.oszone.net/showthread.php?t=348585)

lox-ness 19-04-2021 16:53 2956028

Поиск текста в таблице 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)


Iska 19-04-2021 22:10 2956044

lox-ness, образец документа предоставьте.

lox-ness 20-04-2021 06:06 2956052

Вложений: 1
Часть таблицы

lox-ness 20-04-2021 06:16 2956053

Немного изменила код
Код:

$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


lox-ness 20-04-2021 09:12 2956055

Получили что хотели $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


lox-ness 20-04-2021 12:17 2956073

Спасибо


Время: 10:21.

Время: 10:21.
© OSzone.net 2001-