Powershell et Excel, sensibilité à la casse avec .replace

Je suis assez nouveau pour les scripts Powershell, alors pardonnez-moi si le code et / ou l'explication est négligée. J'essaie de créer un script qui ouvre une feuille de calcul Excel et remplace toutes les lettres spéciales (æöý et ainsi de suite) par des caractères standard. Maintenant, le script fonctionne, mais il transforme tous les caractères majuscules dans la feuille de calcul en caractères minuscules (par exemple, "Ålborg" devient "alborg"), ce que je préférerais s'il ne l'a pas fait. J'ai été amené à croire que la méthode .replace est sensible à la casse, même si cela ne semble pas être le cas ici.

Maintenant, j'ai essayé plusieurs choses, des guillemets doubles au lieu de guillemets simples, des guillemets doubles et simples, – créer au lieu de .replace qui vient de cracher

System.__ComObject 

sans modifier quelque chose dans la feuille de calcul (je pense que $ objRange est un tableau, n'est-ce pas?), en ajoutant un .replace pour les lettres majuscules et minuscules, mais rien ne fonctionne. Quelqu'un peut-il signaler mon erreur?

Code:

 $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')} 

Essayez les opérations de rlocation comme tellement

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

de sorte que les deux premiers parameters facultatifs ne sont pas utilisés, puis $true est passé pour indiquer que le cas est en jeu – voir ici pour la signature