मैं रू मणि का उपयोग कर एक्सेल और एक्सेलक्स फ़ाइल को पार्स कर रहा हूं। लेकिन मुझे यकीन नहीं है कि उन फ़ाइलों में कैसे लिखना है। set_value(row, column, text)
विधि काम नहीं कर रही है।
कोड
@oo = Excelx.new("tes.xlsx")
@oo.default_sheet = @oo.sheets.first
def return_column
keywords = ["website", "url"]
keywords.each do |keyword|
1.upto(@oo.last_column) do |n|
data = @oo.cell(1, n)
return n if data.downcase=~/#{keyword}/i
end
end
end
def return_rows
n = return_n
2.upto(@oo.last_row) do |row|
data = @oo.cell(row, n)
stack << data
end
end
def appender
@oo.set_value(1,11, "hey")
end
appender
त्रुटि संदेश मैं मिल रहा हूँ
/.rvm/gems/ruby-1.8.7-p352/gems/roo-1.10.1/lib/roo/generic_spreadsheet.rb:441:in `method_missing": private method `set_value" called for #<Excelx:0x101221f08> (NoMethodError)
from /Users/bhushan/.rvm/gems/ruby-1.8.7-p352/gems/roo-1.10.1/lib/roo/excelx.rb:168:in `method_missing"
from parser.rb:32:in `appender"
from parser.rb:35
उत्तर:
उत्तर № 1 के लिए 4आप XLSX फ़ाइलों को लिखने के लिए विशेष रूप से एक और मणि कोशिश कर सकते हैं:
(ध्यान दें कि ये एक्सेल 97-2004 गैर-एक्सएमएल एक्सएलएस नहीं लिखते हैं)
जवाब के लिए 3 № 2
यहां कोई जवाब वास्तव में रू के साथ ऐसा करने के सवाल का उत्तर नहीं देता है, इसलिए मैं उस समाधान को जोड़ूंगा जिसे मैंने अभी हमारे ऐप में परीक्षण किया था।
रू ने हाल ही में कोशिकाओं को संपादित करने के लिए कार्यक्षमता जोड़ा: https://github.com/roo-rb/roo/blob/master/lib/roo/csv.rb#L42
आप इसे इस तरह इस्तेमाल कर सकते हैं:
sheet.set_value(1, 5, "TEST", nil) # to set the 1st row, 5th column to the string "TEST"
टिप्पणियाँ:
- अंतिम तर्क
nil
फ़ंक्शन में उपयोग नहीं किया जाता है लेकिन इसमें कोई डिफ़ॉल्ट नहीं है, इसलिए इसकी आवश्यकता है। - यह केवल संस्करण 2.7.0 में जोड़ा गया है।
जवाब के लिए 2 № 3
Excelx या OpenOffice ऑब्जेक्ट में "set_value" विधि के बजाय "सेट" विधि आज़माएं। अधिक संदर्भ API के लिए http://rubydoc.info/gems/roo/1.10.1/frames और मुझे लगता है कि रू मणि एक्सेल पढ़ने में माहिर हैंलेखन से सामग्री। उदाहरण के लिए सेट विधि का उपयोग स्प्रेडशीट फ़ाइल पर वापस नहीं सहेजा जाएगा। यह मुझे लगता है कि बफर पर बचाता है। लेखन के लिए कुछ अन्य रत्नों का प्रयास करें
जवाब के लिए 2 № 4
आप इसमें एक स्ट्रिंग दबाकर कॉलम का मान सेट कर सकते हैं।
sheet.row(0).push "some value"
नीचे दिया गया कोड एक स्प्रेडशीट को लिखता है
require "spreadsheet"
class Util::Table < ActiveRecord::Migration
def self.create_import_template
# create an xls workbook template for data importing based on models in activerecord
@format = Spreadsheet::Format.new(:weight => :bold)
@template_folder = File.join(Dir.home, "Dropbox", "horizon", "data", "templates")
@template_file = File.join(@template_folder, "data_import_template_#{Time.now.round(3).to_s.chomp(" -0700").gsub(":","-").gsub(" ","_").chop.chop.chop}.xls")
@book = Spreadsheet::Workbook.new
ActiveRecord::Base.send(:subclasses).each {|model| add_worksheet_to_template(model)}
@book.write @template_file
end
def self.add_worksheet_to_template(model)
# create a tab for each model that you wish to import data into
write_sheet = @book.create_worksheet :name => model
write_sheet.row(0).set_format(0, @format)
model.columns.each_with_index do |c,i|
column = ""
column << "*" unless c.null # indicate required field
column << c.name
write_sheet.row(0).set_format(i+1, @format)
write_sheet.row(0).push column
end
end
end