我想使用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
(δ)匹配小写delta(δ)和大写delta(Δ)字符。结果是Excel(.xls)文件中的所有δ和Δ字符都替换为δ
。
在VBA中,Range.Find()有一个MatchCase参数,但似乎Powershell不允许这样做。例如,$objRange.find("$FindText", MatchCase:=$True)
不起作用。
我还尝试了Powershell的-cmatch
和-creplace
命令,这些命令区分大小写,但我无法弄清楚如何让这些命令在Excel范围对象$objRange
上运行:< / p>
$objRange -creplace "$FindText", $ReplaceText
对Excel文件没有影响。
我无法将数据导出或转换为.txt或.csv,因为特殊字符无法在转换后继续存在。
有没有办法让这项工作?
答案 0 :(得分:2)
使用PowerShell,您可以使用creplace operator
"aAaAaA" -creplace 'a','I'
IAIAIA
要替换查找,您可以使用string
类中的IndexOf方法,它需要comparisonType
IndexOf(string value, int startIndex, int count, System.StringComparison comparisonType)
示例:
"Jean Paul".indexOF("paul", 0, [System.StringComparison]::CurrentCulture)
-1
"Jean Paul".indexOF("paul", 0, [System.StringComparison]::CurrentCultureIgnoreCase)
5