2013-05-29 2 views
1

나는 루비를 사용하여 엑셀 파일을 CSV 파일로 변환하고 있습니다. 그것은 파일에서 우편 번호 후 것을 제외하고 잘 작동루비 엑셀 CSV로 엑셀 추가 .00

#!/usr/bin/ruby 
require 'CSV' 
require 'roo' 

def xls_to_csv(file,temp_filename) 
    if file =~ /\.xlsx$/ 
     excel = Roo::Excelx.new(file) 
    else 
     excel = Roo::Excel.new(file) 
    end 

    output = File.open(temp_filename, "w") 

    1.upto(excel.last_row) do |line| 
     output.write CSV.generate_line excel.row(line) 
    end 
end 

그것은 "0.0"를 추가합니다 : 여기에 내가 그렇게 쓴 기능입니다. 여기에 입력 된 데이터의 예입니다

address state zip code name 
123 Lane TX 78705   John Smith 
456 Lane MS 39564   Smohn Jith 

그리고

.xls 파일 함수를 통해 실행되면, 여기에 CSV 출력입니다 : 당신이 볼 수 있듯이

address,state,zip code,name 
123 Lane,TX,78705.0,John Smith 
456 Lane,MS,39564.0,Smohn Jith 

는 우편 번호가 지금 가지고있는 ".0"뒤에. 어쨌든 이것을 피할 수 있습니까? 감사!

+1

엑셀 문서의 우편 번호 필드에 대한 데이터 유형을 숫자가 아닌 숫자로 변경할 수 있습니까? 십진수 대신 정수? 형식 지정 옵션이 있어야합니다. – Noz

+0

+1 @Cyle. 사람들은 실수로 우편 번호 필드를 숫자로 설정합니다. 왜냐하면 결국 숫자가되기 때문입니다 ... 일종의 선도 0이 사라지고 00000-0000과 같은 복합 우편 번호를 입력해야한다는 것을 알기 전까지는. 대신 우편 번호는 문자열이어야합니다. –

답변

2

Roo는 Excel 셀 유형의 데이터 유형을 사용합니다. 스프레드 시트를 제어하는 ​​경우 셀 유형을 텍스트로 변경하는 것이 좋습니다. 그렇지 않으면 스크립트의 문자열로 변환 할 수 있습니다. 예를 들어, 다음과 같이 로컬로 테스트하지 않았습니다. 잘못되었을 수 있습니다.

1.upto(excel.last_row) do |line| 
    data = excel.row(line) 
    data[2] = data[2].to_s 
    output.write CSV.generate_line data 
end 
+0

예를 들어 스크립트에서 문자열로 변환하는 방법을 보여줄 수 있습니까? – srchulo

+0

예를 들어 답을 편집했습니다. – Blutack

+0

위대한! 완벽하게 작동합니다. 감사합니다 :) – srchulo