/ / Písanie na excel súbory v rubíne pomocou roo gem - ruby, ruby-on-rails-3, excel, tabuľka

Písanie na excel súbory v rubíne pomocou roo gem - ruby, ruby-on-rails-3, excel, tabuľka

Robím analýzu súborov Excel a Excelx pomocou Roo gem. Ale nie som si istý, ako napísať tieto súbory. set_value(row, column, text) metóda nefunguje.

kód

@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

Chybové hlásenie, ktoré dostávam, je

 /.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

odpovede:

4 pre odpoveď č. 1

Môžete skúsiť iný klenot špeciálne pre písanie súborov XLSX:

(všimnite si, že tieto nepisujú Excel 97-2004 non-XML XLS)


3 pre odpoveď č. 2

Žiadne odpovede tu naozaj neodpovedajú na otázku, ako to urobiť s Room, a tak pridám riešenie, ktoré som práve testoval v našej aplikácii.

Roo nedávno pridalo funkčnosť pre úpravu buniek: https://github.com/roo-rb/roo/blob/master/lib/roo/csv.rb#L42

Môžete to použiť takto:

sheet.set_value(1, 5, "TEST", nil) # to set the 1st row, 5th column to the string "TEST"

Poznámky:

  • Posledný argument nil sa vo funkcii nepoužíva, ale nemá žiadne predvolené nastavenia, takže sa to vyžaduje.
  • Toto sa pridáva iba vo verzii 2.7.0.

2 pre odpoveď č. 3

Skúste metódu "set" namiesto metódy "set_value" v objekte Excelx alebo OpenOffice. Viac informácií o API http://rubydoc.info/gems/roo/1.10.1/frames a myslím, že roo gem sa špecializuje na čítanie excelobsah než písanie. Napríklad pomocou metódy nastavenia sa neuloží späť do tabuľkového súboru. Šetria na vyrovnávacej pamäti. Skúste niektoré ďalšie drahokamy pre písanie


2 pre odpoveď № 4

Hodnotu stĺpca môžete nastaviť stlačením reťazca.

sheet.row(0).push "some value"

Nižšie uvedený kód zapisuje do tabuľky

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