私は同様の質問hereを尋ねましたが、それは非常に良いトラックで私をつかまえましたが、「一人で」しようとしているうちに問題が発生しました。私は非常に近いですが、多くの理論をテストした後、私は必要なものを取り返そうとしています。マージ後にCSVがエクスポートされない
私は、複数のシートExcelを持っている - 。私は、最初のシートを引き出し、それをCSV-IFY、その後、ヘッダを削除し、その後、最初の行だけから最初の3桁の数字を取得します(「リスト名」)する必要が
私のPSは以下のとおりです。私はそれをたくさん修正、およびスケジュール複数のBATを避けるために、それは、単一の実行可能にするために試してみた
#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
。すべてがうまくいくようです - 最初のシートを引っ張って名前を変更し、2番目の部分を実行するたびにトップラインを置き換えます。ただし、SubString部分は有効ではなく、「FileExport」ファイルも取得されません。
私の最後の変更は、入力オブジェクトを提供する必要があると応答するたびに機能するようになっているように思います。参考までに、分割する必要がある行はカンマが付いているため二重引用符で囲まれています。例:
"123|ST,City"
私は123が必要です。ファイルをインポートして、私のForEach機能を実行すると、出力は私の期待通りです。ファイルに保存するだけではありません。
ありがとうございました。
すべての入力を歓迎します。 XLS後
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ソース - > 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
問題は、機能を分離してエクスポート機能にわずかな変形でした。私は何らかの書き込みロックのために仮定します。
を下回っているマイク・ヘイ - あなたの説明をありがとう。しかし、何らかの理由で、引数 "name"が無効であるため、 'Cannont process argument'にエラーが発生しました。 List_NameのスペースとImport_CSVを参照していると思いますか?ファイルは保存されていますが、「長さ」は「43」と表示されます – DNorthrup
ちょっと変だけど、CSVファイルのサニタイズ版を提供できますか?データをダミーアップして数行しか必要としません。 /ローカルでのトラブルシューティング –
ok私はドロー時に少し速かったかもしれないと思います。コードをもっと深く掘り下げ、Excelから保存しているファイルが 'import-csv'でインポートしているファイルではないことに気付きました。それは意図的なのですか? –