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()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,因为特殊字符无法在转换后继续存在。

有没有办法使这项工作?

4

1 回答 1

2

使用 PowerShell,您可以使用 creplace 运算符

"aAaAaA" -creplace 'a','I'
IAIAIA

要替换 find 您可以使用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
于 2013-04-10T07:55:11.817 回答