Код ниже отлично работает и извлекает необходимые разделы из текстового документа. Мы должны искать около 50 ключевых слов по одному в документе, как мы можем оптимизировать этот код. Поскольку при текущем подходе мы ищем одно ключевое слово, затем снова открываем документ и ищем снова. Это занимает очень много времени на выполнение. Любые предложения.
НИЖЕ код: Извлечение текста между двумя заголовками, как его оптимизировать, чтобы мы могли заставить его работать для поиска по 50 ключевым словам ... открывая документ один раз и сканируя до конца ..
function ExtractSectionsFromWordDoc{
Param([string]$SourceFile, [string]$Category, [string]$SearchKeyword1, [string]$SearchKeyword2, [string]$TableName)
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$doc = $word.Documents.Open($SourceFile,$false,$true)
$sel = $word.Selection
$paras = $doc.Paragraphs
foreach ($para in $paras)
{
$style = $para.Style
If ($style.NameLocal -eq "Heading 2")
{
if ($para.Range.Text -match $SearchKeyword1)
{
$startPosition = $para.Range.Start
Write-Host $startPosition
}
if ($para.Range.Text -match $SearchKeyword2)
{
$endPosition = $para.Range.Start
Write-Host $endPosition
break
}
}
}
[array]$content=New-Object System.Collections.ArrayList
$content=$doc.Range($startPosition, $endPosition).text
$content = $content -replace "'", ""
# cleanup com objects
$doc.Close()
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($doc) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}