2016-11-25 1 views
0

Powershell을 사용하여 CSV로 처리하고 싶은 Excel 파일이 있습니다. CSV 정보를 처리 할 프로그램을위한 신뢰할 수있는 입력이 될 수 있도록 확실히 변경해야합니다. 정확한 헤더를 모르지만 중복이있을 수 있습니다. 는 내가하는 일은 엑셀과 XLSX 파일 열려 있고 CSV로 저장 :이름 바꾸기 및 구분 기호를 사용하여 Powershell로 xlsx에서 csv로 처리

$objExcel = New-Object -ComObject Excel.Application 
$objExcel.Visible = $True 
$objExcel.DisplayAlerts = $True 

$Workbook = $objExcel.Workbooks.open($xlsx1) 
$WorkSheet = $WorkBook.sheets.item($sheet) 
$xlCSV = 6 

$Workbook = $objExcel.Workbooks.open($xlsx2) 
$WorkSheet = $WorkBook.sheets.item($sheet) 
$WorkBook.SaveAs($csv2,$xlCSV) 

는 이제, XLSX 파일 그래서 처음 난 점으로 변경하려면, 쉼표의있을 것이다. 나는이 시도했지만 제대로 동작하지 않습니다 :

$objRange = $worksheet.UsedRange 
$objRange.Replace ",", "." 

그것은 오류가 밖으로 말 : 예기치 않은 토큰 ' ","'.

그런 다음 절약 할 때 ";"를 사용하므로 구분 기호를 쉼표로 설정하고 싶습니다. 표준. 다음과 같이 입력하십시오 :

$WorkBook.SaveAs($csv2,$xlCSV) -delimiter "," 

마지막 문제는 중복 된 헤더입니다. 이것은 PS가 Import-CSV를 사용하지 못하게합니다.

Get-Content $downloads\BBKS_DIR_AUTO_COMMA.csv -totalcount 1 >$downloads\Headers.txt 

을하지만 그때 나는 레지오, 레지오, 레지오을 가질 수처럼 중복 된 이름 드의 이름을 변경해야합니다 파일이 작동 쉼표로 분리 될 때 나는 여기, 시도했다. 이것을 Regio, Regio2, Regio3로 변경하고 싶습니다.

내 계획은 txt의 데이터를 검색하고 중복을 검색 한 다음 증분 값을 광고하는 것이 었습니다.

결국에는 증분 숫자가있는 열을 추가해야하지만 항상 다음과 같은 네 개의 숫자가 필요합니다. 0001, 0002, 0010, 0020, 0200, 1500, 9999를 초과하지 않습니다. 어떻게 할 수 있습니까?

나를 도울 수 있다면 부분적으로 만 행복합니다. 또한 필자는 Windows 7 x64, PowerShell 3.0, Excel 2016 (관련이있을 경우)을 실행 중입니다. 더 쉽게 수행 할 수있는 경우 명령 프롬프트로 돌아가서 일부 작업을 수행하십시오. 개인적으로

+0

여기에는 ';'구분 기호 (제목에서 식별 됨)와 헤더에 대해 다른 두 가지 질문이 있습니다. 이전의 경우 [기본 언어 설정] (http://stackoverflow.com/questions/13496686/how-to-save-semi-colon-delimited-csv-file-using-vba)은 무엇입니까? ';'로 설정되어 있습니까? 후자의 경우, 별도의 SO 질문을하십시오. 하나의 라이너가 아닌 광범위한 코딩이 필요합니다. – Parfait

답변

1

, 나는 시도 및 Excel 자체와 COM을 통해 엑셀 시트와 함께 작동하지 않을 것이다 - 나는 https://github.com/dfinke/ImportExcel

그런 다음 당신이 바로 네이티브 파워 쉘 객체 배열에 시트에서 가져올 수있는 우수한 모듈을 사용하는 것, 그리고 Export-Csv -Delimiter를 사용하여 다시 내보내기하십시오.

편집 : 후속 업에 응답하려면 :

당신은 당신이 할 수있는 모듈을로드하면

"GET-모듈 ImportExcel을 | 선택 - 개체 -ExpandProperty의 ExportedCommands"는 사용할 수 있도록 무엇을 볼 수 있습니다. 같은

가 처음에 엑셀을 가져 오려면 않습니다 : 중복 열 이름을 돌볼 필요가있는 경우

$WorkBook = Import-Excel 

은, 당신은 할 수 있습니다 :

$WorkBook = Import-Excel -Header @("Regio1", "Regio2", "Regio") 

어디에 배열 당신은 합격에서 원하는 모든 칼럼을 모두 포함해야합니다.

+0

빠른 대답에 감사 드리며, 나는 ImportExcel Module이 훌륭하다고 생각합니다. 프로그래밍에 익숙하지 않으며 모듈을 통한 안내서가없는 것 같습니다. 나는 어딘가에서 사용할 수있는 명령을 설명하거나 질문을하기위한 포럼을 (누락 된 userfriendly 업데이 트 Readme 떨어져) 가이드가 누락 되었습니까? –

관련 문제