我問了一個類似的問題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
問題是一個輕微修改導出功能分離功能。我假設由於某種寫入鎖定。
嘿邁克 - 謝謝你的解釋。然而,現在由於某種原因,它錯誤'Cannont過程參數,因爲參數「名稱」是無效的「 我在想它是引用我的Import_CSV和列表名稱中的空間?有關這方面的任何洞察? 目前我是獲得一個文件保存,但它只是說「長度」「43」 – DNorthrup
嗯,這很奇怪,你可以提供一個CSV文件的淨化版本?你可以虛擬了數據,只需要幾行,我只想測試/本地疑難解答 –
好吧我想我可能在繪圖上有點太快了,現在深入挖掘代碼,我注意到你從excel中保存的文件不是你使用'import-csv'導入的文件那是故意的? –