2013-05-07 2 views
1

스프레드 시트에서 데이터를 읽고 일부 행을 수정 한 다음 업데이트 된 행/셀을 같은 파일에 써야합니다.SPREADSHEET 루비 보석을 사용하여 스프레드 시트 편집

Ruby 2.0.0에서 스프레드 시트 젬을 사용했습니다.

결과를 같은 파일에 다시 쓸 때 xls을 더 이상 열 수 없습니다. 나는

"파일 형식이 유효하지 않습니다"MS Excel에서

오류가 발생합니다.

업데이트가 다른 파일에 기록 될 때 파일을 열 수 있지만 보호 된보기입니다. 이 문제에 대한 해결책이 있습니까? 그들은 지금 년 주위의 로그에 문제를 했어

require 'rubygems' 
require 'spreadsheet' 

book = Spreadsheet::open('filePath') 
sheet = book.worksheet 0 

## have application logic in here 

book.write('filePath') 
+0

하지 않습니다 [다큐먼트는 (https://github.com/zdavatz/spreadsheet)는 명시 적으로 말한다 : "스프레드 시트 루비 1.8.6, 1.8.7, 1.9.2 지원 , 1.9.3 "? 같은 파일에 쓸 때 경고 메시지가 나옵니까? (스프레드 시트가있는 [ruby-ole'] (https://github.com/aquasync/ruby-ole)에서 비롯된 문제 일 수 있습니다. –

+0

아니요 .... 경고가 없습니다 – user2330585

+0

1.9.3은 어떻게됩니까? –

답변

3

나는이 문제를 몇 번 근무했습니다

다음은 샘플 코드입니다.

첫 번째 문제는 스프레드 시트가 스프레드 시트를로드 할 때 파일을 잠그고 잠글 수없는 유일한 방법은이 코드 블록을 사용하여 닫을 수있는 유일한 방법이 아니라는 것입니다. 그것을 열고 첫 번째 워크 시트를 자체 변수에 저장 한 다음 파일을 닫습니다.

worksheet = nil 
    Spreadsheet.open workbook_name do |inner_book| 
     worksheet = inner_book.worksheet 0 
    end 
worksheet 

모든 워크 시트를 원한다면 비슷한 것을 할 수 있습니다. 파일 열기 닫기/문제 외에도 형식에 따라 워크 시트 내용 캡처에 문제가 있습니다. 나는 내 목적을 위해 다음을 수행하여 내용을 파악하게된다. 이것은 슬프게도 소스 스프레드 시트에서 가질 수있는 서식을 잃게됩니다.

rows = [] 
worksheet.each do |row| 
    rows << row 
end 

자신의 통합 문서/시트를 만들고 행을 반복하여 새로운 시트/책에 추가 할 수 있습니다. 그런 다음 동일한 파일 이름으로 새 책을 저장하십시오.

재미 나 효율은 좋지 않지만 문제를 해결하는 방법입니다. 희망이 도움이되었습니다.

0

파일 확장명을 확인하십시오. 스프레드 시트, writeexcel..etc 보석이 xlsx 파일에서 작동하지 않는 것 같습니다. 시도의 .XLS .xlsx '에하지