Powershell和Excel,与.replace区分大小写

我对Powershell脚本相当陌生,所以请原谅我,如果代码和/或解释是马虎。 我正在尝试创build一个脚本来打开一个Excel电子表格,并用标准字符replace所有的特殊字母(如等等)。 现在,脚本工作,但它将电子表格中的所有大写字符变成小写字符(例如“奥尔堡”变成“奥尔堡”),如果不是这样,我宁愿这样做。 我已经被引导认为.replace方法是区分大小写的,虽然在这里似乎并不是这样。

现在我已经尝试了一些事情,双引号而不是单引号,双引号和单引号,而不是.replace,而只是吐出来

System.__ComObject 

而没有真正改变电子表格中的任何东西(我认为$ objRange是一个数组,这是为什么?),大写和小写字母都添加.replace,但没有任何工作。 任何人都能指出我的错误?

码:

 $excelFile = New-Object system.windows.forms.openfiledialog $excelFile.InitialDirectory = 'Q:\Address_convert' $excelFile.MultiSelect = $false $excelFile.showdialog() $excelFile.filenames $excelFile = $excelFile -replace "System.Windows.Forms.OpenFileDialog: Title: , FileName: ", "" if ($excelFile -like '*.xlsx*') { $excel = New-Object -comObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false $workBook = $excel.WorkBooks.Open($excelFile) $oReturn = [Microsoft.VisualBasic.Interaction]::MsgBox("Replace special characters in $excelFile ?", 'YesNo,MsgBoxSetForeground,Question', 'Address Replace') switch ($oReturn){ "Yes" { For($i = 1 ; $i -le $workBook.Sheets.count ; $i++) { $workSheet = $workBook.Sheets.item($i) $objRange = $workSheet.UsedRange $objRange.Replace('á', 'a') $objRange.Replace('à', 'a') $objRange.Replace('â', 'a') $objRange.Replace('ã', 'a') $objRange.Replace('ä', 'a') $objRange.Replace('å', 'a') $objRange.Replace('æ', 'ae') $objRange.Replace('ç', 'c') $objRange.Replace('é', 'e') $objRange.Replace('è', 'e') $objRange.Replace('ê', 'e') $objRange.Replace('ë', 'e') $objRange.Replace('í', 'i') $objRange.Replace('ì', 'i') $objRange.Replace('î', 'i') $objRange.Replace('ï', 'i') $objRange.Replace('ð', 'd') $objRange.Replace('ð', 'd') $objRange.Replace('ñ', 'n') $objRange.Replace('ó', 'o') $objRange.Replace('ò', 'o') $objRange.Replace('ô', 'o') $objRange.Replace('õ', 'o') $objRange.Replace('ö', 'o') $objRange.Replace('ø', 'o') $objRange.Replace('ú', 'u') $objRange.Replace('ù', 'u') $objRange.Replace('û', 'u') $objRange.Replace('ü', 'u') $objRange.Replace('ý', 'y') $objRange.Replace('ÿ', 'y') $objRange.Replace('ß', 'ss') $objRange.Replace('þ', 'th') } if (!$workBook.saved) {$workBook.save()} $workBook.close() [Microsoft.VisualBasic.Interaction]::MsgBox("Replacement completed", 'OkOnly,MsgBoxSetForeground,Information', 'Address Replace') } "No" { if (!$workBook.saved) {$workBook.save()} $workBook.close() [Microsoft.VisualBasic.Interaction]::MsgBox("Replacement aborted!", 'OkOnly,MsgBoxSetForeground,Exclamation', 'Address Replace') } } } Else {[Microsoft.VisualBasic.Interaction]::MsgBox("Specified path ($excelFile) does not contain an .xlsx file!", 'OkOnly,MsgBoxSetForeground,Exclamation', 'Address Replace')} 

尝试像这样的replace操作

 ... $optionalParameter = [System.Type]::Missing $objRange.Replace('á', 'a', $optionalParameter, $optionalParameter, $true) ... 

所以前两个可选参数不被使用,然后传递$true来表示匹配的情况 – 请参阅这里的签名