【问题标题】:Powershell Excel ComObject Open Custom DelimitersPowershell Excel ComObject 打开自定义分隔符
【发布时间】:2018-04-30 22:59:21
【问题描述】:

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

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

下面是打开.csv文件进行进一步处理的相关代码sn-p:

$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. https://kb.paessler.com/en/topic/2293-i-have-trouble-opening-csv-files-with-microsoft-excel-is-there-a-quick-way-to-fix-this

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

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

【问题讨论】:

  • Excel 当前是否打开第一列中包含所有数据的文件?如果是这样,您可以使用它的text to columns 方法来定义自定义分隔符。

标签: excel powershell csv delimiter


【解决方案1】:

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

将分号;delimiter 的参数设置为$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 中。

【讨论】:

  • 之前尝试过此解决方案,还尝试过您的代码来替换我当前有效的 Open 方法。不幸的是,代码将停止并出现异常: (System.Management.Automation.RuntimeException) - 错误消息:您不能在空值表达式上调用方法。关于这个例外的任何想法?
  • 我对 opentext 进行了一些研究,opentext 可能无法直接在 .csv 文件扩展名上运行良好,请注意:stackoverflow.com/questions/27491558/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2015-04-25
  • 2017-06-13
  • 2012-10-07
相关资源
最近更新 更多