Powershell和Excel,区分大小写.replace

时间:2016-08-19 12:22:55

标签: excel powershell replace office-interop excel-interop

我对Powershell脚本很新,所以如果代码和/或解释很草率,请原谅我。我正在尝试创建一个打开Excel电子表格的脚本,并用标准字符替换所有特殊字母(æöý等)。 现在,该脚本可以工作,但它会将电子表格中的所有大写字符转换为小写字符(例如“Ålborg”变为“alborg”),如果不是这样,我会更喜欢。我被引导相信.replace方法区分大小写,尽管在这里似乎并非如此。

现在我尝试了一些东西,双引号而不是单引号,双引号和单引号,-creplace而不是.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')}  

1 个答案:

答案 0 :(得分:0)

尝试更换操作

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

以便不使用前两个可选参数,然后传递$true以表示与案例匹配 - 请参阅here签名