osheet 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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