osheet 0.9.2 → 0.10.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/examples/formula.rb CHANGED
@@ -9,6 +9,8 @@ require 'osheet'
9
9
 
10
10
  # this will dump the above data to a single-sheet workbook w/ no styles
11
11
 
12
+ puts "building examples/formula.rb ..."
13
+
12
14
  Osheet::Workbook.new {
13
15
  title "formula example"
14
16
  worksheet {
@@ -27,13 +29,15 @@ Osheet::Workbook.new {
27
29
  row {
28
30
  cell { data 3 }
29
31
  cell { data 4 }
30
- cell {
32
+ cell {
31
33
  # you can still refer to cells in other sheets through the name of the sheet and !
32
34
  # this is also a relative reference, ie. =Formula!A1+B2
33
35
  formula "=Formula!RC[-2]+RC[-1]"
34
36
  # 6 will change into 5 when formula gets recalculated
35
37
  data 6
36
- }
38
+ }
37
39
  }
38
40
  }
39
- }.to_file('examples/formula.xls')
41
+ }.to_file('examples/formula.xls', :pp => 2)
42
+
43
+ puts "open examples/formula.xls"
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
3
+ <Styles>
4
+
5
+ </Styles>
6
+ <Worksheet ss:Name="Formula">
7
+ <Table>
8
+ <Row>
9
+ <Cell>
10
+ <Data ss:Type="Number">1</Data>
11
+ </Cell>
12
+ <Cell>
13
+ <Data ss:Type="Number">2</Data>
14
+ </Cell>
15
+ <Cell ss:Formula="=R1C1+R1C2">
16
+ <Data ss:Type="String"></Data>
17
+ </Cell>
18
+ </Row>
19
+ </Table>
20
+ </Worksheet>
21
+ <Worksheet ss:Name="Refers to previous sheet">
22
+ <Table>
23
+ <Row>
24
+ <Cell>
25
+ <Data ss:Type="Number">3</Data>
26
+ </Cell>
27
+ <Cell>
28
+ <Data ss:Type="Number">4</Data>
29
+ </Cell>
30
+ <Cell ss:Formula="=Formula!RC[-2]+RC[-1]">
31
+ <Data ss:Type="Number">6</Data>
32
+ </Cell>
33
+ </Row>
34
+ </Table>
35
+ </Worksheet>
36
+ </Workbook>
data/examples/styles.rb CHANGED
@@ -6,6 +6,8 @@
6
6
  require 'rubygems'
7
7
  require 'osheet'
8
8
 
9
+ puts "building examples/styles.rb ..."
10
+
9
11
  Osheet::Workbook.new {
10
12
  title "styles"
11
13
  template(:cell, :styled) { |style, attribute|
@@ -248,4 +250,6 @@ Osheet::Workbook.new {
248
250
 
249
251
 
250
252
 
251
- }.to_file('examples/styles.xls', :format)
253
+ }.to_file('examples/styles.xls', :pp => 2)
254
+
255
+ puts "open examples/styles.xls"
@@ -0,0 +1,343 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
3
+ <Styles>
4
+ <Style ss:ID=".align.rotA">
5
+ <Alignment ss:Rotate="90" />
6
+ <NumberFormat />
7
+ </Style>
8
+ <Style ss:ID=".align.rotB">
9
+ <Alignment ss:Rotate="-90" />
10
+ <NumberFormat />
11
+ </Style>
12
+ <Style ss:ID=".align.rotC">
13
+ <Alignment ss:Rotate="45" />
14
+ <NumberFormat />
15
+ </Style>
16
+ <Style ss:ID=".align.top">
17
+ <Alignment ss:Vertical="Top" />
18
+ <NumberFormat />
19
+ </Style>
20
+ <Style ss:ID=".align.middle">
21
+ <Alignment ss:Vertical="Center" />
22
+ <NumberFormat />
23
+ </Style>
24
+ <Style ss:ID=".align.bottom">
25
+ <Alignment ss:Vertical="Bottom" />
26
+ <NumberFormat />
27
+ </Style>
28
+ <Style ss:ID=".align.wrap">
29
+ <Alignment ss:WrapText="1" />
30
+ <NumberFormat />
31
+ </Style>
32
+ <Style ss:ID=".align.left">
33
+ <Alignment ss:Horizontal="Left" />
34
+ <NumberFormat />
35
+ </Style>
36
+ <Style ss:ID=".align.center">
37
+ <Alignment ss:Horizontal="Center" />
38
+ <NumberFormat />
39
+ </Style>
40
+ <Style ss:ID=".align.right">
41
+ <Alignment ss:Horizontal="Right" />
42
+ <NumberFormat />
43
+ </Style>
44
+ <Style ss:ID=".font.underline">
45
+ <Font ss:Underline="Single" />
46
+ <NumberFormat />
47
+ </Style>
48
+ <Style ss:ID=".font.double_underline">
49
+ <Font ss:Underline="Double" />
50
+ <NumberFormat />
51
+ </Style>
52
+ <Style ss:ID=".font.accounting_underline">
53
+ <Font ss:Underline="SingleAccounting" />
54
+ <NumberFormat />
55
+ </Style>
56
+ <Style ss:ID=".font.double_accounting_underline">
57
+ <Font ss:Underline="DoubleAccounting" />
58
+ <NumberFormat />
59
+ </Style>
60
+ <Style ss:ID=".font.subscript">
61
+ <Font ss:VerticalAlign="Subscript" />
62
+ <NumberFormat />
63
+ </Style>
64
+ <Style ss:ID=".font.superscript">
65
+ <Font ss:VerticalAlign="Superscript" />
66
+ <NumberFormat />
67
+ </Style>
68
+ <Style ss:ID=".font.strikethrough">
69
+ <Font ss:StrikeThrough="1" />
70
+ <NumberFormat />
71
+ </Style>
72
+ <Style ss:ID=".font.shadow">
73
+ <Font ss:Shadow="1" />
74
+ <NumberFormat />
75
+ </Style>
76
+ <Style ss:ID=".font.bold">
77
+ <Font ss:Bold="1" />
78
+ <NumberFormat />
79
+ </Style>
80
+ <Style ss:ID=".font.italic">
81
+ <Font ss:Italic="1" />
82
+ <NumberFormat />
83
+ </Style>
84
+ <Style ss:ID=".font.sizeA">
85
+ <Font ss:Size="6" />
86
+ <NumberFormat />
87
+ </Style>
88
+ <Style ss:ID=".font.sizeB">
89
+ <Font ss:Size="14" />
90
+ <NumberFormat />
91
+ </Style>
92
+ <Style ss:ID=".font.colorA">
93
+ <Font ss:Color="#FF0000" />
94
+ <NumberFormat />
95
+ </Style>
96
+ <Style ss:ID=".font.colorB">
97
+ <Font ss:Color="#00FF00" />
98
+ <NumberFormat />
99
+ </Style>
100
+ <Style ss:ID=".font.nameA">
101
+ <Font ss:FontName="Courier" />
102
+ <NumberFormat />
103
+ </Style>
104
+ <Style ss:ID=".font.nameB">
105
+ <Font ss:FontName="Times New Roman" />
106
+ <NumberFormat />
107
+ </Style>
108
+ <Style ss:ID=".bg.color">
109
+ <Font ss:Color="#FFFFFF" />
110
+ <Interior ss:Color="#FF0000" ss:Pattern="Solid" />
111
+ <NumberFormat />
112
+ </Style>
113
+ <Style ss:ID=".bg.pattern">
114
+ <Interior ss:Pattern="HorzStripe" />
115
+ <NumberFormat />
116
+ </Style>
117
+ <Style ss:ID=".bg.pattern.color">
118
+ <Font ss:Color="#FFFFFF" />
119
+ <Interior ss:Color="#FF0000" ss:Pattern="HorzStripe" ss:PatternColor="#000000" />
120
+ <NumberFormat />
121
+ </Style>
122
+ <Style ss:ID=".border.top.color.weight.style">
123
+ <Borders>
124
+ <Border ss:Color="#FF0000" ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="0" />
125
+ </Borders>
126
+ <NumberFormat />
127
+ </Style>
128
+ <Style ss:ID=".border.right.color.weight.style">
129
+ <Borders>
130
+ <Border ss:Color="#00FF00" ss:LineStyle="Dash" ss:Position="Right" ss:Weight="1" />
131
+ </Borders>
132
+ <NumberFormat />
133
+ </Style>
134
+ <Style ss:ID=".border.bottom.color.weight.style">
135
+ <Borders>
136
+ <Border ss:Color="#0000FF" ss:LineStyle="Dot" ss:Position="Bottom" ss:Weight="2" />
137
+ </Borders>
138
+ <NumberFormat />
139
+ </Style>
140
+ <Style ss:ID=".border.left.color.weight.style">
141
+ <Borders>
142
+ <Border ss:Color="#FFFF00" ss:LineStyle="DashDot" ss:Position="Left" ss:Weight="3" />
143
+ </Borders>
144
+ <NumberFormat />
145
+ </Style>
146
+ <Style ss:ID=".border.all">
147
+ <Borders>
148
+ <Border ss:Color="#00FFFF" ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="3" />
149
+ <Border ss:Color="#00FFFF" ss:LineStyle="Continuous" ss:Position="Right" ss:Weight="3" />
150
+ <Border ss:Color="#00FFFF" ss:LineStyle="Continuous" ss:Position="Bottom" ss:Weight="3" />
151
+ <Border ss:Color="#00FFFF" ss:LineStyle="Continuous" ss:Position="Left" ss:Weight="3" />
152
+ </Borders>
153
+ <NumberFormat />
154
+ </Style>
155
+ </Styles>
156
+ <Worksheet ss:Name="align">
157
+ <Table>
158
+ <Column ss:Width="100" />
159
+ <Column ss:Width="100" />
160
+ <Column ss:Width="100" />
161
+ <Column ss:Width="100" />
162
+ <Row ss:Height="50">
163
+ <Cell ss:StyleID=".align.rotA">
164
+ <Data ss:Type="String">rotA</Data>
165
+ </Cell>
166
+ <Cell ss:StyleID=".align.rotB">
167
+ <Data ss:Type="String">rotB</Data>
168
+ </Cell>
169
+ <Cell ss:StyleID=".align.rotC">
170
+ <Data ss:Type="String">rotC</Data>
171
+ </Cell>
172
+ </Row>
173
+ <Row ss:Height="50">
174
+ <Cell ss:StyleID=".align.top">
175
+ <Data ss:Type="String">top</Data>
176
+ </Cell>
177
+ <Cell ss:StyleID=".align.middle">
178
+ <Data ss:Type="String">middle</Data>
179
+ </Cell>
180
+ <Cell ss:StyleID=".align.bottom">
181
+ <Data ss:Type="String">bottom</Data>
182
+ </Cell>
183
+ </Row>
184
+ <Row ss:Height="50">
185
+ <Cell ss:StyleID=".align.wrap">
186
+ <Data ss:Type="String">wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap wrap </Data>
187
+ </Cell>
188
+ </Row>
189
+ <Row ss:Height="50">
190
+ <Cell ss:StyleID=".align.left">
191
+ <Data ss:Type="String">left</Data>
192
+ </Cell>
193
+ <Cell ss:StyleID=".align.center">
194
+ <Data ss:Type="String">center</Data>
195
+ </Cell>
196
+ <Cell ss:StyleID=".align.right">
197
+ <Data ss:Type="String">right</Data>
198
+ </Cell>
199
+ </Row>
200
+ </Table>
201
+ </Worksheet>
202
+ <Worksheet ss:Name="font">
203
+ <Table>
204
+ <Column ss:Width="100" />
205
+ <Column ss:Width="100" />
206
+ <Column ss:Width="100" />
207
+ <Column ss:Width="100" />
208
+ <Column ss:Width="100" />
209
+ <Column ss:Width="100" />
210
+ <Row>
211
+ <Cell ss:StyleID=".font.underline">
212
+ <Data ss:Type="String">underline</Data>
213
+ </Cell>
214
+ <Cell ss:StyleID=".font.double_underline">
215
+ <Data ss:Type="String">double_underline</Data>
216
+ </Cell>
217
+ <Cell ss:StyleID=".font.accounting_underline">
218
+ <Data ss:Type="String">accounting_underline</Data>
219
+ </Cell>
220
+ <Cell ss:StyleID=".font.double_accounting_underline">
221
+ <Data ss:Type="String">double_accounting_underline</Data>
222
+ </Cell>
223
+ </Row>
224
+ <Row>
225
+ <Cell ss:StyleID=".font.subscript">
226
+ <Data ss:Type="String">subscript</Data>
227
+ </Cell>
228
+ <Cell ss:StyleID=".font.superscript">
229
+ <Data ss:Type="String">superscript</Data>
230
+ </Cell>
231
+ <Cell ss:StyleID=".font.strikethrough">
232
+ <Data ss:Type="String">strikethrough</Data>
233
+ </Cell>
234
+ <Cell ss:StyleID=".font.shadow">
235
+ <Data ss:Type="String">shadow</Data>
236
+ </Cell>
237
+ </Row>
238
+ <Row>
239
+ <Cell ss:StyleID=".font.bold">
240
+ <Data ss:Type="String">bold</Data>
241
+ </Cell>
242
+ <Cell ss:StyleID=".font.italic">
243
+ <Data ss:Type="String">italic</Data>
244
+ </Cell>
245
+ </Row>
246
+ <Row>
247
+ <Cell ss:StyleID=".font.sizeA">
248
+ <Data ss:Type="String">sizeA</Data>
249
+ </Cell>
250
+ <Cell ss:StyleID=".font.sizeB">
251
+ <Data ss:Type="String">sizeB</Data>
252
+ </Cell>
253
+ </Row>
254
+ <Row>
255
+ <Cell ss:StyleID=".font.colorA">
256
+ <Data ss:Type="String">colorA</Data>
257
+ </Cell>
258
+ <Cell ss:StyleID=".font.colorB">
259
+ <Data ss:Type="String">colorB</Data>
260
+ </Cell>
261
+ </Row>
262
+ <Row>
263
+ <Cell ss:StyleID=".font.nameA">
264
+ <Data ss:Type="String">nameA</Data>
265
+ </Cell>
266
+ <Cell ss:StyleID=".font.nameB">
267
+ <Data ss:Type="String">nameB</Data>
268
+ </Cell>
269
+ </Row>
270
+ </Table>
271
+ </Worksheet>
272
+ <Worksheet ss:Name="bg">
273
+ <Table>
274
+ <Column ss:Width="100" />
275
+ <Row ss:Height="50">
276
+ <Cell ss:StyleID=".bg.color">
277
+ <Data ss:Type="String">COLOR</Data>
278
+ </Cell>
279
+ </Row>
280
+ <Row ss:Height="50">
281
+ <Cell ss:StyleID=".bg.pattern">
282
+ <Data ss:Type="String">PATTERN</Data>
283
+ </Cell>
284
+ </Row>
285
+ <Row ss:Height="50">
286
+ <Cell ss:StyleID=".bg.pattern.color">
287
+ <Data ss:Type="String">PATTERN COLOR</Data>
288
+ </Cell>
289
+ </Row>
290
+ </Table>
291
+ </Worksheet>
292
+ <Worksheet ss:Name="border">
293
+ <Table>
294
+ <Column ss:Width="20" />
295
+ <Column ss:Width="200" />
296
+ <Row></Row>
297
+ <Row ss:Height="50">
298
+ <Cell>
299
+ <Data ss:Type="String"></Data>
300
+ </Cell>
301
+ <Cell ss:StyleID=".border.top.color.weight.style">
302
+ <Data ss:Type="String">top red hairline continuous</Data>
303
+ </Cell>
304
+ </Row>
305
+ <Row></Row>
306
+ <Row ss:Height="50">
307
+ <Cell>
308
+ <Data ss:Type="String"></Data>
309
+ </Cell>
310
+ <Cell ss:StyleID=".border.right.color.weight.style">
311
+ <Data ss:Type="String">right green thin dash</Data>
312
+ </Cell>
313
+ </Row>
314
+ <Row></Row>
315
+ <Row ss:Height="50">
316
+ <Cell>
317
+ <Data ss:Type="String"></Data>
318
+ </Cell>
319
+ <Cell ss:StyleID=".border.bottom.color.weight.style">
320
+ <Data ss:Type="String">bottom blue medium dat</Data>
321
+ </Cell>
322
+ </Row>
323
+ <Row></Row>
324
+ <Row ss:Height="50">
325
+ <Cell>
326
+ <Data ss:Type="String"></Data>
327
+ </Cell>
328
+ <Cell ss:StyleID=".border.left.color.weight.style">
329
+ <Data ss:Type="String">left yellow thick dast_dot</Data>
330
+ </Cell>
331
+ </Row>
332
+ <Row></Row>
333
+ <Row ss:Height="50">
334
+ <Cell>
335
+ <Data ss:Type="String"></Data>
336
+ </Cell>
337
+ <Cell ss:StyleID=".border.all">
338
+ <Data ss:Type="String">all aqua</Data>
339
+ </Cell>
340
+ </Row>
341
+ </Table>
342
+ </Worksheet>
343
+ </Workbook>
data/examples/trivial.rb CHANGED
@@ -6,6 +6,8 @@
6
6
  require 'rubygems'
7
7
  require 'osheet'
8
8
 
9
+ puts "building examples/trivial.rb ..."
10
+
9
11
  Osheet::Workbook.new {
10
12
  title "basic"
11
13
  worksheet {
@@ -18,4 +20,6 @@ Osheet::Workbook.new {
18
20
  }
19
21
  }
20
22
  }
21
- }.to_file('examples/trivial.xls', :format)
23
+ }.to_file('examples/trivial.xls', :pp => 2)
24
+
25
+ puts "open examples/trivial.xls"
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
3
+ <Styles>
4
+ <Style ss:ID="..currency_dollar_2_comma_black">
5
+ <NumberFormat ss:Format="&quot;$&quot;#,##0.00" />
6
+ </Style>
7
+ </Styles>
8
+ <Worksheet ss:Name="one dollar">
9
+ <Table>
10
+ <Column />
11
+ <Row>
12
+ <Cell ss:StyleID="..currency_dollar_2_comma_black">
13
+ <Data ss:Type="Number">1</Data>
14
+ </Cell>
15
+ </Row>
16
+ </Table>
17
+ </Worksheet>
18
+ </Workbook>
@@ -1,3 +1,3 @@
1
1
  module Osheet
2
- VERSION = "0.9.2"
2
+ VERSION = "0.10.0"
3
3
  end
@@ -9,44 +9,41 @@ module Osheet::XmlssWriter
9
9
  include Elements
10
10
  include Styles
11
11
 
12
- attr_reader :workbook, :styles
12
+ attr_reader :used_xstyles
13
13
 
14
14
  def initialize(opts={})
15
- @styles = []
16
- @ostyles = ::Osheet::StyleSet.new
17
- self.workbook = opts[:workbook] if opts.has_key?(:workbook)
15
+ @used_xstyles = []
16
+ self.oworkbook = if opts.has_key?(:workbook)
17
+ opts[:workbook]
18
+ else
19
+ ::Osheet::Workbook.new
20
+ end
18
21
  end
19
22
 
20
- def workbook=(oworkbook)
21
- unless oworkbook.kind_of?(::Osheet::Workbook)
22
- raise ArgumentError, "'#{oworkbook.inspect}' is not an Osheet::Workbook"
23
- end
24
- # if oworkbook && oworkbook.worksheets.collect{|ws| ws.name}.include?(name_value)
25
- # # puts "ERRORR!!!!!!!!!!!!!!"
26
- # # puts "names: #{names.inspect}"
27
- # # puts "name value: #{name_value}"
28
- # raise ArgumentError, "the sheet name '#{name_value}' is already in use. enter a sheet name that is not used by another sheet"
29
- # end
30
- # # puts "names: #{names.inspect}"
31
- # # puts "name value: #{name_value}"
32
- # # name_value
33
-
34
- @ostyles = oworkbook.styles
35
- @workbook = ::Xmlss::Workbook.new({
36
- :worksheets => worksheets(oworkbook.worksheets)
37
- })
23
+ def to_data(xmlss_output_opts={})
24
+ self.xworkbook(xmlss_output_opts).to_s
38
25
  end
39
26
 
40
- def to_data(*options)
41
- @workbook.styles = @styles
42
- @workbook.to_xml(*options)
27
+ def to_file(file_path, xmlss_output_opts={})
28
+ self.xworkbook(xmlss_output_opts).to_file(file_path)
43
29
  end
44
30
 
45
- def to_file(path, *options)
46
- FileUtils.mkdir_p(File.dirname(path))
47
- File.open(path, 'w') {|f| f.write self.to_data(*options)}
48
- File.exists?(path) ? path : false
31
+
32
+
33
+
34
+ def oworkbook=(value)
35
+ unless value.kind_of?(::Osheet::Workbook)
36
+ raise ArgumentError, "'#{value.inspect}' is not an Osheet::Workbook"
37
+ end
38
+ @oworkbook = value
39
+ end
40
+
41
+ def xworkbook(xmlss_output_opts={})
42
+ @used_xstyles = []
43
+ ::Xmlss::Workbook.new(:output => xmlss_output_opts).tap do |xwkbk|
44
+ @oworkbook.worksheets.each { |sheet| worksheet(xwkbk, sheet) }
45
+ end
49
46
  end
50
47
 
51
48
  end
52
- end
49
+ end
@@ -2,69 +2,55 @@ module Osheet::XmlssWriter::Elements
2
2
 
3
3
  protected
4
4
 
5
- def worksheets(oworksheets)
6
- oworksheets.collect do |oworksheet|
7
- worksheet(oworksheet)
5
+ def worksheet(xworkbook, oworksheet)
6
+ xworkbook.worksheet(oworksheet.attributes[:name]) do
7
+ oworksheet.columns.each { |ocolumn| column(xworkbook, ocolumn) }
8
+ oworksheet.rows.each { |orow| row(xworkbook, orow) }
8
9
  end
9
10
  end
10
- def worksheet(oworksheet)
11
- ::Xmlss::Worksheet.new(oworksheet.attributes[:name], {
12
- :table => table(oworksheet)
13
- })
14
- end
15
- def table(oworksheet)
16
- ::Xmlss::Table.new({
17
- :columns => columns(oworksheet.columns),
18
- :rows => rows(oworksheet.rows)
19
- })
20
- end
21
11
 
22
- def columns(ocolumns)
23
- ocolumns.collect do |ocolumn|
24
- column(ocolumn)
25
- end
26
- end
27
- def column(ocolumn)
28
- ::Xmlss::Column.new({
29
- :style_id => style_id(ocolumn.attributes[:style_class]),
12
+ def column(xworkbook, ocolumn)
13
+ xworkbook.column({
14
+ :style_id => style_id(xworkbook, ocolumn.attributes[:style_class]),
30
15
  :width => ocolumn.attributes[:width],
31
16
  :auto_fit_width => ocolumn.attributes[:autofit],
32
17
  :hidden => ocolumn.attributes[:hidden]
33
18
  })
34
19
  end
35
20
 
36
- def rows(orows)
37
- orows.collect{|orow| row(orow)}
38
- end
39
- def row(orow)
40
- ::Xmlss::Row.new({
41
- :style_id => style_id(orow.attributes[:style_class]),
21
+ def row(xworkbook, orow)
22
+ xworkbook.row({
23
+ :style_id => style_id(xworkbook, orow.attributes[:style_class]),
42
24
  :height => orow.attributes[:height],
43
25
  :auto_fit_height => orow.attributes[:autofit],
44
- :hidden => orow.attributes[:hidden],
45
- :cells => cells(orow.cells)
46
- })
26
+ :hidden => orow.attributes[:hidden]
27
+ }) do
28
+ orow.cells.each { |ocell| cell(xworkbook, ocell) }
29
+ end
47
30
  end
48
31
 
49
- def cells(ocells)
50
- ocells.collect{|ocell| cell(ocell)}
51
- end
52
- def cell(ocell)
53
- ::Xmlss::Cell.new({
54
- :style_id => style_id(ocell.attributes[:style_class], ocell.attributes[:format]),
32
+ def cell(xworkbook, ocell)
33
+ xworkbook.cell({
34
+ :style_id => style_id(xworkbook, ocell.attributes[:style_class], ocell.attributes[:format]),
55
35
  :href => ocell.attributes[:href],
56
36
  :index => ocell.attributes[:index],
57
37
  :merge_across => cell_merge(ocell.attributes[:colspan]),
58
38
  :merge_down => cell_merge(ocell.attributes[:rowspan]),
59
- :data => data(ocell.attributes[:data]),
60
39
  :formula => ocell.attributes[:formula]
61
- })
40
+ }) do
41
+ data(xworkbook, ocell.attributes[:data])
42
+ end
43
+ end
44
+
45
+ def data(xworkbook, odata)
46
+ xworkbook.data(odata)
62
47
  end
48
+
49
+ private
50
+
51
+ # convert osheet col/row span value to xmlss merge value
63
52
  def cell_merge(span)
64
53
  span.kind_of?(::Fixnum) && span > 1 ? span-1 : 0
65
54
  end
66
- def data(ocell_data)
67
- ::Xmlss::Data.new(ocell_data)
68
- end
69
55
 
70
56
  end