`

excell导入导出

    博客分类:
  • RUBY
阅读更多
部分代码:
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
0
1
分享到:
评论
2 楼 小楠人 2017-06-09  
laoguan123 写道
楼主好,使用过一些excel导入导出的工具类,但是发现占据内存和cpu特别大的资源,可否指教一下怎么选择一个好的,节省资源的方法?

1 楼 laoguan123 2017-06-08  
楼主好,使用过一些excel导入导出的工具类,但是发现占据内存和cpu特别大的资源,可否指教一下怎么选择一个好的,节省资源的方法?

相关推荐

Global site tag (gtag.js) - Google Analytics