Lectura y ahorro de datos de Excel File. Cómo analizar un archivo - método indefinido `to_f 'para # <matray: 0x1579b6a8> -- ruby-on-rails campo con excel campo con import camp Relacionados El problema

Reading and saving data from Excel file- How to parse a file - undefined method `to_f' for #<Array:0x1579b6a8>


1
vote

problema

Español

Siguió un tutorial en RailsCast sobre cómo importar datos de Excel.

Me gustaría leer mi archivo de Excel y decirle qué información leer y guardar indicando la fila para recoger. Así que escribí algo así en mi modelo (.rb) Archivo:

  [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="5a1e4063-dcb8-48b2-93f6-1c60bb7e9e05", element="63dabd48-bd5f-4380-9598-173b91e72367")>]6  

y escribí este código en mi controlador

  [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="5a1e4063-dcb8-48b2-93f6-1c60bb7e9e05", element="63dabd48-bd5f-4380-9598-173b91e72367")>]7  

Tengo el mensaje de error:

  [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="5a1e4063-dcb8-48b2-93f6-1c60bb7e9e05", element="63dabd48-bd5f-4380-9598-173b91e72367")>]8  

Todos mis datos son atributos de flotadores. ¿Por qué tengo este error?

Original en ingles

I followed a tutorial on RailsCast about how to import data from Excel.

I would like to read my excel file and to tell him which information to read and save indicating the row to pick up. So I wrote something like that in my model (.rb) file:

def self.to_csv(options = {})   CSV.generate(options) do |csv|     csv<<column_names     all.each do |repartition|       csv<<repartition.attributes.values_at(*column_names)     end   end end  def self.import(file)   #Ouverture du fichier   spreadsheet = open_spreadsheet(file)    #Lecture du fichier, lignes par lignes, en aveugle    (1..spreadsheet.last_row).each do |i|     @repartition=Repartition.new    @repartition.fond_repartition_id=spreadsheet.row(4)     @repartition.date_repartition=spreadsheet.row(3)     @repartition.AssetAllocCash=spreadsheet.row(5)     @repartition.AssetAllocEquity=spreadsheet.row(6)     @repartition.AssetAllocBond=spreadsheet.row(7)     @repartition.AssetAllocOther=spreadsheet.row(8)   #Sauvegarde de la ligne qui vient d'xc3xaatre lu     repartition.save!   #Depart prochaine ligne ou fin   end end   def self.open_spreadsheet(file)   case File.extname(file.original_filename)   when ".csv" then Roo::Csv.new(file.path, options={})   when ".xls" then Roo::Excel.new(file.path, options={})   when ".xlsx" then Roo::Excelx.new(file.path, options={})   else raise "Unknown file type: #{file.original_filename}"   end end 

And I wrote this code in my controller

def import   Repartition.import(params[:file])   redirect_to upload_path, notice: "Rxc3xa9partition effectuxc3xa9e avec succxc3xa8s" end 

I have the error message :

NoMethodError in RepartitionsController#import undefined method `to_f' for #<Array:0x1579b6a8> 

All my data are float attributes. Why do I have this error ?

        
         
         

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

Esto es lo que funcionó para mí. Para analizar mi archivo de Excel, hice los siguientes pasos.

Estoy usando la gema Roo. Así que en mi gemfile es la línea:

  gem 'roo', '~>2.1.0'   

Luego corrí la línea de comandos:

  bundle install   

en mi controlador:

    def import      Repartition.import(params[:file])      redirect_to resultat_path, notice: "Répartition effectuée avec succès"    end  

luego en mi modelo:

    def self.open_file(file)     case File.extname(file.original_filename)     when ".csv" then Roo::Csv.new(file.path, options={})     when ".xls" then Roo::Excel.new(file.path, options={})     when ".xlsx" then Roo::Excelx.new(file.path, options={})     else raise "Unknown file type: #{file.original_filename}"     end    end        def self.import(file_path)     #Ouverture du fichier     file = open_file(file_path)     #Lecture du fichier     (1..file.last_row).each do |i|      row = file.row(i)        @repartition=Repartition.new      @repartition.fond_repartition_id=row[4]       @repartition.date_repartition=row[3]        @repartition.save!      end    end   

Luego, para llamar al método, en la página web en la que quiero interactuar, escribí esto:

  <%= form_tag import_repartitions_path, multipart: true do %>   <%= file_field_tag :file %>   <%= submit_tag "Importer", class: "btn btn-primary" %>  <% end %>  

El error fue que olvidé escribir (en primer lugar)

  row = file.row(i)   

Entonces, lo que intenté leer tenía el nombre incorrecto. En el esquema de mi base de datos, había migrado mi tabla con el atributo "date_repartitio" en lugar de "date_repartitio n " Y el error to_f estaba diciendo que en lugar de leer "date_repartition", que es un flotador (no un datécime que sé), estaba leyendo "date_repartitio" que en realidad no hay nada existente.

Pero con esto todavía no tengo el código para evitar crear una entidad cada vez que ejecuto el método de importación.

 

This is what worked for me. To parse my excel file I did the following steps.

I am using the gem roo. So in my GemFile is the line:

gem 'roo', '~>2.1.0' 

Then I ran the command line:

bundle install 

In my controller :

  def import      Repartition.import(params[:file])      redirect_to resultat_path, notice: "Rxc3xa9partition effectuxc3xa9e avec succxc3xa8s"    end

Then in my model:

  def self.open_file(file)     case File.extname(file.original_filename)     when ".csv" then Roo::Csv.new(file.path, options={})     when ".xls" then Roo::Excel.new(file.path, options={})     when ".xlsx" then Roo::Excelx.new(file.path, options={})     else raise "Unknown file type: #{file.original_filename}"     end    end        def self.import(file_path)     #Ouverture du fichier     file = open_file(file_path)     #Lecture du fichier     (1..file.last_row).each do |i|      row = file.row(i)        @repartition=Repartition.new      @repartition.fond_repartition_id=row[4]       @repartition.date_repartition=row[3]        @repartition.save!      end    end

Then to call the method, on the web page on which I want to interact, I wrote this:

<%= form_tag import_repartitions_path, multipart: true do %>   <%= file_field_tag :file %>   <%= submit_tag "Importer", class: "btn btn-primary" %>  <% end %>

The mistake was that I forgot to write (first of all)

row = file.row(i) 

Then what I tried to read had the wrong name. In the schema of my database I had migrate my table with attribute "date_repartitio" instead of "date_repartition" And the error to_f was saying that instead of reading "date_repartition" which is a float (not a datetime I know) it was reading "date_repartitio" which is actually nothing existing.

But with this I do not yet have the code to avoid creating an entity each time I run the import method.

 
 

Relacionados problema

0  Cómo importar clase usando SPIRCE  ( How to import class using sparkr ) 
Tengo una clase con diferentes funciones. Quiero importar la clase y usar sus funciones en otra clase diferente. Tengo esto implementado en Rstudio como "Stud...

1  OpenOffice.org Import CSV con Java  ( Openoffice org import csv with java ) 
¿Cómo importan un archivo CSV usando OpenOffice.org API? Quiero hacer esto utilizando la misma funcionalidad que también se proporciona cuando abro el mismo a...

1  Importación de GPARes apropiados  ( Appropriate gpars import ) 
¿Es apropiado usar solo la siguiente importación? import groovyx.gpars.* para que pueda hacer: import groovyx.gpars.* GParsPool.withPool { list ...

1  La tarea nant que se ejecuta "SVN Import" falla  ( Nant task running svn import fails ) 
Me gustaría importar un producto de compilación a la subversión en una tarea de construcción de Nant. Pero falla por mí. Los siguientes funcionan bien para ...

9  Eliminar etiquetas variables adjuntas con funciones de importación extranjeras / hmisc SPSS  ( Remove variable labels attached with foreign hmisc spss import functions ) 
Como de costumbre, obtuve un archivo SPSS que he importado en R con spss.get FUNCIÓN DE Hmisc Paquete . Me molesta con labelled CLASE QUE Hmisc::spss.ge...

1  Photoshop CS6 Image Import  ( Photoshop cs6 image import ) 
No se pudo colocar el documento 'geniusbutton_1only_.png' porque el módulo de formato de archivo no puede analizar el archivo. Necesito saber cómo solucionar ...

387  ¿Cuál es la diferencia entre #IMPORT y # INCLUSIÓN EN EL OBJETIVO-C?  ( What is the difference between import and include in objective c ) 
¿Cuáles son las diferencias entre #IMPORT y # INCLUSIONES EN EL OBJETIVO-C y hay veces en el que debe usar uno sobre el otro? ¿Está uno desaprobado? Estaba ...

0  Excel, Oledb, y los ceros principales  ( Excel oledb and leading zeros ) 
Tengo un proceso que el uso de OLEDB lee los datos de un archivo de Excel a un conjunto de datos. Todo estaba funcionando bien hasta que comencé a ver los dat...

445  ¿Por qué está usando una tarjeta Wild con una declaración de importación de Java?  ( Why is using a wild card with a java import statement bad ) 
Es mucho más conveniente y más limpio para usar una sola declaración como import java.awt.*; que para importar un montón de clases individuales impo...

107  Importar archivo CSV a la estructura de datos totalmente escrita en .NET [CERRADO]  ( Import csv file to strongly typed data structure in net ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos