如何做区分大小写的查找和;用Powershell替换Excel文件

时间:2013-04-10 05:52:11

标签: excel powershell replace html-entities

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

有没有办法让这项工作?

1 个答案:

答案 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