excel2csv 0.0.1
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.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/README.md +12 -0
- data/Rakefile +22 -0
- data/excel2csv.gemspec +20 -0
- data/lib/excel2csv/version.rb +3 -0
- data/lib/excel2csv.jar +0 -0
- data/lib/excel2csv.rb +74 -0
- data/spec/excel2csv_spec.rb +41 -0
- data/spec/fixtures/basic_types.xls +0 -0
- data/spec/fixtures/basic_types.xlsx +0 -0
- data/spec/spec_helper.rb +5 -0
- metadata +72 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
desc "Build java jar with mvn"
|
6
|
+
task "build-jar" do
|
7
|
+
java_excel2csv_home = "vendor/excel2csv-java"
|
8
|
+
system "cd #{java_excel2csv_home} && mvn clean package"
|
9
|
+
jar = FileList["#{java_excel2csv_home}/target/excel2csv*.jar"].first
|
10
|
+
if File.exist? jar.to_s
|
11
|
+
cp jar, "lib/excel2csv.jar"
|
12
|
+
else
|
13
|
+
raise "Can't find #{vendor/excel2csv-java/target}/excel2csv-x.x.x.jar. Java build is broken?"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run specs"
|
18
|
+
RSpec::Core::RakeTask.new do |t|
|
19
|
+
t.rspec_opts = %w(-fs --color)
|
20
|
+
end
|
21
|
+
|
22
|
+
task :default => :spec
|
data/excel2csv.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/excel2csv/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Yury Korolev"]
|
6
|
+
gem.email = ["yury.korolev@gmail.com"]
|
7
|
+
gem.description = %q{gem for converting Excel files to csv}
|
8
|
+
gem.summary = %q{extract excel worksheets to csv files}
|
9
|
+
gem.homepage = "https://github.com/anjlab/excel2csv-ruby"
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.files.reject! { |fn| fn.include? "vendor/" }
|
14
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
gem.name = "excel2csv"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = Excel2CSV::VERSION
|
18
|
+
|
19
|
+
gem.add_development_dependency "rspec", "<= 2.6"
|
20
|
+
end
|
data/lib/excel2csv.jar
ADDED
Binary file
|
data/lib/excel2csv.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require "excel2csv/version"
|
2
|
+
require "csv"
|
3
|
+
require "tmpdir"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
module Excel2CSV
|
7
|
+
|
8
|
+
class Info
|
9
|
+
attr_accessor :sheets
|
10
|
+
attr_accessor :tmp_dir
|
11
|
+
attr_accessor :working_dir
|
12
|
+
|
13
|
+
def self.read dir, tmp_dir
|
14
|
+
info = Info.new dir, tmp_dir
|
15
|
+
info.read
|
16
|
+
info
|
17
|
+
end
|
18
|
+
|
19
|
+
def read
|
20
|
+
@sheets = Dir["#{@working_dir}/*.csv"].map do |file|
|
21
|
+
{path: file}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def close
|
26
|
+
FileUtils.remove_entry_secure(@tmp_dir, true) if @tmp_dir
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def initialize working_dir, tmp_dir
|
32
|
+
@working_dir = working_dir
|
33
|
+
@tmp_dir = tmp_dir
|
34
|
+
@sheets = []
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
def foreach(path, options = {}, &block)
|
40
|
+
convert(path, options) do |info|
|
41
|
+
CSV.foreach(info.sheets.first[:path], options, &block)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
module_function :foreach
|
46
|
+
|
47
|
+
def read(path, options = {})
|
48
|
+
convert(path, options) do |info|
|
49
|
+
CSV.read(info.sheets.first[:path], options)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
module_function :read
|
54
|
+
|
55
|
+
def convert(path, options = {})
|
56
|
+
begin
|
57
|
+
tmp_dir = Dir.mktmpdir
|
58
|
+
dest_folder = options[:dest_folder] || tmp_dir
|
59
|
+
java_options = options[:java_options] || "-Dfile.encoding=utf8 -Xms512m -Xmx512m -XX:MaxPermSize=256m"
|
60
|
+
`java #{java_options} -jar lib/excel2csv.jar #{path} #{dest_folder}`
|
61
|
+
info = Info.read dest_folder, tmp_dir
|
62
|
+
if block_given?
|
63
|
+
yield info
|
64
|
+
else
|
65
|
+
info
|
66
|
+
end
|
67
|
+
ensure
|
68
|
+
info.close if block_given?
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
module_function :convert
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#encoding: utf-8
|
2
|
+
require 'excel2csv'
|
3
|
+
|
4
|
+
describe Excel2CSV do
|
5
|
+
|
6
|
+
let(:excel) {Excel2CSV}
|
7
|
+
|
8
|
+
it "reads xls files" do
|
9
|
+
data = excel.read "spec/fixtures/basic_types.xls"
|
10
|
+
data[0].should == ["1.00", "2011-12-23 21:00:00 UTC(+0000)", "Hello"]
|
11
|
+
data[1].should == ["2.00", "2011-12-24 21:00:00 UTC(+0000)", "Привет"]
|
12
|
+
data[2].should == ["3.00", "2011-12-25 21:00:00 UTC(+0000)", 'Привет, "я excel!"']
|
13
|
+
end
|
14
|
+
|
15
|
+
it "reads xlsx files" do
|
16
|
+
data = excel.read "spec/fixtures/basic_types.xlsx"
|
17
|
+
data[0].should == ["1.00", "2011-12-23 21:00:00 UTC(+0000)", "Hello"]
|
18
|
+
data[1].should == ["2.00", "2011-12-24 21:00:00 UTC(+0000)", "Привет"]
|
19
|
+
data[2].should == ["3.00", "2011-12-25 21:00:00 UTC(+0000)", 'Привет, "я excel!"']
|
20
|
+
end
|
21
|
+
|
22
|
+
it "iterates rows" do
|
23
|
+
count = 0
|
24
|
+
excel.foreach "spec/fixtures/basic_types.xls" do |row|
|
25
|
+
row.length.should == 3
|
26
|
+
count += 1
|
27
|
+
end
|
28
|
+
count.should == 3
|
29
|
+
end
|
30
|
+
|
31
|
+
it "removes tmp dir after work" do
|
32
|
+
tmp_dir = nil
|
33
|
+
excel.convert "spec/fixtures/basic_types.xlsx" do |info|
|
34
|
+
# puts IO.read(info.sheets.first[:path])
|
35
|
+
tmp_dir = info.tmp_dir
|
36
|
+
end
|
37
|
+
tmp_dir.should_not be_nil
|
38
|
+
Dir.exists?(tmp_dir).should == false
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
Binary file
|
Binary file
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: excel2csv
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Yury Korolev
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70324209188260 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - <=
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.6'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70324209188260
|
25
|
+
description: gem for converting Excel files to csv
|
26
|
+
email:
|
27
|
+
- yury.korolev@gmail.com
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- README.md
|
35
|
+
- Rakefile
|
36
|
+
- excel2csv.gemspec
|
37
|
+
- lib/excel2csv.jar
|
38
|
+
- lib/excel2csv.rb
|
39
|
+
- lib/excel2csv/version.rb
|
40
|
+
- spec/excel2csv_spec.rb
|
41
|
+
- spec/fixtures/basic_types.xls
|
42
|
+
- spec/fixtures/basic_types.xlsx
|
43
|
+
- spec/spec_helper.rb
|
44
|
+
homepage: https://github.com/anjlab/excel2csv-ruby
|
45
|
+
licenses: []
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 1.8.9
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: extract excel worksheets to csv files
|
68
|
+
test_files:
|
69
|
+
- spec/excel2csv_spec.rb
|
70
|
+
- spec/fixtures/basic_types.xls
|
71
|
+
- spec/fixtures/basic_types.xlsx
|
72
|
+
- spec/spec_helper.rb
|