Excel 合并后不导出CSV

Excel 合并后不导出CSV,excel,powershell,csv,Excel,Powershell,Csv,我问了一个类似的问题,这让我走上了一条非常好的道路,然而,当我试图“一网打尽”时,我最终遇到了一个问题。我非常接近,但在测试了大量理论后,我开始逆转我需要的 我有一个多工作表Excel-我需要拉第一个工作表,将其转换为CSV格式,然后删除标题,然后只获取第一行的前3位数字。(“列表名”) 我的私人秘书是: #Create and get my Excel Obj $excel = New-Object -comobject Excel.Application $excel.visible=$

我问了一个类似的问题,这让我走上了一条非常好的道路,然而,当我试图“一网打尽”时,我最终遇到了一个问题。我非常接近,但在测试了大量理论后,我开始逆转我需要的

我有一个多工作表Excel-我需要拉第一个工作表,将其转换为CSV格式,然后删除标题,然后只获取第一行的前3位数字。(“列表名”)

我的私人秘书是:

  #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。一切似乎都正常-每次我运行第二部分时,它都会拉出第一张图纸,重命名它,并替换顶行。但是,子字符串部分没有生效,我也没有得到“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%,,,,,,
更新:

添加了一个示例,更新后的源列名会在存在空格的地方保留一个空格。 广播名称列-确实-有一个逗号,但我假设它是用双引号导出的

分辨率

  #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

问题是对导出函数进行了轻微修改,使其成为独立的函数。我假设是由于某种写入锁定。

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

迈克,谢谢你的解释。但是,现在由于某种原因,它在“Cannot process”参数上出错,因为参数“name”无效“我认为它引用了我的导入CSV和列表名中的空格?对此有什么见解吗?目前我正在保存一个文件,但它只显示“Length”43“嗯,这很奇怪,你能提供CSV文件的净化版本吗?你可以伪造数据,只需要几行,我只是想测试/排除本地故障OK我想我可能画得有点太快了,现在深入研究代码,我注意到您从excel保存的文件不是您使用
import csv
导入的文件,这是故意的吗?是-我认为它必须导出到单独的文件中。FileA.XLS->FileB.CSV-(拆分)>FileC.CSV我可以只做FileA.XLS->FileB.CSV-(拆分>FileB.CSV吗?我现在有点困惑,你可以使用
export CSV-force
覆盖文件,但从现在开始,你导入的文件与你通过excel保存的文件无关。你保存到
“C:dir\to\file\Output.CSV”
然后导入
“C:\Users\Donavin\Desktop\TXRH\BroadcastReport.csv”
,我是否遗漏了某个步骤?或者这些文件应该是无关的?