roo-xls 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 72a5eeec41696350e22d685b1337489727f9211c
4
- data.tar.gz: d149d0621aec472b1b64ef3b817ef167d7cfd785
2
+ SHA256:
3
+ metadata.gz: 5497f8b6a9779fc588a2a111be208b15b161980a742db7aa51bf493a1aa97cd6
4
+ data.tar.gz: 40589a5d46b9134aa6dfe7fd8e93fc38d1409e1c318fef7d93cd958ff95b8cbf
5
5
  SHA512:
6
- metadata.gz: b4c1534cb3cbe004cc8bfe510c88f9565adbf4e9e607c42961a49827dbc579ce06b630716eb9804d04076afb0ee79b5269a02b333eb0a096a97b4bbbfa417e4d
7
- data.tar.gz: faf978fc060d3bf38ff0011bc8ff239ffa9067835ad2cee1fa9f7c09aeb64a181136c7365e70ddb7c5015e9ac24e076cd7473414e6d8fcec60feb5cb12dd1458
6
+ metadata.gz: 7024a683484e5a679df01b9a4d7a4a62eb6a11a826e68fe51e9ab0ef3019e103349d1d097a52d51cf188fcb78ad67acad7fa827cdf7c4f7e58615c052f6c9d8f
7
+ data.tar.gz: b3d528dee5ea5771d1f394701bee2fc305f5064c688a1f5df4595fd4c811c2d3568a5e2d10a2b0558432bc03191edd5f6a6c1a67de74e9a3bd6ac563740f4edb
@@ -4,7 +4,8 @@ rvm:
4
4
  - 2.1
5
5
  - 2.2
6
6
  - 2.3
7
- - 2.4.0
7
+ - 2.4
8
+ - 2.5
8
9
  - ruby-head
9
10
  - jruby-19mode # JRuby in 1.9 mode
10
11
  - rbx-2
data/README.md CHANGED
@@ -10,6 +10,11 @@ This library extends Roo to add support for handling class Excel files, includin
10
10
  There is no support for formulas in Roo for .xls files - you can get the result
11
11
  of a formula but not the formula itself.
12
12
 
13
+ ## Limitations
14
+
15
+ Roo::Xls currently doesn't provide support for the following features in Roo:
16
+ * [Option `:expand_merged_ranged => true`](https://github.com/roo-rb/roo#expand_merged_ranges)
17
+
13
18
  ## License
14
19
 
15
20
  While Roo and Roo::Xls are licensed under the MIT / Expat license, please note that the `spreadsheet` gem [is released under](https://github.com/zdavatz/spreadsheet/blob/master/LICENSE.txt) the GPLv3 license. Please be aware that the author of the `spreadsheet` gem [claims you need a commercial license](http://spreadsheet.ch/2014/10/24/using-ruby-spreadsheet-on-heroku-with-dynos/) to use it as part of a public-facing, closed-source service, an interpretation [at odds with the FSF's intent and interpretation of the license](http://www.gnu.org/licenses/gpl-faq.html#UnreleasedMods).
@@ -21,7 +21,7 @@ class Roo::Excel2003XML < Roo::Base
21
21
  end
22
22
  @doc = ::Roo::Utils.load_xml(@filename)
23
23
  end
24
- namespace = @doc.namespaces.select{|xmlns, urn| urn == 'urn:schemas-microsoft-com:office:spreadsheet'}.keys.last
24
+ namespace = @doc.namespaces.select { |_, urn| urn == 'urn:schemas-microsoft-com:office:spreadsheet' }.keys.last
25
25
  @namespace = (namespace.nil? || namespace.empty?) ? 'ss' : namespace.split(':').last
26
26
  super(filename, options)
27
27
  @formula = {}
@@ -58,7 +58,7 @@ class Roo::Excel2003XML < Roo::Base
58
58
  alias_method :formula?, :formula
59
59
 
60
60
  class Font
61
- attr_accessor :bold, :italic, :underline
61
+ attr_accessor :bold, :italic, :underline, :color, :name, :size
62
62
 
63
63
  def bold?
64
64
  @bold == '1'
@@ -191,31 +191,49 @@ class Roo::Excel2003XML < Roo::Base
191
191
  validate_sheet!(sheet)
192
192
  return if @cells_read[sheet]
193
193
  sheet_found = false
194
+
194
195
  @doc.xpath("/#{@namespace}:Workbook/#{@namespace}:Worksheet[@#{@namespace}:Name='#{sheet}']").each do |ws|
195
196
  sheet_found = true
196
- row = 1
197
+ column_styles = {}
198
+
199
+ # Column Styles
197
200
  col = 1
198
- column_attributes = {}
199
- idx = 0
200
201
  ws.xpath("./#{@namespace}:Table/#{@namespace}:Column").each do |c|
201
- column_attributes[(idx += 1).to_s] = c['StyleID']
202
+ skip_to_col = c["#{@namespace}:Index"].to_i
203
+ col = skip_to_col if skip_to_col > 0
204
+ col_style_name = c["#{@namespace}:StyleID"]
205
+ column_styles[col] = col_style_name unless col_style_name.nil?
206
+ col += 1
202
207
  end
208
+
209
+ # Rows
210
+ row = 1
203
211
  ws.xpath("./#{@namespace}:Table/#{@namespace}:Row").each do |r|
204
- skip_to_row = r['Index'].to_i
212
+ skip_to_row = r["#{@namespace}:Index"].to_i
205
213
  row = skip_to_row if skip_to_row > 0
206
- style_name = r['StyleID'] if r['StyleID']
214
+
215
+ # Excel uses a 'Span' attribute on a 'Row' to indicate the presence of
216
+ # empty rows to skip.
217
+ skip_next_rows = r["#{@namespace}:Span"].to_i
218
+
219
+ row_style_name = r["#{@namespace}:StyleID"]
220
+
221
+ # Cells
222
+ col = 1
207
223
  r.xpath("./#{@namespace}:Cell").each do |c|
208
- skip_to_col = c['Index'].to_i
224
+ skip_to_col = c["#{@namespace}:Index"].to_i
209
225
  col = skip_to_col if skip_to_col > 0
210
- if c['StyleID']
211
- style_name = c['StyleID']
212
- elsif
213
- style_name ||= column_attributes[c['Index']]
214
- end
226
+
227
+ skip_next_cols = c["#{@namespace}:MergeAcross"].to_i
228
+
229
+ cell_style_name = c["#{@namespace}:StyleID"]
230
+ style_name = cell_style_name || row_style_name || column_styles[col]
231
+
232
+ # Cell Data
215
233
  c.xpath("./#{@namespace}:Data").each do |cell|
216
234
  formula = cell['Formula']
217
235
  value_type = cell["#{@namespace}:Type"].downcase.to_sym
218
- v = cell.content
236
+ v = cell.content
219
237
  str_v = v
220
238
  case value_type
221
239
  when :number
@@ -234,10 +252,9 @@ class Roo::Excel2003XML < Roo::Base
234
252
  end
235
253
  set_cell_values(sheet, col, row, 0, v, value_type, formula, cell, str_v, style_name)
236
254
  end
237
- col += 1
255
+ col += (skip_next_cols + 1)
238
256
  end
239
- row += 1
240
- col = 1
257
+ row += (skip_next_rows + 1)
241
258
  end
242
259
  end
243
260
  unless sheet_found
@@ -248,12 +265,16 @@ class Roo::Excel2003XML < Roo::Base
248
265
 
249
266
  def read_styles
250
267
  @doc.xpath("/#{@namespace}:Workbook/#{@namespace}:Styles/#{@namespace}:Style").each do |style|
251
- style_id = style['ID']
252
- @style_definitions[style_id] = Roo::Excel2003XML::Font.new
253
- if font = style.at_xpath("./#{@namespace}:Font")
254
- @style_definitions[style_id].bold = font['Bold']
255
- @style_definitions[style_id].italic = font['Italic']
256
- @style_definitions[style_id].underline = font['Underline']
268
+ style_id = style["#{@namespace}:ID"]
269
+ font = style.at_xpath("./#{@namespace}:Font")
270
+ unless font.nil?
271
+ @style_definitions[style_id] = Roo::Excel2003XML::Font.new
272
+ @style_definitions[style_id].bold = font["#{@namespace}:Bold"]
273
+ @style_definitions[style_id].italic = font["#{@namespace}:Italic"]
274
+ @style_definitions[style_id].underline = font["#{@namespace}:Underline"]
275
+ @style_definitions[style_id].color = font["#{@namespace}:Color"]
276
+ @style_definitions[style_id].name = font["#{@namespace}:FontName"]
277
+ @style_definitions[style_id].size = font["#{@namespace}:Size"]
257
278
  end
258
279
  end
259
280
  end
@@ -1,5 +1,5 @@
1
1
  module Roo
2
2
  module Xls
3
- VERSION = '1.1.0'
3
+ VERSION = '1.2.0'
4
4
  end
5
5
  end
@@ -10,7 +10,6 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["ruby.ruby.ruby.roo@gmail.com"]
11
11
  spec.summary = "Roo::Excel can access the contents of classic xls files."
12
12
  spec.description = "Roo can access the contents of various spreadsheet files. It can handle\n* OpenOffice\n* Excel\n* Google spreadsheets\n* Excelx\n* LibreOffice\n* CSV"
13
- spec.homepage = ""
14
13
  spec.license = "MIT"
15
14
 
16
15
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,7 +17,7 @@ Gem::Specification.new do |spec|
18
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
18
  spec.require_paths = ["lib"]
20
19
 
21
- spec.add_dependency "roo", ">= 2.0.0beta1", "< 3"
20
+ spec.add_dependency "roo", ">= 2.0.0", "< 3"
22
21
  spec.add_dependency "spreadsheet", "> 0.9.0"
23
22
 
24
23
  if RUBY_VERSION >= '2.1'
@@ -1,14 +1,204 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Roo::Excel2003XML do
3
+ RSpec.describe Roo::Excel2003XML do
4
+ subject { instance }
5
+
6
+ let(:instance) { described_class.new(path) }
7
+ let(:path) { File.join(test_files_dir, test_file) }
8
+ let(:test_files_dir) { 'test/files' }
9
+
4
10
  describe '.new' do
5
11
  context 'with an xml file' do
6
- let(:path) { 'test/files/datetime.xml' }
12
+ let(:test_file) { 'datetime.xml' }
13
+
14
+ it 'loads the file without error' do
15
+ expect { subject }.to_not raise_error
16
+ end
17
+ end
18
+ end
19
+
20
+ describe '#cell' do
21
+ subject { super().cell(cell[:row], cell[:col]) }
22
+
23
+ before(:each) { instance.default_sheet = instance.sheets.first }
24
+
25
+ context 'with merged cells' do
26
+ # See font_colors_screenshot_in_Mac_Excel_16.10.png for a screenshot of
27
+ # this how this file looks in Mac Excel 16.10.
28
+ let(:test_file) { 'font_colors.xml' }
29
+
30
+ context 'the top-left cell in a merged cell' do
31
+ let(:cell) { { :row => 1, :col => 'A' } }
32
+
33
+ it 'returns the contents of the merged cell' do
34
+ is_expected.to eq 'Roo::Xls Test of Font Colors'
35
+ end
36
+ end
37
+
38
+ context 'the cell to the right of the top-left cell in a merged cell' do
39
+ let(:cell) { { :row => 2, :col => 'A' } }
40
+ it { is_expected.to be_nil }
41
+ end
42
+
43
+ context 'the cell below the top-left cell in a merged cell' do
44
+ let(:cell) { { :row => 2, :col => 'B' } }
45
+ it { is_expected.to be_nil }
46
+ end
47
+
48
+ context 'the first cell to the right of an entire merged cell' do
49
+ let(:cell) { { :row => 1, :col => 'K' } }
50
+
51
+ it 'returns the expected contents' do
52
+ is_expected.to eq 'This entire COLUMN should be ITALIC and GREEN'
53
+ end
54
+ end
55
+
56
+ context 'the first cell below an entire merged cell' do
57
+ let(:cell) { { :row => 6, :col => 'A' } }
58
+
59
+ it 'returns the expected contents' do
60
+ is_expected.to eq '(The above should be font "Courier New", size 24)'
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ describe '#font' do
67
+ subject { super().font(cell[:row], cell[:col]) }
68
+
69
+ before(:each) { instance.default_sheet = instance.sheets.first }
70
+
71
+ # See font_colors_screenshot_in_Mac_Excel_16.10.png for a screenshot of
72
+ # this how this file looks in Mac Excel 16.10.
73
+ let(:test_file) { 'font_colors.xml' }
74
+
75
+ let(:default_attrs) do
76
+ {
77
+ :name => 'Arial',
78
+ :size => '12',
79
+ :color => '#000000',
80
+ :bold? => false,
81
+ :italic? => false,
82
+ :underline? => false
83
+ }
84
+ end
85
+
86
+ let(:expected_attrs) { default_attrs }
87
+
88
+ context 'with no font styling' do
89
+ let(:cell) { { :row => 6, :col => 'A' } }
90
+
91
+ it 'returns default font attributes' do
92
+ is_expected.to have_attributes(default_attrs)
93
+ end
94
+ end
95
+
96
+ context 'with styling set on an individual cell' do
97
+ context 'when set font name and size' do
98
+ let(:cell) { { :row => 1, :col => 'A' } }
99
+
100
+ it 'returns expected font attributes including name and size' do
101
+ expects = default_attrs.merge({ :name => 'Courier New', :size => '24' })
102
+ is_expected.to have_attributes(expects)
103
+ end
104
+ end
105
+
106
+ context 'when colored BLACK' do
107
+ let(:cell) { { :row => 7, :col => 'A' } }
108
+
109
+ it 'returns default font attributes (which include black)' do
110
+ is_expected.to have_attributes(default_attrs)
111
+ end
112
+ end
113
+
114
+ context 'when colored RED' do
115
+ let(:cell) { { :row => 8, :col => 'A' } }
116
+
117
+ it 'returns defaults plus red color' do
118
+ expects = default_attrs.merge({ :color => '#FF0000' })
119
+ is_expected.to have_attributes(expects)
120
+ end
121
+ end
122
+
123
+ context 'when colored BLUE' do
124
+ let(:cell) { { :row => 9, :col => 'A' } }
125
+
126
+ it 'returns defaults plus blue color' do
127
+ expects = default_attrs.merge({ :color => '#0066CC' })
128
+ is_expected.to have_attributes(expects)
129
+ end
130
+ end
131
+
132
+ context 'when BOLD' do
133
+ let(:cell) { { :row => 10, :col => 'A' } }
134
+
135
+ it 'returns defaults plus bold style' do
136
+ # somehow in Excel, this ended up "no color" rather than black...
137
+ expects = default_attrs.merge({ :bold? => true, :color => nil })
138
+ is_expected.to have_attributes(expects)
139
+ end
140
+ end
141
+
142
+ context 'when ITALIC' do
143
+ let(:cell) { { :row => 11, :col => 'A' } }
144
+
145
+ it 'returns defaults plus italic style' do
146
+ # somehow in Excel, this ended up "no color" rather than black...
147
+ expects = default_attrs.merge({ :italic? => true, :color => nil })
148
+ is_expected.to have_attributes(expects)
149
+ end
150
+ end
151
+
152
+ context 'when UNDERLINED' do
153
+ let(:cell) { { :row => 12, :col => 'A' } }
154
+
155
+ it 'returns defaults plus underlined style' do
156
+ # somehow in Excel, this ended up "no color" rather than black...
157
+ expects = default_attrs.merge({ :underline? => true, :color => nil })
158
+ is_expected.to have_attributes(expects)
159
+ end
160
+ end
161
+
162
+ context 'when BOLD, ITALIC, UNDERLINED, and colored PURPLE' do
163
+ let(:cell) { { :row => 13, :col => 'A' } }
164
+
165
+ it 'returns defaults plus bold, italic, underlined, and purple color' do
166
+ expects = default_attrs.merge({
167
+ :color => '#666699',
168
+ :bold? => true,
169
+ :italic? => true,
170
+ :underline? => true
171
+ })
172
+ is_expected.to have_attributes(expects)
173
+ end
174
+ end
175
+ end
176
+
177
+ context 'with styling set on an entire row' do
178
+ let(:row_style) do
179
+ default_attrs.merge({ :color => '#ED7D31', :bold? => true })
180
+ end
181
+
182
+ context 'when no cell styling' do
183
+ let(:cell) { { :row => 14, :col => 'L' } }
184
+
185
+ it 'returns the row style' do
186
+ is_expected.to have_attributes(row_style)
187
+ end
188
+ end
189
+ end
190
+
191
+ context 'with styling set on an entire column' do
192
+ let(:col_style) do
193
+ default_attrs.merge({ :color => '#00FF00', :italic? => true })
194
+ end
195
+
196
+ context 'when no cell styling' do
197
+ let(:cell) { { :row => 20, :col => 'K' } }
7
198
 
8
- it 'loads the file' do
9
- expect {
10
- Roo::Excel2003XML.new(path)
11
- }.to_not raise_error
199
+ it 'returns the column style' do
200
+ is_expected.to have_attributes(col_style)
201
+ end
12
202
  end
13
203
  end
14
204
  end
@@ -0,0 +1,203 @@
1
+ <?xml version="1.0"?>
2
+ <?mso-application progid="Excel.Sheet"?>
3
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
4
+ xmlns:o="urn:schemas-microsoft-com:office:office"
5
+ xmlns:x="urn:schemas-microsoft-com:office:excel"
6
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
7
+ xmlns:html="http://www.w3.org/TR/REC-html40">
8
+ <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
9
+ <Author>Marc Siegel</Author>
10
+ <LastAuthor>Marc Siegel</LastAuthor>
11
+ <Created>2018-02-14T22:21:05Z</Created>
12
+ <LastSaved>2018-02-15T17:12:56Z</LastSaved>
13
+ <Version>16.00</Version>
14
+ </DocumentProperties>
15
+ <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
16
+ <AllowPNG/>
17
+ </OfficeDocumentSettings>
18
+ <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
19
+ <WindowHeight>16940</WindowHeight>
20
+ <WindowWidth>27640</WindowWidth>
21
+ <WindowTopX>3380</WindowTopX>
22
+ <WindowTopY>5080</WindowTopY>
23
+ <ProtectStructure>False</ProtectStructure>
24
+ <ProtectWindows>False</ProtectWindows>
25
+ </ExcelWorkbook>
26
+ <Styles>
27
+ <Style ss:ID="Default" ss:Name="Normal">
28
+ <Alignment ss:Vertical="Bottom"/>
29
+ <Borders/>
30
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#000000"/>
31
+ <Interior/>
32
+ <NumberFormat/>
33
+ <Protection/>
34
+ </Style>
35
+ <Style ss:ID="s62">
36
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#000000"/>
37
+ </Style>
38
+ <Style ss:ID="s63">
39
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#00FF00"
40
+ ss:Italic="1"/>
41
+ </Style>
42
+ <Style ss:ID="s65">
43
+ <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
44
+ <Font ss:FontName="Courier New" x:Family="Roman" ss:Size="24" ss:Color="#000000"/>
45
+ </Style>
46
+ <Style ss:ID="s67">
47
+ <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
48
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#00FF00"
49
+ ss:Italic="1"/>
50
+ </Style>
51
+ <Style ss:ID="s69">
52
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
53
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#000000"/>
54
+ </Style>
55
+ <Style ss:ID="s71">
56
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
57
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#FF0000"/>
58
+ </Style>
59
+ <Style ss:ID="s73">
60
+ <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
61
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#FF0000"
62
+ ss:Underline="Single"/>
63
+ </Style>
64
+ <Style ss:ID="s75">
65
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
66
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#0066CC"/>
67
+ </Style>
68
+ <Style ss:ID="s77">
69
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
70
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Bold="1"/>
71
+ </Style>
72
+ <Style ss:ID="s79">
73
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
74
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Italic="1"/>
75
+ </Style>
76
+ <Style ss:ID="s81">
77
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
78
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Underline="Single"/>
79
+ </Style>
80
+ <Style ss:ID="s83">
81
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
82
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#666699"
83
+ ss:Bold="1" ss:Italic="1" ss:Underline="Single"/>
84
+ </Style>
85
+ <Style ss:ID="s90">
86
+ <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
87
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#00FF00"
88
+ ss:Bold="1" ss:Italic="1"/>
89
+ </Style>
90
+ <Style ss:ID="s91">
91
+ <Alignment ss:Vertical="Center" ss:WrapText="1"/>
92
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#008080"
93
+ ss:Bold="1" ss:Italic="1"/>
94
+ </Style>
95
+ <Style ss:ID="s97">
96
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
97
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#ED7D31"
98
+ ss:Bold="1"/>
99
+ </Style>
100
+ <Style ss:ID="s100">
101
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#ED7D31"
102
+ ss:Bold="1"/>
103
+ </Style>
104
+ <Style ss:ID="s110">
105
+ <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
106
+ <Font ss:FontName="Arial" x:Family="Swiss" ss:Size="12" ss:Color="#FF0000"
107
+ ss:Underline="Single"/>
108
+ </Style>
109
+ </Styles>
110
+ <Worksheet ss:Name="Sheet1">
111
+ <Table ss:ExpandedColumnCount="13" ss:ExpandedRowCount="20" x:FullColumns="1"
112
+ x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="65"
113
+ ss:DefaultRowHeight="16">
114
+ <Column ss:Index="10" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="96"/>
115
+ <Column ss:StyleID="s63" ss:AutoFitWidth="0" ss:Width="173"/>
116
+ <Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="141"/>
117
+ <Row ss:AutoFitHeight="0">
118
+ <Cell ss:MergeAcross="9" ss:MergeDown="4" ss:StyleID="s65"><Data
119
+ ss:Type="String">Roo::Xls Test of Font Colors</Data></Cell>
120
+ <Cell ss:MergeDown="6" ss:StyleID="s67"><Data ss:Type="String">This entire COLUMN should be ITALIC and GREEN</Data></Cell>
121
+ </Row>
122
+ <Row ss:AutoFitHeight="0" ss:Span="3"/>
123
+ <Row ss:Index="6" ss:AutoFitHeight="0">
124
+ <Cell><Data ss:Type="String">(The above should be font &quot;Courier New&quot;, size 24)</Data></Cell>
125
+ </Row>
126
+ <Row ss:AutoFitHeight="0">
127
+ <Cell ss:MergeAcross="9" ss:StyleID="s69"><Data ss:Type="String">This font should be BLACK</Data></Cell>
128
+ </Row>
129
+ <Row ss:AutoFitHeight="0">
130
+ <Cell ss:MergeAcross="9" ss:StyleID="s71"><Data ss:Type="String">This font should be RED</Data></Cell>
131
+ <Cell ss:MergeDown="5" ss:StyleID="s73"><Data ss:Type="String">…except this cell, which should be UNDERLINED and RED</Data></Cell>
132
+ </Row>
133
+ <Row ss:AutoFitHeight="0">
134
+ <Cell ss:MergeAcross="9" ss:StyleID="s75"><Data ss:Type="String">This font should be BLUE</Data></Cell>
135
+ </Row>
136
+ <Row ss:AutoFitHeight="0">
137
+ <Cell ss:MergeAcross="9" ss:StyleID="s77"><Data ss:Type="String">This font should be BOLD</Data></Cell>
138
+ </Row>
139
+ <Row ss:AutoFitHeight="0">
140
+ <Cell ss:MergeAcross="9" ss:StyleID="s79"><Data ss:Type="String">This font should be ITALIC</Data></Cell>
141
+ </Row>
142
+ <Row ss:AutoFitHeight="0">
143
+ <Cell ss:MergeAcross="9" ss:StyleID="s81"><Data ss:Type="String">This font should be UNDERLINED</Data></Cell>
144
+ </Row>
145
+ <Row ss:AutoFitHeight="0">
146
+ <Cell ss:MergeAcross="9" ss:StyleID="s83"><Data ss:Type="String">This font should be BOLD, ITALIC, UNDERLINED, and PURPLE</Data></Cell>
147
+ </Row>
148
+ <Row ss:AutoFitHeight="0" ss:StyleID="s100">
149
+ <Cell ss:MergeAcross="4" ss:StyleID="s97"><Data ss:Type="String">This entire ROW should be BOLD and ORANGE</Data></Cell>
150
+ <Cell ss:MergeAcross="4" ss:StyleID="s110"><Data ss:Type="String">…except this cell, which should be UNDERLINED and RED</Data></Cell>
151
+ <Cell ss:MergeDown="5" ss:StyleID="s90"><Data ss:Type="String">As the combination of ROW and COLUMN styles, this cell should be BOLD, ITALIC, and GREEN</Data></Cell>
152
+ <Cell><Data ss:Type="String">Just row style</Data></Cell>
153
+ </Row>
154
+ <Row ss:AutoFitHeight="0">
155
+ <Cell ss:Index="12" ss:StyleID="s91"/>
156
+ <Cell ss:StyleID="s91"/>
157
+ </Row>
158
+ <Row ss:AutoFitHeight="0">
159
+ <Cell ss:Index="12" ss:StyleID="s91"/>
160
+ <Cell ss:StyleID="s91"/>
161
+ </Row>
162
+ <Row ss:AutoFitHeight="0">
163
+ <Cell ss:Index="12" ss:StyleID="s91"/>
164
+ <Cell ss:StyleID="s91"/>
165
+ </Row>
166
+ <Row ss:AutoFitHeight="0">
167
+ <Cell ss:Index="12" ss:StyleID="s91"/>
168
+ <Cell ss:StyleID="s91"/>
169
+ </Row>
170
+ <Row ss:AutoFitHeight="0">
171
+ <Cell ss:Index="12" ss:StyleID="s91"/>
172
+ <Cell ss:StyleID="s91"/>
173
+ </Row>
174
+ <Row ss:AutoFitHeight="0">
175
+ <Cell ss:Index="11"><Data ss:Type="String">Just column style</Data></Cell>
176
+ <Cell ss:StyleID="s91"/>
177
+ <Cell ss:StyleID="s91"/>
178
+ </Row>
179
+ </Table>
180
+ <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
181
+ <PageSetup>
182
+ <Header x:Margin="0.3"/>
183
+ <Footer x:Margin="0.3"/>
184
+ <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
185
+ </PageSetup>
186
+ <Unsynced/>
187
+ <Print>
188
+ <ValidPrinterInfo/>
189
+ <VerticalResolution>0</VerticalResolution>
190
+ </Print>
191
+ <Selected/>
192
+ <Panes>
193
+ <Pane>
194
+ <Number>3</Number>
195
+ <ActiveRow>25</ActiveRow>
196
+ <ActiveCol>7</ActiveCol>
197
+ </Pane>
198
+ </Panes>
199
+ <ProtectObjects>False</ProtectObjects>
200
+ <ProtectScenarios>False</ProtectScenarios>
201
+ </WorksheetOptions>
202
+ </Worksheet>
203
+ </Workbook>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roo-xls
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Preymesser
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-05-27 00:00:00.000000000 Z
13
+ date: 2018-02-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: roo
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 2.0.0beta1
21
+ version: 2.0.0
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
24
  version: '3'
@@ -28,7 +28,7 @@ dependencies:
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: 2.0.0beta1
31
+ version: 2.0.0
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '3'
@@ -147,6 +147,8 @@ files:
147
147
  - test/files/excel2003_namespace.xml
148
148
  - test/files/false_encoding.xls
149
149
  - test/files/false_encoding.xml
150
+ - test/files/font_colors.xml
151
+ - test/files/font_colors_screenshot_in_Mac_Excel_16.10.png
150
152
  - test/files/formula.xls
151
153
  - test/files/formula.xml
152
154
  - test/files/formula_parse_error.xls
@@ -184,7 +186,7 @@ files:
184
186
  - test/test_excel_2003_xml.rb
185
187
  - test/test_helper.rb
186
188
  - test/test_roo_excel.rb
187
- homepage: ''
189
+ homepage:
188
190
  licenses:
189
191
  - MIT
190
192
  metadata: {}
@@ -204,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
206
  version: '0'
205
207
  requirements: []
206
208
  rubyforge_project:
207
- rubygems_version: 2.5.1
209
+ rubygems_version: 2.7.6
208
210
  signing_key:
209
211
  specification_version: 4
210
212
  summary: Roo::Excel can access the contents of classic xls files.
@@ -239,6 +241,8 @@ test_files:
239
241
  - test/files/excel2003_namespace.xml
240
242
  - test/files/false_encoding.xls
241
243
  - test/files/false_encoding.xml
244
+ - test/files/font_colors.xml
245
+ - test/files/font_colors_screenshot_in_Mac_Excel_16.10.png
242
246
  - test/files/formula.xls
243
247
  - test/files/formula.xml
244
248
  - test/files/formula_parse_error.xls