sheets 0.9.1 → 1.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.
- 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
|