我想使用 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()
and.replace()
方法不区分大小写,因此[char]948
(δ) 匹配小写 delta (δ) 和大写 delta (Δ) 字符。结果是 Excel (.xls) 文件中的所有 δ 和 Δ 字符都替换为δ
.
在 VBA 中, Range.Find() 有一个 MatchCase 参数,但 Powershell 似乎不允许它。例如,$objRange.find("$FindText", MatchCase:=$True)
不起作用。
我还尝试了区分大小写的Powershell-cmatch
和命令,但我不知道如何让它们在 Excel 范围对象上工作:-creplace
$objRange
$objRange -creplace "$FindText", $ReplaceText
对 Excel 文件没有影响。
我无法将数据导出或转换为 .txt 或 .csv,因为特殊字符无法在转换后继续存在。
有没有办法使这项工作?