2015-01-11 6 views
0

PowerShell을 사용하여 CSV 파일을 저장하려고하지만이를 수행 할 수 없습니다. 나는 다양한 방법을 시도하고 많은 시간을 보냈지 만 결과 파일을 저장할 수없는 이유를 아직 알 수 없습니다. 다음은 같은 코드 예제입니다.CSV 파일을 저장할 수 없습니다.

$file1 = "C:\Users\vicky\desktop\SourceFile.csv"  # CSV Source file 
$xl = new-object -c excel.application 
$xl.Visible = $true 
$xl.DisplayAlerts = $false 
$wb=$xl.workbooks.open($file1) 
$ws=$wb.worksheets.item("SourceFile")    # Sheet name 
$ws.activate 
$rng = $ws.Cells.Item(1,6).EntireColumn 
$rng.select #selecting range 
$filterval = "Y" 
$xl.selection.AutoFilter(9,$filterval)    # Applying filter on 9th column from left of the source file 
$ws.SaveAs("C:\Users\vicky\Desktop\newFile.csv")  # Save filtered output as newFile 
$wb.close() 
$xl.quit() 
$a= get-process -name EXCEL | select -expand Id  # Finding Process Id of Excel 
stop-process $a          # To kill Excel Process 

열에 필터를 적용한 다음 필터링 된 파일을 새 파일 이름으로 저장해야합니다. 필터를 적용 할 수는 있지만 출력을 다른 CSV 파일에 저장할 수 없습니다.

+0

오류가 발생합니까? 그것은 파일을 전혀 생성합니까? 형식이 지정되지 않았기 때문에 Excel에서 파일의 내용을 복구하려고한다는 것을 제외하고 나에게 효과가있는 것 같습니다. 그게 문제 야? – raney

+0

아니요 오류가 표시되지 않습니다. 데이터를 필터링하고 필요한 디스플레이 출력을 잠시 표시하지만 newFile.csv에 저장하지 않으며 newFile.csv의 내용은 Sourcefile.csv의 내용과 동일하게 유지됩니다. – VickyRoch

+0

# $ wb.close() # $ wb.close() 코드의 마지막 네 줄에 주석을 달면 필요한 출력을 볼 수 있습니다. # $ xl.quit() # $ a = get-process -name EXCEL | select -expand Id # stop-process $ a 그러나이 줄을 다시 실행하면 필터링 된 결과가 손실됩니다. – VickyRoch

답변

1

보이는 셀만 저장할 수 있다고 생각하지 않습니다. 이를 새로운 시트로 복사하여 내보낼 필요가 있습니다. 또한 특정 형식으로 내보내려면 항상 file format을 지정해야합니다. 그렇지 않으면 출력 파일이 기본 형식 (일반적으로 열린 파일의 형식)을 사용하여 만들어집니다.

변경이이에

$xl.selection.AutoFilter(9,$filterval) 
$ws.SaveAs("C:\Users\vicky\Desktop\newFile.csv") 
$wb.close()

: 보조 노트로

$xl.selection.AutoFilter(9,$filterval) 
$ws2 = $wb.Sheets.Add() $ws.UsedRange.SpecialCells(12).Copy() $ws2.Paste() $ws2.SaveAs("C:\Users\vicky\Desktop\newFile.csv", 6) 
$wb.Saved = $true 
$wb.close()

는 : 엑셀 인스턴스를 종료 Stop-Process를 사용하지 마십시오. 적절한 방법은 COM 개체를 해제하는 것입니다.

$xl.Quit() 
[Runtime.InteropServices.Marshal]::ReleaseComObject($xl) 
[GC]::Collect() 
[GC]::WaitForPendingFinalizers() 
관련 문제