欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

excell导入导出

程序员文章站 2022-07-12 20:18:57
...
部分代码:
module FileHandle
  extend ActiveSupport::Concern
  #Roo::Spreadsheet 直接读取文件导入
  module ClassMethods
    def import_data(file,current_user)
      imports = { failed: []}
      messages = {color:"#ff0000"}
      unless file.blank?
        orig_name = file.original_filename
        if ".XLSX" == File.extname(orig_name).upcase
          require 'roo'
          @students = []
          path = file.tempfile.path
          workbook = Roo::Spreadsheet.open path
          worksheet = workbook.sheet(0)
          row_no = 1
          worksheet.each_row_streaming(offset: 1, pad_cells: true) do |row|
            row_no += 1
            next if row[0].blank?
            record = {excel_row: row_no, success: true}
            self::IMPORT_COLUMNS.each do |c,i|
              record[c] = row[i]&.value 
            end
            return_student, message = self.save_from_hash(record, current_user)
            @students << return_student
            if return_student.blank?
              record[:success] = false
              record[:message] = message
              imports[:failed] << record 
            end
          end
          if imports == { failed: [] }
            messages[:color] = "#00DD00"
            messages[:detail] = "导入成功"
          end  
        else
          messages[:detail] = "文件格式要求为.xlsx格式。"
        end  
      else
        messages[:detail] = "请上传文件"
      end

      [imports,messages]
    end

   # 使用固定模版文件导出
    def export_data
      file = Spreadsheet.open "#{Rails.root}/public/xls/#{self.table_name}.xls"
      list = file.worksheet  0
      self.all.each_with_index do |r,index|
        self::EXPORT_COLUMN.each do |k,v|
          k = k.to_s
          list[index+1,v] = k.include?('|') ? r.send(k.split('|').first)&.send(k.split('|').last) : r.send(k)
        end
      end
      xls_report = StringIO.new
      file.write xls_report
      return xls_report.string
    end
  end  
end


源码参考:
https://github.com/jamst/tool-node/blob/master/excell_to_email
相关标签: excell