合并后CSV不导出

我在这里问了一个类似的问题,这让我走上了一条很好的轨道,但是,当我试图“一心一意”的时候,我终于遇到了一个问题。 我非常接近,但经过无数的理论testing后,我开始扭转需要的东西。

我有一个多表格Excel – 我需要拉第一张,CSV – 如果它,然后删除标题,然后只得到第一行的前3位数(“列表名称”)。

我的PS是:

#Create and get my Excel Obj $excel = New-Object -comobject Excel.Application $excel.visible=$false $excel.DisplayAlerts=$false $UserWorkBook = $excel.Workbooks.Open("C:\path\to\file\CompleteTest.xls") $UserWorksheet = $UserWorkBook.Worksheets.Item(1) $hitlistCSV = "C:\path\to\file\BroadcastReport.csv" $xlCSV = 6 #changed-grav #Save, close, and clean up $UserWorksheet.SaveAs($hitlistCSV,$xlCSV) $UserWorkBook.close() $excel.quit() $excel = $null $expandfile = "C:\path\to\file\BroadcastReport.csv" (gc $expandfile | select -Skip 1) | sc $expandfile Import-Csv $expandfile | ForEach-Object { $_."List Name" = $_."List Name".SubString(0,3) $_ } $expandfile | Export-Csv "C:\path\to\file\BroadcastReport.csv" -NoTypeInformation 

我已经修改了很多,并试图使它单一运行,以避免安排多个最佳可行技术。 一切似乎工作 – 它拉第一张表,重命名它,并replace第一行,每次我运行第二部分。 但是,SubString部分没有生效,我也没有得到一个“FileExport”文件。

我现在最后一次修改是这样,每次它回复我需要“提供一个input对象”,所以我觉得它与函数化有关。 作为参考,我需要拆分的行是双引号,因为它有逗号。 例如:

 "123|ST,City" 

我只需要123.当我只是导入文件,并运行我的ForEachfunction,输出是我所期望的。 只是将其保存到文件不是。

谢谢。

欢迎任何input。

XLS来源

 This is the header line I need to skip List Name Broadcast Name ColumC ColumD Colum E ColumF Colum G ColumJ 401|ST, City ST, City - More Text(LSM) (16803) 1 854 73 854 233 27.28% 402|ST, City ST, City - October (LSM) (16807) 1 851 57 851 186 21.86% 

XLS之后的CSV源 – > CSV

有一点奇怪的是,一旦它变成CSV,我只剩下6个逗号。 例:

 List Name,Broadcast Name,ColumC,ColumD,Colum E ,Colum,Colum F,ColumG,,,,,, "402|ST,City","ST, City - More Text(ACR) (16803)",1,854,73,854,233,27.28%,,,,,, "402|ST,City","City, ST - Text (LSM) (16807)",1,851,57,851,186,21.86%,,,,,, 

更新:

新增示例,更新源 – 列名保留空间存在的空间。 广播名称列-does-中有一个逗号,但我认为它正在用双引号导出。

parsing度

  #Create and get my Excel Obj $excel = New-Object -comobject Excel.Application $excel.visible=$false $excel.DisplayAlerts=$false $UserWorkBook = $excel.Workbooks.Open("C:\path\to\file\ExcelBook.xls") $UserWorksheet = $UserWorkBook.Worksheets.Item(1) $hitlistCSV = "C:\path\to\file\Output.csv" $xlCSV = 6 #changed-grav #Save, close, and clean up $UserWorksheet.SaveAs($hitlistCSV,$xlCSV) $UserWorkBook.close() $excel.quit() $excel = $null $expandfile = "C:\path\to\file\Output.csv" $report = get-content $ExpandFile | select -skip 1 | convertfrom-csv | ForEach-Object { $_."List Name" = $_."List Name".SubString(0,3) $_ } $report | Export-Csv ""C:\path\to\file\Output.csv" -force -NoTypeInformation 

问题是导出函数被分离的函数的一个微小的修改。 我假设由于某种写入locking。

问题是在最后一行,您将$ expandfile设置为export-csv的返回结果,它提示您提供一个input,因为它试图执行导出,但只提供一个path。 只要把最后一行改成
$expandfile | Export-Csv "C:\Users\Donavin\Desktop\TXRH\FileExport.csv" -NoTypeInformation

编辑

好的,需要做一些更改才能正常工作,有效的导入/导出代码在下面

 $expandfile = "C:\path\to\file\BroadcastReport.csv" (gc $expandfile | select -Skip 1) | sc $expandfile Import-Csv $expandfile | ForEach-Object { $_."List Name" = $_."List Name".SubString(0,3) $_ } | Export-Csv "C:\path\to\file\BroadcastReport.csv" -force -NoTypeInformation