2011-09-12 17 views
5

नीचे कोड के रूप में यह पहली बार मैं इसे चलाने चाहिए काम करता है:रूबी मणि "स्प्रेडशीट" में फ़ाइलों को कैसे बंद करें?

require 'rubygems' 
require 'spreadsheet' 
book = Spreadsheet.open '/Users/me/myruby/Mywks.xls' 
sheet = book.worksheet 0 
row = sheet.row(1) 
puts row[1] 
book.write '/Users/me/myruby/Mywks.xls' 

जब मैं इसे फिर से चलाने मैं की तरह अधिक संदेश मिलता है:

/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:1149:in `setup': undefined method `read' for false:FalseClass (NoMethodError) 
    from /Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:121:in `read' 

यह मैं करने के लिए सुझाव वहाँ के साथ एक समस्या है या तो: 1. एक्सेल स्प्रैडशीट का समापन या 2. उसी स्प्रैडशीट पर वापस लिखना मैंने खोला।

  1. स्प्रेडशीट बंद करने के बारे में रूबी मणि स्प्रेडशीट दस्तावेज़ में कुछ भी नहीं है। उपरोक्त के रूप में "book.write" कथन में उदाहरण समाप्त होते हैं, यदि कुछ भी हो। मेरी खोज यहां और कहीं और स्प्रेडशीट में xls फ़ाइल को बंद करने के लिए कुछ भी नहीं बदल गया।
  2. स्प्रेडशीट दस्तावेज सुझाव देते हैं कि आप एक ही फाइल पर वापस लिख सकते हैं लेकिन सुझाव देते हैं कि आपको नहीं करना चाहिए। क्या यह समस्या यहाँ है? यदि ऐसा है तो क्या मैं एक अस्थायी wks को लिखता हूं और फिर इसका नाम बदलता हूं?
+0

कौन सी लाइन अपवाद को ट्रिगर करती है? –

+1

@AndrewGrimm जाहिर है यह लाइन 3 है, "book = spreadsheet.open" शुरू करें। – Roy

+0

मैंने नीचे दिए गए कोड को जोड़ने का प्रयास किया लेकिन यह काम नहीं किया। उपरोक्त के समान सटीक परिणाम। afile = file.open ("/ उपयोगकर्ता/royclymer/myruby/साप्ताहिक Total.xls") afile.close मैं इस टिप्पणी में उपरोक्त कोड को प्रारूपित करने का तरीका नहीं समझ सकता। – Roy

उत्तर

9

ब्लॉक सिंटेक्स के उपयोग का प्रयास करें, यह मेरे लिए काम करने के लिए लगता है:

Spreadsheet.open '/Users/me/myruby/Mywks.xls' do |book| 
    sheet = book.worksheet 0 
    # book should be closed when the block exits 
end 
+0

मैं इस पर एक से अधिक बार वोट क्यों नहीं दे सकता! लोगों को एक ही मुद्दे के साथ यहां लाने के प्रयोजनों के लिए, मुझे कुछ कीवर्ड चारों ओर फेंकने दें: आप में से उनमें से अपलोड किए गए एक्सेल फ़ाइल को पढ़ने/लिखने के लिए फ़ाइलों और स्प्रेडशीट को अपलोड करने के लिए कैरियरवेव का उपयोग करने का प्रयास करें, कृपया ध्यान दें कि WIndows मशीनों के लिए आपको बंद करना होगा एक्सेल फ़ाइल को हटाने/कॉपी करने की कोशिश करने से पहले स्प्रेडशीट विंडोज़ फ़ाइल को लॉक करता है और "एरर्नो :: ईएसीसीईएस (अनुमति अस्वीकृत" त्रुटि देगा। उपरोक्त इसे ठीक करता है! –

0

आप फ़ाइल manualy बंद कर सकते हैं: 1) कहीं इस कोड जोड़ें:

module Spreadsheet 
    class Workbook 
    attr_accessor :io 
    end 
end 

2) बस फोन

@book.io.close 

फ़ाइल बंद करने के लिए

संबंधित मुद्दे