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", $ReplaceText
Excel ファイルには影響しません。
変換後に特殊文字が失われるため、データを .txt または .csv にエクスポートまたは変換できません。
これを機能させる方法はありますか?