2016-11-04 67 views
1

我問了一個類似的問題here,它讓我走上了一條非常好的軌道,但是在嘗試「全在一起」時,我最終遇到了一個問題。我非常接近,但經過測試衆多理論後,我開始扭轉需要的東西。CSV合併後不導出

我有多個表的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 

我修改了很多,並試圖使其單可運行,以避免計劃多蝙蝠。一切似乎都奏效 - 它拉出第一張紙,重新命名它,並在每次運行第二部分時替換第一行。但是,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%      

CSV來源XLS後 - > 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%,,,,,, 

UPDATE:

新增例如,更新源 - 列名其中保留的空間存在的空間。 廣播名稱列-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

問題出在您的最後一行,您將$ 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 
+0

嘿邁克 - 謝謝你的解釋。然而,現在由於某種原因,它錯誤'Cannont過程參數,因爲參數「名稱」是無效的「 我在想它是引用我的Import_CSV和列表名稱中的空間?有關這方面的任何洞察? 目前我是獲得一個文件保存,但它只是說「長度」「43」 – DNorthrup

+0

嗯,這很奇怪,你可以提供一個CSV文件的淨化版本?你可以虛擬了數據,只需要幾行,我只想測試/本地疑難解答 –

+0

好吧我想我可能在繪圖上有點太快了,現在深入挖掘代碼,我注意到你從excel中保存的文件不是你使用'import-csv'導入的文件那是故意的? –