simple-spreadsheet 0.1.1 → 0.2.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.
- data/.gitignore +2 -1
- data/.travis.yml +5 -0
- data/Gemfile.lock +10 -33
- data/README.md +15 -1
- data/lib/simple-spreadsheet.rb +51 -46
- data/lib/simple-spreadsheet/classes/csv_extended.rb +9 -62
- data/lib/simple-spreadsheet/classes/csvt_extended.rb +9 -3
- data/lib/simple-spreadsheet/classes/csvx_extended.rb +9 -3
- data/lib/simple-spreadsheet/classes/excel_extended.rb +35 -35
- data/lib/simple-spreadsheet/classes/excelx_extended.rb +117 -0
- data/lib/simple-spreadsheet/readers/csv_reader.rb +4 -0
- data/lib/simple-spreadsheet/readers/csvt_reader.rb +4 -0
- data/lib/simple-spreadsheet/readers/csvx_reader.rb +4 -0
- data/lib/simple-spreadsheet/readers/excel_reader.rb +4 -0
- data/lib/simple-spreadsheet/readers/excelx_reader.rb +5 -1
- data/lib/simple-spreadsheet/readers/openoffice_reader.rb +3 -3
- data/lib/simple-spreadsheet/version.rb +1 -1
- data/simple-spreadsheet.gemspec +2 -2
- data/spec/simple-spreadsheet_csv_spec.rb +7 -0
- data/spec/simple-spreadsheet_csvt_spec.rb +7 -0
- data/spec/simple-spreadsheet_csvx_spec.rb +7 -0
- data/spec/simple-spreadsheet_xls_spec.rb +8 -0
- data/spec/simple-spreadsheet_xlsx_spec.rb +7 -0
- metadata +7 -4
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,44 +1,23 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simple-spreadsheet (0.1.
|
5
|
-
roo (= 1.
|
4
|
+
simple-spreadsheet (0.1.5)
|
5
|
+
roo (= 1.11.2)
|
6
6
|
rubyXL (= 1.2.5)
|
7
7
|
spreadsheet (= 0.6.5.9)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: http://rubygems.org/
|
11
11
|
specs:
|
12
|
-
choice (0.1.6)
|
13
12
|
diff-lcs (1.1.3)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
google_drive (>= 0.3.0)
|
18
|
-
google_drive (0.3.0)
|
19
|
-
nokogiri (>= 1.4.4, != 1.5.2, != 1.5.1)
|
20
|
-
oauth (>= 0.3.6)
|
21
|
-
oauth2 (>= 0.5.0)
|
22
|
-
httpauth (0.1)
|
23
|
-
log4r (1.1.10)
|
24
|
-
multi_json (1.3.6)
|
25
|
-
multipart-post (1.1.5)
|
26
|
-
nokogiri (1.5.4)
|
27
|
-
oauth (0.4.6)
|
28
|
-
oauth2 (0.7.1)
|
29
|
-
faraday (~> 0.8)
|
30
|
-
httpauth (~> 0.1)
|
31
|
-
multi_json (~> 1.0)
|
32
|
-
rack (~> 1.4)
|
33
|
-
rack (1.4.1)
|
13
|
+
mini_portile (0.5.1)
|
14
|
+
nokogiri (1.6.0)
|
15
|
+
mini_portile (~> 0.5.0)
|
34
16
|
rake (0.9.2.2)
|
35
|
-
roo (1.
|
36
|
-
|
37
|
-
|
38
|
-
nokogiri (>= 1.5.0)
|
39
|
-
rubyzip (>= 0.9.4)
|
17
|
+
roo (1.11.2)
|
18
|
+
nokogiri
|
19
|
+
rubyzip
|
40
20
|
spreadsheet (> 0.6.4)
|
41
|
-
todonotes (>= 0.1.0)
|
42
21
|
rspec (2.6.0)
|
43
22
|
rspec-core (~> 2.6.0)
|
44
23
|
rspec-expectations (~> 2.6.0)
|
@@ -47,13 +26,11 @@ GEM
|
|
47
26
|
rspec-expectations (2.6.0)
|
48
27
|
diff-lcs (~> 1.1.2)
|
49
28
|
rspec-mocks (2.6.0)
|
50
|
-
ruby-ole (1.2.11.
|
29
|
+
ruby-ole (1.2.11.7)
|
51
30
|
rubyXL (1.2.5)
|
52
|
-
rubyzip (0.9.
|
31
|
+
rubyzip (0.9.9)
|
53
32
|
spreadsheet (0.6.5.9)
|
54
33
|
ruby-ole (>= 1.0)
|
55
|
-
todonotes (0.1.0)
|
56
|
-
log4r
|
57
34
|
|
58
35
|
PLATFORMS
|
59
36
|
ruby
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Simple Spreadsheet
|
1
|
+
# Simple Spreadsheet [](http://travis-ci.org/zenkay/simple-spreadsheet)
|
2
2
|
|
3
3
|
Recently I wrote a module to import raw data from Excel-like files to database and export it in various formats. To accomplish this i have to use different gems with different usage patterns so I decide to wrap them in a single simple gem. This is a spreadsheet reader and writer that (will) supports common formats: CSV (.csv), Excel (.xls, .xlsx), Open-office (.ods) and Google (online).
|
4
4
|
|
@@ -34,6 +34,7 @@ Supported formats:
|
|
34
34
|
|
35
35
|
<table>
|
36
36
|
<tr>
|
37
|
+
<th></th>
|
37
38
|
<th>Excel (.xls)</th>
|
38
39
|
<th>Excelx (.xlsx)</th>
|
39
40
|
<th>Openoffice (.ods)</th>
|
@@ -42,6 +43,7 @@ Supported formats:
|
|
42
43
|
<th>CSV Tab Separated</th>
|
43
44
|
</tr>
|
44
45
|
<tr>
|
46
|
+
<td>Reading whole file</td>
|
45
47
|
<td>Yes</td>
|
46
48
|
<td>Yes</td>
|
47
49
|
<td>Yes</td>
|
@@ -49,6 +51,15 @@ Supported formats:
|
|
49
51
|
<td>Yes</td>
|
50
52
|
<td>Yes</td>
|
51
53
|
</tr>
|
54
|
+
<tr>
|
55
|
+
<td>Reading line by line</td>
|
56
|
+
<td>Yes</td>
|
57
|
+
<td>-</td>
|
58
|
+
<td>-</td>
|
59
|
+
<td>Yes</td>
|
60
|
+
<td>Yes</td>
|
61
|
+
<td>Yes</td>
|
62
|
+
</tr>
|
52
63
|
</table>
|
53
64
|
|
54
65
|
|
@@ -92,7 +103,10 @@ s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.csv", ".csvx")
|
|
92
103
|
```ruby
|
93
104
|
require "simple-spreadsheet"
|
94
105
|
|
106
|
+
# specify format
|
95
107
|
s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.csv", ".csvt")
|
108
|
+
# use .tsv
|
109
|
+
s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.tsv")
|
96
110
|
```
|
97
111
|
|
98
112
|
## Future plans
|
data/lib/simple-spreadsheet.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require "simple-spreadsheet/version"
|
2
|
+
require 'roo'
|
2
3
|
|
3
4
|
module SimpleSpreadsheet
|
4
|
-
|
5
|
+
|
5
6
|
require 'simple-spreadsheet/modules/roo_module'
|
6
|
-
|
7
|
+
|
7
8
|
class Workbook
|
8
|
-
|
9
|
+
|
9
10
|
def self.read(file, ext = nil)
|
10
11
|
ext = File.extname(file) if ext.nil?
|
11
12
|
case ext
|
@@ -19,60 +20,61 @@ module SimpleSpreadsheet
|
|
19
20
|
return CsvReader.new(file)
|
20
21
|
when '.csvx'
|
21
22
|
return CsvxReader.new(file)
|
22
|
-
when '.csvt'
|
23
|
+
when '.csvt', '.tsv'
|
23
24
|
return CsvtReader.new(file)
|
24
25
|
else
|
25
26
|
return nil
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
|
-
def self.edit(file, ext = nil)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
30
|
+
# def self.edit(file, ext = nil)
|
31
|
+
# ext = File.extname(file) if ext.nil?
|
32
|
+
# case ext
|
33
|
+
# when '.xls'
|
34
|
+
# ExcelEditor.new(file)
|
35
|
+
# when '.xlsx'
|
36
|
+
# ExcelxEditor.new(file)
|
37
|
+
# when '.ods'
|
38
|
+
# OpenofficeEditor.new(file)
|
39
|
+
# when '.csv'
|
40
|
+
# CsvEditor.new(file)
|
41
|
+
# when '.csvz'
|
42
|
+
# return CsvzEditor.new(file)
|
43
|
+
# when '.csvt'
|
44
|
+
# return CsvtEditor.new(file)
|
45
|
+
# else
|
46
|
+
# return nil
|
47
|
+
# end
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# def self.write(file, ext = nil)
|
51
|
+
# ext = File.extname(file) if ext.nil?
|
52
|
+
# case ext
|
53
|
+
# when '.xls'
|
54
|
+
# ExcelWriter.new(file)
|
55
|
+
# when '.xlsx'
|
56
|
+
# ExcelxWriter.new(file)
|
57
|
+
# when '.ods'
|
58
|
+
# OpenofficeWriter.new(file)
|
59
|
+
# when '.csv'
|
60
|
+
# CsvWriter.new(file)
|
61
|
+
# when '.csvz'
|
62
|
+
# return CsvzWriter.new(file)
|
63
|
+
# when '.csvt'
|
64
|
+
# return CsvtWriter.new(file)
|
65
|
+
# else
|
66
|
+
# return nil
|
67
|
+
# end
|
68
|
+
# end
|
48
69
|
|
49
|
-
def self.write(file, ext = nil)
|
50
|
-
ext = File.extname(file) if ext.nil?
|
51
|
-
case ext
|
52
|
-
when '.xls'
|
53
|
-
ExcelWriter.new(file)
|
54
|
-
when '.xlsx'
|
55
|
-
ExcelxWriter.new(file)
|
56
|
-
when '.ods'
|
57
|
-
OpenofficeWriter.new(file)
|
58
|
-
when '.csv'
|
59
|
-
CsvWriter.new(file)
|
60
|
-
when '.csvz'
|
61
|
-
return CsvzWriter.new(file)
|
62
|
-
when '.csvt'
|
63
|
-
return CsvtWriter.new(file)
|
64
|
-
else
|
65
|
-
return nil
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
70
|
end
|
70
|
-
|
71
|
+
|
71
72
|
# General
|
72
73
|
require 'simple-spreadsheet/generic_sheet'
|
73
74
|
|
74
75
|
# Extendend classes
|
75
76
|
require 'simple-spreadsheet/classes/excel_extended'
|
77
|
+
require 'simple-spreadsheet/classes/excelx_extended'
|
76
78
|
require 'simple-spreadsheet/classes/csv_extended'
|
77
79
|
require 'simple-spreadsheet/classes/csvx_extended'
|
78
80
|
require 'simple-spreadsheet/classes/csvt_extended'
|
@@ -107,10 +109,13 @@ module SimpleSpreadsheet
|
|
107
109
|
|
108
110
|
# .csvt (CSV)
|
109
111
|
require 'simple-spreadsheet/readers/csvt_reader'
|
110
|
-
|
112
|
+
|
111
113
|
end
|
112
114
|
|
113
115
|
# Gems
|
114
116
|
require 'roo'
|
115
|
-
|
117
|
+
|
118
|
+
if RUBY_VERSION < '1.9'
|
119
|
+
require 'iconv'
|
120
|
+
end
|
116
121
|
|
@@ -1,64 +1,11 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class CsvExtended < Roo::Csv
|
2
|
+
|
3
|
+
def foreach(sheet = nil, &block)
|
4
|
+
index = 1
|
5
|
+
CSV.foreach(@filename, col_sep: ",") do |row|
|
6
|
+
yield(row, index)
|
7
|
+
index += 1
|
8
|
+
end
|
9
|
+
end
|
3
10
|
|
4
|
-
class CsvExtended < Csv
|
5
|
-
# def read_cells(sheet=nil)
|
6
|
-
# sheet = @default_sheet unless sheet
|
7
|
-
# @cell_type = {} unless @cell_type
|
8
|
-
# @cell = {} unless @cell
|
9
|
-
# @first_row[sheet] = 1
|
10
|
-
# @last_row[sheet] = 0
|
11
|
-
# @first_column[sheet] = 1
|
12
|
-
# @last_column[sheet] = 1
|
13
|
-
# rownum = 1
|
14
|
-
# CSV.foreach(@filename) do |row|
|
15
|
-
# row.each_with_index do |elem,i|
|
16
|
-
# @cell[[rownum,i+1]] = cell_postprocessing rownum,i+1, elem
|
17
|
-
# @cell_type[[rownum,i+1]] = celltype_class @cell[[rownum,i+1]]
|
18
|
-
# if i+1 > @last_column[sheet]
|
19
|
-
# @last_column[sheet] += 1
|
20
|
-
# end
|
21
|
-
# end
|
22
|
-
# rownum += 1
|
23
|
-
# @last_row[sheet] += 1
|
24
|
-
# end
|
25
|
-
# @cells_read[sheet] = true
|
26
|
-
# #-- adjust @first_row if neccessary
|
27
|
-
# loop do
|
28
|
-
# if !row(@first_row[sheet]).any? and @first_row[sheet] < @last_row[sheet]
|
29
|
-
# @first_row[sheet] += 1
|
30
|
-
# else
|
31
|
-
# break
|
32
|
-
# end
|
33
|
-
# end
|
34
|
-
# #-- adjust @last_row if neccessary
|
35
|
-
# loop do
|
36
|
-
# if !row(@last_row[sheet]).any? and @last_row[sheet] and
|
37
|
-
# @last_row[sheet] > @first_row[sheet]
|
38
|
-
# @last_row[sheet] -= 1
|
39
|
-
# else
|
40
|
-
# break
|
41
|
-
# end
|
42
|
-
# end
|
43
|
-
# #-- adjust @first_column if neccessary
|
44
|
-
# loop do
|
45
|
-
# if !column(@first_column[sheet]).any? and
|
46
|
-
# @first_column[sheet] and
|
47
|
-
# @first_column[sheet] < @last_column[sheet]
|
48
|
-
# @first_column[sheet] += 1
|
49
|
-
# else
|
50
|
-
# break
|
51
|
-
# end
|
52
|
-
# end
|
53
|
-
# #-- adjust @last_column if neccessary
|
54
|
-
# loop do
|
55
|
-
# if !column(@last_column[sheet]).any? and
|
56
|
-
# @last_column[sheet] and
|
57
|
-
# @last_column[sheet] > @first_column[sheet]
|
58
|
-
# @last_column[sheet] -= 1
|
59
|
-
# else
|
60
|
-
# break
|
61
|
-
# end
|
62
|
-
# end
|
63
|
-
# end
|
64
11
|
end
|
@@ -1,7 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class CsvtExtended < Roo::Csv
|
2
|
+
|
3
|
+
def foreach(sheet = nil, &block)
|
4
|
+
index = 1
|
5
|
+
CSV.foreach(@filename, col_sep: "\t") do |row|
|
6
|
+
yield(row, index)
|
7
|
+
index += 1
|
8
|
+
end
|
9
|
+
end
|
3
10
|
|
4
|
-
class CsvtExtended < Csv
|
5
11
|
def read_cells(sheet=nil)
|
6
12
|
sheet = @default_sheet unless sheet
|
7
13
|
@cell_type = {} unless @cell_type
|
@@ -1,7 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class CsvxExtended < Roo::Csv
|
2
|
+
|
3
|
+
def foreach(sheet = nil, &block)
|
4
|
+
index = 1
|
5
|
+
CSV.foreach(@filename, col_sep: ";") do |row|
|
6
|
+
yield(row, index)
|
7
|
+
index += 1
|
8
|
+
end
|
9
|
+
end
|
3
10
|
|
4
|
-
class CsvxExtended < Csv
|
5
11
|
def read_cells(sheet=nil)
|
6
12
|
sheet = @default_sheet unless sheet
|
7
13
|
@cell_type = {} unless @cell_type
|
@@ -1,37 +1,37 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class ExcelExtended < Roo::Excel
|
2
|
+
|
3
|
+
def foreach(sheet=nil, &block)
|
4
|
+
sheet = @default_sheet unless sheet
|
5
|
+
raise ArgumentError, "Error: sheet '#{sheet||'nil'}' not valid" if @default_sheet == nil and sheet==nil
|
6
|
+
raise RangeError unless self.sheets.include? sheet
|
7
|
+
|
8
|
+
if @cells_read[sheet]
|
9
|
+
raise "sheet #{sheet} already read"
|
10
|
+
end
|
11
|
+
|
12
|
+
worksheet = @workbook.worksheet(sheet_no(sheet))
|
13
|
+
row_index=1
|
14
|
+
worksheet.each(0) do |row|
|
15
|
+
row_content = []
|
16
|
+
(0..row.size).each do |cell_index|
|
17
|
+
cell = row.at(cell_index)
|
18
|
+
next if cell.nil? #skip empty cells
|
19
|
+
next if cell.class == Spreadsheet::Formula && cell.value.nil? # skip empty formula cells
|
20
|
+
if date_or_time?(row, cell_index)
|
21
|
+
vt, v = read_cell_date_or_time(row, cell_index)
|
22
|
+
else
|
23
|
+
vt, v = read_cell(row, cell_index)
|
24
|
+
end
|
25
|
+
formula = tr = nil #TODO:???
|
26
|
+
col_index = cell_index + 1
|
27
|
+
font = row.format(cell_index).font
|
28
|
+
font.extend(ExcelFontExtensions)
|
29
|
+
# set_cell_values(sheet,row_index,col_index,0,v,vt,formula,tr,font)
|
30
|
+
row_content << v
|
31
|
+
end #row
|
32
|
+
yield(row_content, row_index)
|
33
|
+
row_index += 1
|
34
|
+
end # worksheet
|
35
|
+
end
|
3
36
|
|
4
|
-
class ExcelExtended < Excel
|
5
|
-
# def read_cells(sheet=nil)
|
6
|
-
# sheet = @default_sheet unless sheet
|
7
|
-
# raise ArgumentError, "Error: sheet '#{sheet||'nil'}' not valid" if @default_sheet == nil and sheet==nil
|
8
|
-
# raise RangeError unless self.sheets.include? sheet
|
9
|
-
#
|
10
|
-
# if @cells_read[sheet]
|
11
|
-
# raise "sheet #{sheet} already read"
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# worksheet = @workbook.worksheet(sheet_no(sheet))
|
15
|
-
# row_index=1
|
16
|
-
# worksheet.each(0) do |row|
|
17
|
-
# (0..row.size).each do |cell_index|
|
18
|
-
# cell = row.at(cell_index)
|
19
|
-
# next if cell.nil? #skip empty cells
|
20
|
-
# next if cell.class == Spreadsheet::Formula && cell.value.nil? # skip empty formula cells
|
21
|
-
# if date_or_time?(row, cell_index)
|
22
|
-
# vt, v = read_cell_date_or_time(row, cell_index)
|
23
|
-
# else
|
24
|
-
# vt, v = read_cell(row, cell_index)
|
25
|
-
# end
|
26
|
-
# formula = tr = nil #TODO:???
|
27
|
-
# col_index = cell_index + 1
|
28
|
-
# font = row.format(cell_index).font
|
29
|
-
# font.extend(ExcelFontExtensions)
|
30
|
-
# set_cell_values(sheet,row_index,col_index,0,v,vt,formula,tr,font)
|
31
|
-
# end #row
|
32
|
-
# row_index += 1
|
33
|
-
# end # worksheet
|
34
|
-
# @cells_read[sheet] = true
|
35
|
-
# end
|
36
|
-
|
37
37
|
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
class ExcelxExtended < Roo::Excelx
|
2
|
+
|
3
|
+
def foreach(sheet = nil, &block)
|
4
|
+
sheet = @default_sheet unless sheet
|
5
|
+
sheet_found = false
|
6
|
+
raise ArgumentError, "Error: sheet '#{sheet||'nil'}' not valid" if @default_sheet == nil and sheet==nil
|
7
|
+
raise RangeError unless self.sheets.include? sheet
|
8
|
+
n = self.sheets.index(sheet)
|
9
|
+
row_index = 1
|
10
|
+
@sheet_doc[n].xpath("//*[local-name()='c']").each do |c|
|
11
|
+
s_attribute = c['s'].to_i # should be here
|
12
|
+
# c: <c r="A5" s="2">
|
13
|
+
# <v>22606</v>
|
14
|
+
# </c>, format: , tmp_type: float
|
15
|
+
if c['t'] == 's'
|
16
|
+
tmp_type = :shared
|
17
|
+
elsif c['t'] == 'b'
|
18
|
+
tmp_type = :boolean
|
19
|
+
# 2011-02-25 BEGIN
|
20
|
+
elsif c['t'] == 'str'
|
21
|
+
tmp_type = :string
|
22
|
+
# 2011-02-25 END
|
23
|
+
# 2011-09-15 BEGIN
|
24
|
+
elsif c['t'] == 'inlineStr'
|
25
|
+
tmp_type = :inlinestr
|
26
|
+
# 2011-09-15 END
|
27
|
+
else
|
28
|
+
s_attribute = c['s'].to_i
|
29
|
+
format = attribute2format(s_attribute)
|
30
|
+
tmp_type = format2type(format)
|
31
|
+
end
|
32
|
+
formula = nil
|
33
|
+
row_content = []
|
34
|
+
c.children.each do |cell|
|
35
|
+
# 2011-09-15 BEGIN
|
36
|
+
if cell.name == 'is'
|
37
|
+
cell.children.each do |is|
|
38
|
+
if is.name == 't'
|
39
|
+
inlinestr_content = is.content
|
40
|
+
vt = :string
|
41
|
+
str_v = inlinestr_content
|
42
|
+
excelx_type = :string
|
43
|
+
y, x = GenericSpreadsheet.split_coordinate(c['r'])
|
44
|
+
v = nil
|
45
|
+
tr=nil #TODO: ???s
|
46
|
+
excelx_value = inlinestr_content #cell.content
|
47
|
+
# set_cell_values(sheet,x,y,0,v,vt,formula,tr,str_v,excelx_type,excelx_value,s_attribute)
|
48
|
+
puts v
|
49
|
+
row_content << v
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
# 2011-09-15 END
|
54
|
+
if cell.name == 'f'
|
55
|
+
formula = cell.content
|
56
|
+
end
|
57
|
+
if cell.name == 'v'
|
58
|
+
if tmp_type == :time or tmp_type == :datetime
|
59
|
+
if cell.content.to_f >= 1.0
|
60
|
+
if (cell.content.to_f - cell.content.to_f.floor).abs > 0.000001
|
61
|
+
tmp_type = :datetime
|
62
|
+
else
|
63
|
+
tmp_type = :date
|
64
|
+
end
|
65
|
+
else
|
66
|
+
end
|
67
|
+
end
|
68
|
+
excelx_type = [:numeric_or_formula,format.to_s]
|
69
|
+
excelx_value = cell.content
|
70
|
+
if tmp_type == :shared
|
71
|
+
vt = :string
|
72
|
+
str_v = @shared_table[cell.content.to_i]
|
73
|
+
excelx_type = :string
|
74
|
+
elsif tmp_type == :boolean
|
75
|
+
vt = :boolean
|
76
|
+
cell.content.to_i == 1 ? v = 'TRUE' : v = 'FALSE'
|
77
|
+
elsif tmp_type == :date
|
78
|
+
vt = :date
|
79
|
+
v = cell.content
|
80
|
+
elsif tmp_type == :time
|
81
|
+
vt = :time
|
82
|
+
v = cell.content
|
83
|
+
elsif tmp_type == :datetime
|
84
|
+
vt = :datetime
|
85
|
+
v = cell.content
|
86
|
+
elsif tmp_type == :formula
|
87
|
+
vt = :formula
|
88
|
+
v = cell.content.to_f #TODO: !!!!
|
89
|
+
# 2011-02-25 BEGIN
|
90
|
+
elsif tmp_type == :string
|
91
|
+
vt = :string
|
92
|
+
str_v = cell.content
|
93
|
+
excelx_type = :string
|
94
|
+
# 2011-02-25 END
|
95
|
+
else
|
96
|
+
vt = :float
|
97
|
+
v = cell.content
|
98
|
+
end
|
99
|
+
y, x = GenericSpreadsheet.split_coordinate(c['r'])
|
100
|
+
tr=nil #TODO: ???s
|
101
|
+
# set_cell_values(sheet,x,y,0,v,vt,formula,tr,str_v,excelx_type,excelx_value,s_attribute)
|
102
|
+
puts v
|
103
|
+
row_content << v
|
104
|
+
end
|
105
|
+
end
|
106
|
+
yield(row_content, row_index)
|
107
|
+
row_index += 1
|
108
|
+
end
|
109
|
+
sheet_found = true #TODO:
|
110
|
+
if !sheet_found
|
111
|
+
raise RangeError
|
112
|
+
end
|
113
|
+
@cells_read[sheet] = true
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -2,9 +2,13 @@ class ExcelxReader < SpreadsheetReader
|
|
2
2
|
|
3
3
|
def initialize(file)
|
4
4
|
super
|
5
|
-
@engine =
|
5
|
+
@engine = ExcelxExtended.new(file) # Roo
|
6
6
|
end
|
7
7
|
|
8
|
+
def foreach(sheet, &block)
|
9
|
+
@engine.foreach(sheet, &block)
|
10
|
+
end
|
11
|
+
|
8
12
|
include RooModule
|
9
13
|
|
10
14
|
end
|
data/simple-spreadsheet.gemspec
CHANGED
@@ -14,11 +14,11 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.name = "simple-spreadsheet"
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = SimpleSpreadsheet::VERSION
|
17
|
-
|
17
|
+
|
18
18
|
# specify any dependencies here; for example:
|
19
19
|
gem.add_development_dependency "rspec", "~> 2.6.0"
|
20
20
|
gem.add_development_dependency "rake", "~> 0.9.2.2"
|
21
|
-
gem.add_runtime_dependency "roo", "1.
|
21
|
+
gem.add_runtime_dependency "roo", "1.11.2"
|
22
22
|
gem.add_runtime_dependency "spreadsheet", "0.6.5.9"
|
23
23
|
gem.add_runtime_dependency "rubyXL", "1.2.5"
|
24
24
|
end
|
@@ -28,6 +28,13 @@ describe SimpleSpreadsheet do
|
|
28
28
|
it "should correctly count column" do
|
29
29
|
@workbook.last_column.should eq(2)
|
30
30
|
end
|
31
|
+
it "should parse line by line" do
|
32
|
+
@workbook.foreach(@workbook.sheets.first) do |row, index|
|
33
|
+
row[0].should eq("String1")
|
34
|
+
row[1].should eq("1")
|
35
|
+
index.should eq(1)
|
36
|
+
end
|
37
|
+
end
|
31
38
|
end
|
32
39
|
|
33
40
|
end
|
@@ -28,6 +28,13 @@ describe SimpleSpreadsheet do
|
|
28
28
|
it "should correctly count column" do
|
29
29
|
@workbook.last_column.should eq(2)
|
30
30
|
end
|
31
|
+
it "should parse line by line" do
|
32
|
+
@workbook.foreach(@workbook.sheets.first) do |row, index|
|
33
|
+
row[0].should eq("String1")
|
34
|
+
row[1].should eq("1")
|
35
|
+
index.should eq(1)
|
36
|
+
end
|
37
|
+
end
|
31
38
|
end
|
32
39
|
|
33
40
|
end
|
@@ -28,6 +28,13 @@ describe SimpleSpreadsheet do
|
|
28
28
|
it "should correctly count column" do
|
29
29
|
@workbook.last_column.should eq(2)
|
30
30
|
end
|
31
|
+
it "should parse line by line" do
|
32
|
+
@workbook.foreach(@workbook.sheets.first) do |row, index|
|
33
|
+
row[0].should eq("String1")
|
34
|
+
row[1].should eq("1")
|
35
|
+
index.should eq(1)
|
36
|
+
end
|
37
|
+
end
|
31
38
|
end
|
32
39
|
|
33
40
|
end
|
@@ -42,6 +42,14 @@ describe SimpleSpreadsheet do
|
|
42
42
|
it "should correctly count column" do
|
43
43
|
@workbook.last_column.should eq(2)
|
44
44
|
end
|
45
|
+
it "should parse line by line" do
|
46
|
+
@workbook.foreach(@workbook.sheets.first) do |row, index|
|
47
|
+
row[0].should eq("String1")
|
48
|
+
row[1].should eq(1.0)
|
49
|
+
index.should eq(1)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
45
53
|
end
|
46
54
|
|
47
55
|
end
|
@@ -42,6 +42,13 @@ describe SimpleSpreadsheet do
|
|
42
42
|
it "should correctly count column" do
|
43
43
|
@workbook.last_column.should eq(2)
|
44
44
|
end
|
45
|
+
# it "should parse line by line" do
|
46
|
+
# @workbook.foreach(@workbook.sheets.first) do |row, index|
|
47
|
+
# row[0].should eq("String1")
|
48
|
+
# row[1].should eq(1.0)
|
49
|
+
# index.should eq(1)
|
50
|
+
# end
|
51
|
+
# end
|
45
52
|
end
|
46
53
|
|
47
54
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple-spreadsheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-08-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - '='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
53
|
+
version: 1.11.2
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
61
|
+
version: 1.11.2
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: spreadsheet
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,6 +102,7 @@ extra_rdoc_files: []
|
|
102
102
|
files:
|
103
103
|
- .gitignore
|
104
104
|
- .rspec
|
105
|
+
- .travis.yml
|
105
106
|
- Gemfile
|
106
107
|
- Gemfile.lock
|
107
108
|
- README.md
|
@@ -111,6 +112,7 @@ files:
|
|
111
112
|
- lib/simple-spreadsheet/classes/csvt_extended.rb
|
112
113
|
- lib/simple-spreadsheet/classes/csvx_extended.rb
|
113
114
|
- lib/simple-spreadsheet/classes/excel_extended.rb
|
115
|
+
- lib/simple-spreadsheet/classes/excelx_extended.rb
|
114
116
|
- lib/simple-spreadsheet/editors/csv_editor.rb
|
115
117
|
- lib/simple-spreadsheet/editors/excel_editor.rb
|
116
118
|
- lib/simple-spreadsheet/editors/excelx_editor.rb
|
@@ -190,3 +192,4 @@ test_files:
|
|
190
192
|
- spec/simple-spreadsheet_xls_spec.rb
|
191
193
|
- spec/simple-spreadsheet_xlsx_spec.rb
|
192
194
|
- spec/spec_helper.rb
|
195
|
+
has_rdoc:
|