Formatting Excel cell from number to text in rails -
i have made application on have provide feature import records csv , excel file. using roo gem it. record added problem @ time of importing records excel, adds .0 every field number. don't want because have fields enrollment_no, roll_no, contact_no , adds .0 every filed made 23 23.0. had converted these filed varchar in database , want format excel cell number text. solve problem. tell me how format excel cell number string using rails.
here code importing file:
student.rb :
def self.import(file, current_organization_id)   spreadsheet = open_spreadsheet(file)   header = spreadsheet.row(1)   (2..spreadsheet.last_row).each |i|     row = hash[[header, spreadsheet.row(i)].transpose]     record = student.find_by(:organization_id => current_organization_id,:enrollment_no => row["enrollment_no"]) || new     record.organization_id= current_organization_id     record.attributes = row.to_hash.slice(*row.to_hash.keys)     record.save!   end end   def self.open_spreadsheet(file)   case file.extname(file.original_filename)   when ".csv" roo::csv.new(file.path)   when ".xls" roo::excel.new(file.path)   when ".xlsx" roo::excelx.new(file.path)   else raise "unknown file type: #{file.original_filename}"   end end   students_controller.rb :
def import     student.import(params[:file], session[:current_organization_id])     #puts @session[:current_organization_id].inspect     redirect_to students_path, notice: "record imported successfully."   end   new.html.erb :
<%= form_tag import_students_path, multipart: true %>     <%= file_field_tag :file , :required=> true%> <br/>     <%= submit_tag "import" , :class => "btn btn-primary btn-block" %> <% end %>         
i doing similar in application import made easier importing csv.
it seems cell type pretty common problem in roo , there few workaround suggested using regex or char include in cell.
my solution easier:
# student.rb  columns_to_string = ["organization_id", "enrollment_no", "contact_no"] # , on   def self.import(file, current_organization_id)   spreadsheet = open_spreadsheet(file)   header = spreadsheet.row(1)   (2..spreadsheet.last_row).each |i|     row = hash[[header, spreadsheet.row(i)].transpose]     row = clean_for row, columns_to_string     record = student.find_by(:organization_id => current_organization_id,:enrollment_no => row["enrollment_no"]) || new     record.organization_id= current_organization_id     record.attributes = row.to_hash.slice(*row.to_hash.keys)     record.save!   end end  def self.clean_for row_as_hash, string_columns_array   row_as_hash.each |key, value|     if string_columns_array.include?key       row_as_hash[key] = value.to_i.to_s     end   end end  def self.open_spreadsheet(file)   case file.extname(file.original_filename)   when ".csv" roo::csv.new(file.path)   when ".xls" roo::excel.new(file.path)   when ".xlsx" roo::excelx.new(file.path)   else raise "unknown file type: #{file.original_filename}"   end end   - get index of columns want format differently
 - convert value imported float integer
 - convert integer string
 
Comments
Post a Comment