PowerShell中如何导入带有换行符的标题的CSV文件

3
为了一个项目,我需要将.xlsm文件中的数据导出到CSV文件中,并使用PowerShell进行处理。 我目前是手动导出。在原始文件中,标题中有换行符,这些换行符也会传输到CSV文件中。 我的问题:
  • 我能否使用Powershell从.xlsm文件中导出特定的工作表?
  • 如何用空格替换换行符?
附上原始.xlsm文件的示例: enter image description here 更新:很遗憾,我不知道如何上传文件。 这里是一个示例CSV文件的内容:
Host name;Computer name old;IP-addr.;"IP-addr. 
free?";"Subnetmask 
CIDR Suffix";Static DNS entry;DNS alias;"vCPU Number 
[Units]";"RAM 
[GB]";"Boot disk 
[GB]";;;;;;;;
Broadcast;;172.225.145.0;Net;26;;;;;;;;;;;;;
Gateway;;172.225.145.1;Net;26;;;;;;;;;;;;;
Server125;;172.225.145.2;yes;26;;;;;;;;;;;;;
Server126;;172.225.145.3;yes;26;;;;;;;;;;;;;
Server127;;172.225.145.4;yes;26;;;;;;;;;;;;;
Server128;;172.225.145.5;no;26;;;;;;;;;;;;;

CSV文件在Notepad++中的截图

CSV文件在Notepad++中的截图

1个回答

1
可以使用 ImportExcel 模块,您可以通过 Install-Module ImportExcel 命令进行安装。
可以参考此答案的示例。
如何将换行符替换为空格?一种简单但效率不高的方法是:
  • 首先使用 Import-CsvImportExcel(来自于ImportExcel模块)导入 CSV 文件 - 只要这样的字段被包含在 "..."中,就可以处理带有嵌入式换行符的标题字段。

  • 然后处理生成的 [pscustomobject] 实例,并用新构造的变体替换它们,其中属性名已将换行符替换为空格。

Import-Csv yourFile.csv | # parse the CSV file into [pscustomobject]s
  ForEach-Object {        # process each object
    $oht = [ordered] @{} # create an aux. ordered hashtable
    foreach ($p in $_.psobject.Properties) { # loop over the object's properties 
     # add a name-value entry with the modified column (property) name.
      $oht[($p.Name -replace '\s+', ' ')] = $p.Value
    }
    [pscustomobject] $oht # convert the hashtable to [pscustomobject] and output
  }

将上述内容导入到Export-CsvImportExcel(从ImportExcel模块)中,以便将数据重新导出到文件中,将其导入到另一个命令中,或者在变量中捕获转换后的对象($objects = Import-Csv ...
注意:使用-replace替换任何非空运行(+)的空格字符(\s)为单个空格(' ')。 这样可以确保序列<space><LF>被替换为单个空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接