0

大きなドキュメントを取得し、「^ m」(ページ分割)を検索して、見つかったページ分割ごとに新しいテキストファイルを作成しようとしています。

使用:

$SearchText = "^m"
$word = new-object -ComObject "word.application"
$path = "C:\Users\me\Documents\Test.doc"
$doc = $word.documents.open("$path")
$doc.content.find.execute("$SearchText")

テキストを見つけることはできますが、ページが新しいファイルに分割される前にテキストを保存するにはどうすればよいですか?VBScriptでは、readlineを実行してバッファーに保存するだけですが、PowerShellは大きく異なります。

編集:

$text = $word.Selection.MoveUntil (cset:="^m")

エラーを返します:

Missing ')' in method call.
4

1 に答える 1

0

私の解決策はちょっとばかげていると思いますが、ここに私自身の解決策があります(より良い解決策を見つけるのを手伝ってください):

Param(
[string]$file
)
#$file = "C:\scripts\docSplit\test.docx"

$word = New-Object -ComObject "word.application"
$doc=$word.documents.open($file)
$txtPageBreak = "<!--PAGE BREAK--!>"
$fileInfo = Get-ChildItem $file
$folder = $fileInfo.directoryName
$fileName = $fileInfo.name
$newFileName = $fileName.replace(".", "")

#$findtext = "^m"
#$replaceText = $txtPageBreak

function Replace-Word ([string]$Document,[string]$FindText,[string]$ReplaceText) {

    #Variables used to Match And Replace

    $ReplaceAll = 2
    $FindContinue = 1

    $MatchCase = $False
    $MatchWholeWord = $True
    $MatchWildcards = $False
    $MatchSoundsLike = $False
    $MatchAllWordForms = $False
    $Forward = $True
    $Wrap = $FindContinue
    $Format = $False

    $Selection = $Word.Selection

    $Selection.Find.Execute(
        $FindText,
        $MatchCase,
        $MatchWholeWord,
        $MatchWildcards,
        $MatchSoundsLike,
        $MatchAllWordForms,
        $Forward,
        $Wrap,
        $Format,
        $ReplaceText,
        $ReplaceAll
    )

    $newFileName = "$folder\$newFileName.txt"
    $Doc.saveAs([ref]"$newFileName",[ref]2)
    $doc.close()
}



Replace-Word($file, "^m", $txtPageBreak)



$word.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word)
Remove-Variable word


#begin txt file manipulation

#add end of file marker
$eof = "`n<!--END OF FILE!-->"
Add-Content $newfileName $eof

$masterTextFile = Get-Content $newFileName
$buffer = ""
foreach($line in $masterTextFile){
    if($line.compareto($eof) -eq 0){
        #end of file, save buffer to new file, be done
    }
    else {
        $found = $line.CompareTo($txtPageBreak)

        if ($found -eq 1) {
            $buffer = "$buffer $line `n"
        }

        else {
            #save the buffer to a new file (still have to write this part)
        }
    }
}
于 2012-12-04T17:34:32.747 に答える