excel-import 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +0 -0
  3. data/lib/excel-import.rb +98 -0
  4. metadata +73 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 903ddcceebd7e53eec30a25b73711895dfd8dea3
4
+ data.tar.gz: df8883fac58e3c74ae754edc154e2b3efd000057
5
+ SHA512:
6
+ metadata.gz: 9e5d948fd22032c93f169bf54d20d21c2a2694bfc5fd781a812cbbd68afc481a5c2b742c78e52cd80a8ca10d762dbc839c69f1ec4ec62d0c9cebc15a486362df
7
+ data.tar.gz: 24782e6c98fbda703451fa24873be5025349357ed43392cd26b9cd9bd504d88360f2846fe4c3f86f2d7d97cb2e7e077973f4c91c312e34b7252be872db5fe6be
data/README.md ADDED
File without changes
@@ -0,0 +1,98 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'roo'
3
+ require 'axlsx'
4
+
5
+ module ExcelImport
6
+ module Base
7
+ extend ActiveSupport::Concern
8
+
9
+ module ClassMethods
10
+ def excel_import(role, options = {})
11
+ fields = options[:fields]
12
+ default = options[:default] || {}
13
+
14
+ class_eval %(
15
+ def self.parse_excel_#{role}(excel_file)
16
+ _excel_import(#{fields}, #{default}, excel_file)
17
+ end
18
+
19
+ def self.import_excel_#{role}(excel_file)
20
+ models = _excel_import(#{fields}, #{default}, excel_file)
21
+ models.each do |model|
22
+ model.save
23
+ end
24
+ models
25
+ end
26
+
27
+ def self.get_excel_#{role}
28
+ _excel_import_generate_sample(#{fields}, #{default})
29
+ end
30
+ )
31
+ end
32
+
33
+ private
34
+ def _excel_import(fields, default, excel_file)
35
+ spreadsheet = ExcelImport::ImportFile.open_spreadsheet(excel_file)
36
+
37
+ models = []
38
+ (2..spreadsheet.last_row).each do |i|
39
+ row = spreadsheet.row(i)
40
+
41
+ params = {}
42
+ fields.each_index do |index|
43
+ data = row[index].is_a?(Float) ? row[index].to_i.to_s : row[index].to_s
44
+ params[fields[index]] = data
45
+ end
46
+ params.merge! default
47
+
48
+ models << self.new(params)
49
+ end
50
+ models
51
+ end
52
+
53
+ def _excel_import_generate_sample(fields, default)
54
+ file = Tempfile.open [self.to_s, '.xlsx']
55
+
56
+ output = Axlsx::Package.new
57
+ output.workbook.add_worksheet(:name => 'sheet') do |sheet|
58
+ field_strs = fields.map do |field|
59
+ I18n.t("activerecord.attributes.#{self.name.downcase}.#{field}")
60
+ end
61
+
62
+ sheet.add_row field_strs
63
+ end
64
+ output.use_shared_strings = true
65
+ output.serialize(file)
66
+ file
67
+ end
68
+ end
69
+ end
70
+
71
+ module ImportFile
72
+ class FormatError < Exception; end
73
+
74
+ def self.open_spreadsheet(file)
75
+ extname = case file
76
+ when ActionDispatch::Http::UploadedFile
77
+ File.extname file.original_filename
78
+ else
79
+ File.extname file
80
+ end
81
+
82
+ case extname
83
+ when '.sxc'
84
+ Roo::Openoffice.new(file.path, nil, :ignore)
85
+ when '.xls'
86
+ Roo::Excel.new(file.path, nil, :ignore)
87
+ when '.xlsx'
88
+ Roo::Excelx.new(file.path, nil, :ignore)
89
+ else
90
+ raise FormatError.new "Unsupported file format #{extname}"
91
+ end
92
+
93
+ end
94
+ end
95
+
96
+ end
97
+
98
+ ActiveRecord::Base.send :include, ExcelImport::Base
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: excel-import
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Men Xu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: roo
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.10.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.10.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: axlsx
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.5
41
+ description: excel import simple example
42
+ email: menxu_work@163.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/excel-import.rb
48
+ - README.md
49
+ homepage: http://rubygems.org/gems/excel-import
50
+ licenses:
51
+ - MIT
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.0.6
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: excel-import
73
+ test_files: []