PowerShell Excel ComObject打开自定义分隔符
我在Powershell Excel ComObject中遇到问题,我无法接受逗号以外的分隔符。 收到的一些外部.csv文件使用不同的分隔符,如分号;
,pipe道|
等等
那么,是否有任何解决scheme让它接受自定义分隔符? 我试过使用Import-Csv $fileloop -Delimiter ';'
它的工作。 不过,我希望继续使用-ComObject继续,因为我的脚本都是使用ComObject编写的,我需要它来parsing和检查列和行以及一些额外的function。
以下是打开.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 .....
我研究了一些相关的主题并进行了testing,他们都没有工作:
- PowerShell工作簿。打开分号分号
- https://kb.paessler.com/en/topic/2293-i-have-trouble-opening-csv-files-with-microsoft-excel-is-there-a-quick-way-to-fix-this
testing结果:
1.脚本需要高度的可移植性,这意味着脚本会传递给其他用户使用,所以需要避免在窗口的区域和语言设置上使用设置方法。
2.脚本需要处理大尺寸和大量的.csv文件,因此需要避免使用Import-Csv $fileloop -Delimiter ';'| Export-Csv $commadelimiteroutput -Delimiter ','
Import-Csv $fileloop -Delimiter ';'| Export-Csv $commadelimiteroutput -Delimiter ','
将一个新的.csv文件重build为逗号分隔符,然后使用ComObject进行处理。
如果缺乏信息或不清楚,请让我知道。
而不是使用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
,您可以在这里获得枚举。 我已经使用了相同的例子,指定列3和xlMDYFormat
列1作为xlTextFormat
,但在PowerShell中。