sheets 0.9.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sheets/parsers/roo_parser.rb +1 -0
- data/lib/sheets/parsers/roo_patches.rb +5 -0
- data/lib/sheets/parsers/roo_patches/roo_patch_28885.rb +116 -0
- data/lib/sheets/parsers/roo_patches/roo_patch_29045.rb +2 -0
- data/lib/sheets/version.rb +1 -1
- data/sheets.gemspec +1 -1
- data/test/data/roo_issue_28885_test.xlsx +0 -0
- data/test/parsers/roo_parser_test.rb +8 -0
- metadata +12 -5
@@ -0,0 +1,116 @@
|
|
1
|
+
# RubyForge Patch: 28885 - Fixes to Honor XLSX Base Date Format
|
2
|
+
# NOTE: This fix is *highly* brittle. If roo updates, this may break roo.
|
3
|
+
|
4
|
+
class Excelx
|
5
|
+
|
6
|
+
def initialize(filename, packed=nil, file_warning = :error) #, create = false)
|
7
|
+
super()
|
8
|
+
@file_warning = file_warning
|
9
|
+
@tmpdir = "oo_"+$$.to_s
|
10
|
+
@tmpdir = File.join(ENV['ROO_TMP'], @tmpdir) if ENV['ROO_TMP']
|
11
|
+
unless File.exists?(@tmpdir)
|
12
|
+
FileUtils::mkdir(@tmpdir)
|
13
|
+
end
|
14
|
+
filename = open_from_uri(filename) if filename[0,7] == "http://"
|
15
|
+
filename = unzip(filename) if packed and packed == :zip
|
16
|
+
begin
|
17
|
+
file_type_check(filename,'.xlsx','an Excel-xlsx')
|
18
|
+
@cells_read = Hash.new
|
19
|
+
@filename = filename
|
20
|
+
unless File.file?(@filename)
|
21
|
+
raise IOError, "file #{@filename} does not exist"
|
22
|
+
end
|
23
|
+
@@nr += 1
|
24
|
+
@file_nr = @@nr
|
25
|
+
extract_content(@filename)
|
26
|
+
file = File.new(File.join(@tmpdir, @file_nr.to_s+"_roo_workbook.xml"))
|
27
|
+
# TODO: @workbook_doc = XML::Parser.io(file).parse
|
28
|
+
@workbook_doc = Nokogiri::XML(file)
|
29
|
+
|
30
|
+
# Set the base date, could be 1900 or 1904 depending on the system of origin.
|
31
|
+
date_base_element = @workbook_doc.search('workbookPr').attribute('date1904')
|
32
|
+
if date_base_element && date_base_element.value.to_i == 1
|
33
|
+
@base_date = Date.parse('1904-01-01')
|
34
|
+
else
|
35
|
+
@base_date = Date.parse('1900-01-01')
|
36
|
+
end
|
37
|
+
@base_datetime = DateTime.parse( @base_date.strftime("%Y-%m-%d") )
|
38
|
+
|
39
|
+
file.close
|
40
|
+
@shared_table = []
|
41
|
+
if File.exist?(File.join(@tmpdir, @file_nr.to_s+'_roo_sharedStrings.xml'))
|
42
|
+
file = File.new(File.join(@tmpdir, @file_nr.to_s+'_roo_sharedStrings.xml'))
|
43
|
+
#TODO: @sharedstring_doc = XML::Parser.io(file).parse
|
44
|
+
@sharedstring_doc = Nokogiri::XML(file)
|
45
|
+
file.close
|
46
|
+
read_shared_strings(@sharedstring_doc)
|
47
|
+
end
|
48
|
+
@styles_table = []
|
49
|
+
@style_definitions = Array.new # TODO: ??? { |h,k| h[k] = {} }
|
50
|
+
if File.exist?(File.join(@tmpdir, @file_nr.to_s+'_roo_styles.xml'))
|
51
|
+
file = File.new(File.join(@tmpdir, @file_nr.to_s+'_roo_styles.xml'))
|
52
|
+
#TODO: @styles_doc = XML::Parser.io(file).parse
|
53
|
+
@styles_doc = Nokogiri::XML(file)
|
54
|
+
file.close
|
55
|
+
read_styles(@styles_doc)
|
56
|
+
end
|
57
|
+
@sheet_doc = []
|
58
|
+
@sheet_files.each_with_index do |item, i|
|
59
|
+
file = File.new(item)
|
60
|
+
#TODO: @sheet_doc[i] = XML::Parser.io(file).parse
|
61
|
+
@sheet_doc[i] = Nokogiri::XML(file)
|
62
|
+
file.close
|
63
|
+
end
|
64
|
+
ensure
|
65
|
+
#if ENV["roo_local"] != "thomas-p"
|
66
|
+
FileUtils::rm_r(@tmpdir)
|
67
|
+
#end
|
68
|
+
end
|
69
|
+
@default_sheet = self.sheets.first
|
70
|
+
@cell = Hash.new
|
71
|
+
@cell_type = Hash.new
|
72
|
+
@formula = Hash.new
|
73
|
+
@first_row = Hash.new
|
74
|
+
@last_row = Hash.new
|
75
|
+
@first_column = Hash.new
|
76
|
+
@last_column = Hash.new
|
77
|
+
@header_line = 1
|
78
|
+
@excelx_type = Hash.new
|
79
|
+
@excelx_value = Hash.new
|
80
|
+
@s_attribute = Hash.new # TODO: ggf. wieder entfernen nur lokal benoetigt
|
81
|
+
end
|
82
|
+
|
83
|
+
def set_cell_values(sheet,x,y,i,v,vt,formula,tr,str_v,
|
84
|
+
excelx_type=nil,
|
85
|
+
excelx_value=nil,
|
86
|
+
s_attribute=nil)
|
87
|
+
key = [y,x+i]
|
88
|
+
@cell_type[sheet] = {} unless @cell_type[sheet]
|
89
|
+
@cell_type[sheet][key] = vt
|
90
|
+
@formula[sheet] = {} unless @formula[sheet]
|
91
|
+
@formula[sheet][key] = formula if formula
|
92
|
+
@cell[sheet] = {} unless @cell[sheet]
|
93
|
+
case @cell_type[sheet][key]
|
94
|
+
when :float
|
95
|
+
@cell[sheet][key] = v.to_f
|
96
|
+
when :string
|
97
|
+
@cell[sheet][key] = str_v
|
98
|
+
when :date
|
99
|
+
@cell[sheet][key] = (@base_date+v.to_i).strftime("%Y-%m-%d")
|
100
|
+
when :datetime
|
101
|
+
@cell[sheet][key] = (@base_datetime+v.to_f).strftime("%Y-%m-%d %H:%M:%S")
|
102
|
+
when :percentage
|
103
|
+
@cell[sheet][key] = v.to_f
|
104
|
+
when :time
|
105
|
+
@cell[sheet][key] = v.to_f*(24*60*60)
|
106
|
+
else
|
107
|
+
@cell[sheet][key] = v
|
108
|
+
end
|
109
|
+
@excelx_type[sheet] = {} unless @excelx_type[sheet]
|
110
|
+
@excelx_type[sheet][key] = excelx_type
|
111
|
+
@excelx_value[sheet] = {} unless @excelx_value[sheet]
|
112
|
+
@excelx_value[sheet][key] = excelx_value
|
113
|
+
@s_attribute[sheet] = {} unless @s_attribute[sheet]
|
114
|
+
@s_attribute[sheet][key] = s_attribute
|
115
|
+
end
|
116
|
+
end
|
data/lib/sheets/version.rb
CHANGED
data/sheets.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rubyforge_project = "sheets"
|
16
16
|
|
17
17
|
s.add_dependency('spreadsheet', '>= 0.6.5.2')
|
18
|
-
s.add_dependency('roo', '
|
18
|
+
s.add_dependency('roo', '= 1.9.3')
|
19
19
|
# These are the dependencies roo forgot:
|
20
20
|
s.add_dependency('builder', '>= 3.0.0')
|
21
21
|
s.add_dependency('rubyzip', '>= 0.9.4')
|
Binary file
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sheets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
7
|
- 1
|
10
|
-
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bradley J. Spaulding
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
|
-
- - "
|
44
|
+
- - "="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
hash: 53
|
47
47
|
segments:
|
@@ -137,6 +137,9 @@ files:
|
|
137
137
|
- lib/sheets/parsers/base.rb
|
138
138
|
- lib/sheets/parsers/csv_parser.rb
|
139
139
|
- lib/sheets/parsers/roo_parser.rb
|
140
|
+
- lib/sheets/parsers/roo_patches.rb
|
141
|
+
- lib/sheets/parsers/roo_patches/roo_patch_28885.rb
|
142
|
+
- lib/sheets/parsers/roo_patches/roo_patch_29045.rb
|
140
143
|
- lib/sheets/renderable.rb
|
141
144
|
- lib/sheets/renderers/base.rb
|
142
145
|
- lib/sheets/renderers/csv_renderer.rb
|
@@ -144,6 +147,7 @@ files:
|
|
144
147
|
- lib/sheets/version.rb
|
145
148
|
- sheets.gemspec
|
146
149
|
- test/base_test.rb
|
150
|
+
- test/data/roo_issue_28885_test.xlsx
|
147
151
|
- test/data/simple.csv
|
148
152
|
- test/data/simple.ods
|
149
153
|
- test/data/simple.xls
|
@@ -152,6 +156,7 @@ files:
|
|
152
156
|
- test/parseable_test.rb
|
153
157
|
- test/parsers/basic_parsers_test.rb
|
154
158
|
- test/parsers/csv_parser_test.rb
|
159
|
+
- test/parsers/roo_parser_test.rb
|
155
160
|
- test/renderable_test.rb
|
156
161
|
- test/renderers/basic_renderers_test.rb
|
157
162
|
- test/renderers/csv_renderer_test.rb
|
@@ -193,6 +198,7 @@ specification_version: 3
|
|
193
198
|
summary: Sheets provides a Facade for importing spreadsheets that gives the application control. Any Spreadsheet can be represented as either (1) a two dimensional array, or (2) an array of hashes. Sheets' goal is to convert any spreadsheet format to one of these native Ruby data structures.
|
194
199
|
test_files:
|
195
200
|
- test/base_test.rb
|
201
|
+
- test/data/roo_issue_28885_test.xlsx
|
196
202
|
- test/data/simple.csv
|
197
203
|
- test/data/simple.ods
|
198
204
|
- test/data/simple.xls
|
@@ -201,6 +207,7 @@ test_files:
|
|
201
207
|
- test/parseable_test.rb
|
202
208
|
- test/parsers/basic_parsers_test.rb
|
203
209
|
- test/parsers/csv_parser_test.rb
|
210
|
+
- test/parsers/roo_parser_test.rb
|
204
211
|
- test/renderable_test.rb
|
205
212
|
- test/renderers/basic_renderers_test.rb
|
206
213
|
- test/renderers/csv_renderer_test.rb
|