2

Powershell を使用して、Excel ドキュメント内の特殊文字 (ギリシャ文字など) を検索し、それらを HTML エンティティに置き換えたいと考えています。私のスクリプトは次のようになります。

$file = "C:\Path\To\File\test.xls"
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $True
$objWorkbook = $xl.Workbooks.Open($file)
$objWorksheet = $objWorkbook.Worksheets.Item(1)
$objRange = $objWorksheet.UsedRange

$charArray = @(
([char]948, "δ"),
([char]916, "Δ")
)

foreach ($char in $charArray){
    $FindText = $char[0]
    $ReplaceText = $char[1]
    if ($objRange.find("$FindText")) {
        $objRange.replace("$FindText", $ReplaceText)
    } else {write-host "Didn't find $FindText"}
}

問題は、メソッド.find().replace()メソッドは大文字と小文字を区別しないため、[char]948(δ) は小文字のデルタ (δ) 文字と大文字のデルタ (Δ) 文字の両方に一致することです。その結果、Excel (.xls) ファイル内のすべての δ および Δ 文字が に置き換えられδます。

VBA では、Range.Find() に MatchCase パラメーターがありますが、Powershell では許可されていないようです。たとえば、$objRange.find("$FindText", MatchCase:=$True)機能しません。

大文字と小文字を区別するPowershell-cmatchとコマンドも試しましたが、それらを Excel 範囲オブジェクトで動作させる方法がわかりませんでした。-creplace$objRange

$objRange -creplace "$FindText", $ReplaceTextExcel ファイルには影響しません。

変換後に特殊文字が失われるため、データを .txt または .csv にエクスポートまたは変換できません。

これを機能させる方法はありますか?

4

1 に答える 1