Powershell Excel ComObject打开自定义分隔符

时间:2017-11-17 08:11:58

标签: excel powershell csv delimiter

我在Powershell Excel ComObject上遇到问题,我无法接受逗号,以外的分隔符。收到的一些外部.csv文件使用不同的分隔符,例如分号;,管道|等。

那么,是否有任何解决方案可以让它接受自定义分隔符?我尝试使用Import-Csv $fileloop -Delimiter ';'并且它有效。但是我希望继续使用-Co​​mObject继续,因为我的脚本都是使用ComObject编写的,我需要它来解析并检查列和行以及一些额外的功能。

以下是开放.csv文件的相关代码段,供进一步处理:

$path      = "C:\Users\1.csv"
$objexcel  = New-Object -ComObject Excel.Application
$workbook  = $objexcel.Workbook.Open($path)
$worksheet = $workbook.activesheet
$colMax    = ($WorkSheet.UsedRange.Columns).count
$intcolMax = $colMax
$intRowMax = ($WorkSheet.UsedRange.Rows).count
.....

我对一些相关主题进行了研究并进行了测试,其中没有一个正在运作:

  
      
  1. PowerShell Workbooks.Open with delimiter semicolon
  2.   
  3. https://kb.paessler.com/en/topic/2293-i-have-trouble-opening-csv-files-with-microsoft-excel-is-there-a-quick-way-to-fix-this
  4.   

测试结果:
 1.脚本需要高可移植性,这意味着脚本将传递给其他用户使用,因此需要避免在区域和地区使用设置方法。 Windows上的语言设置  2.脚本需要处理大量和大量的.csv文件,因此需要避免使用Import-Csv $fileloop -Delimiter ';'| Export-Csv $commadelimiteroutput -Delimiter ','之类的方法将新的.csv文件重建为逗号分隔符,然后使用ComObject进行处理。

如果缺少信息或不清楚,请告诉我。

1 个答案:

答案 0 :(得分:1)

不使用Open方法,而是使用OpenText。这允许设置自定义分隔符,但这不是必需的,因为它还允许$true / $false用于某些标准分隔符。

将分号;分隔符的参数设置为$true,将其他分隔符设置为$false

$objexcel.WorkBooks.OpenText(`
                $path,        # Filename
                2,            # Origin
                1,            # StartRow
                1,            # DataType
                1,            # TextQualifier
                $false,       # ConsecutiveDelimiter
                $false,       # Tab
                $true,        # Semicolon
                $false,       # Comma
                $false,       # Space
                $false,       # Other - $true/$false
                $false,       # OtherChar - specify the character if Other is $true
                @(@(3,3),@(1,2))         # FieldInfo
)

对于FieldInfo,您可以获取枚举here。我使用了相同的示例作为文档示例,将第3列指定为xlMDYFormat第1列为xlTextFormat,但在PowerShell中。