合并后CSV不导出

时间:2016-11-04 13:32:54

标签: excel powershell csv

我问了一个类似的问题here,它让我走上了一条非常好的轨道,但是当我试图'一体化'时,我最终遇到了一个问题。我非常接近,但在测试了很多理论后,我开始扭转我的需要。

我有一个多表Excel - 我需要拉第一张,CSV-ify,然后删除标题,然后只从第一行得到前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

我已经对它进行了很多修改,并尝试将其单一运行以避免安排多个BAT。一切似乎都有效 - 它拉出第一张纸,重新命名,并在每次运行第二部分时替换顶线。但是,SubString部分没有生效,我也没有收到'FileExport'文件。

我的上一次修改现在使它每次回复时我都需要“提供一个输入对象”,所以我觉得它与功能化它有关。作为参考,我需要拆分的行是双引号,因为它有逗号。例如:

"123|ST,City"

我只需要123.当我只导入文件并运行我的ForEach函数时,输出就是我所期望的。只是将它保存到文件中不是。

感谢。

欢迎任何输入。

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-中有一个逗号,但我认为它是用双引号导出的。

解决

  #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

问题是对作为分离函数的导出函数稍作修改。我假设由于某种写锁定。

1 个答案:

答案 0 :(得分:1)

问题出在你的最后一行,你将$ expandfile设置为export-csv的返回结果,它提示你提供输入,因为它试图执行导出但只提供了一个路径。只需将最后一行更改为
$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