excel-import 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []