roo-xls 1.1.0 → 1.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.
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