rusk 0.0.2 → 0.0.3
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/Guardfile +1 -1
- data/README.md +10 -0
- data/lib/rusk/sheet.rb +71 -18
- data/lib/rusk/version.rb +1 -1
- data/spec/data/created_from_excel2010.ods +0 -0
- data/spec/data/created_from_excel2010_content.xml +63 -0
- data/spec/data/general_datas.ods +0 -0
- data/spec/data/general_datas_content.xml +56 -31
- data/spec/sheet_spec.rb +175 -44
- metadata +9 -5
data/Guardfile
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
guard 'rspec', :cli => '--color', :all_after_pass => false, :all_on_start => false do
|
6
6
|
watch(%r{^spec/.+_spec\.rb$})
|
7
7
|
watch(%r{^lib/rusk/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
8
|
-
watch('lib/
|
8
|
+
watch('lib/rusk.rb') { "spec" }
|
9
9
|
watch('spec/spec_helper.rb') { "spec" }
|
10
10
|
end
|
11
11
|
|
data/README.md
CHANGED
@@ -98,6 +98,16 @@ Rusk::Sheet#each_column
|
|
98
98
|
end
|
99
99
|
```
|
100
100
|
|
101
|
+
If Rusk::Sheet#each, each_row, each_column call without block, return Enumerator instance
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
sheet.each_row # return Enumerator
|
105
|
+
|
106
|
+
# use method chain
|
107
|
+
sheet.each_row.with_index |rows, index|
|
108
|
+
end
|
109
|
+
```
|
110
|
+
|
101
111
|
#### cell's value ####
|
102
112
|
|
103
113
|
Rusk::Cell#value gets the value of the cell according to the format.
|
data/lib/rusk/sheet.rb
CHANGED
@@ -7,16 +7,10 @@ module Rusk
|
|
7
7
|
def initialize(content)
|
8
8
|
@content = content
|
9
9
|
@cells = []
|
10
|
-
@content.xpath('.//table:table-row')
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
(cell["table:number-columns-repeated"].to_i - 1).times do
|
15
|
-
row_cells << Rusk::Cell.new(cell)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
@cells << row_cells
|
19
|
-
end
|
10
|
+
rows = @content.xpath('.//table:table-row')
|
11
|
+
@row_size = rows.select { |row| row["table:number-rows-repeated"] }.inject(0) { |sum, item| sum + item["table:number-rows-repeated"].to_i} + rows.size
|
12
|
+
columns = rows[0].xpath(".//table:table-cell|.//table:covered-table-cell")
|
13
|
+
@column_size = columns.select{ |cell| cell["table:number-columns-repeated"] }.inject(0){ |sum, item| sum + item["table:number-columns-repeated"].to_i } + columns.size
|
20
14
|
end
|
21
15
|
|
22
16
|
def name
|
@@ -28,29 +22,88 @@ module Rusk
|
|
28
22
|
end
|
29
23
|
|
30
24
|
def [](row, column)
|
31
|
-
return nil if row
|
25
|
+
return nil if @row_size < row || @column_size < column
|
26
|
+
return @cells[row][column] if @cells[row]
|
27
|
+
|
28
|
+
row_index = 0
|
29
|
+
each_row(force: true) do |row_range|
|
30
|
+
break if row_index > row
|
31
|
+
row_index += 1
|
32
|
+
end
|
33
|
+
|
32
34
|
@cells[row][column]
|
33
35
|
end
|
34
36
|
|
35
|
-
def each
|
36
|
-
|
37
|
-
|
37
|
+
def each(&block)
|
38
|
+
return Enumerator.new(self) unless block
|
39
|
+
each_row do |row_range|
|
40
|
+
row_range.each do |cell|
|
38
41
|
yield cell
|
39
42
|
end
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
43
|
-
def each_row
|
44
|
-
|
45
|
-
|
46
|
+
def each_row(options = {force: false}, &block)
|
47
|
+
return Enumerator.new(self, :each_row) unless block
|
48
|
+
row_index = 0
|
49
|
+
@content.xpath('.//table:table-row').each_with_index do |row_range, index|
|
50
|
+
if @cells[row_index]
|
51
|
+
yield @cells[row_index]
|
52
|
+
row_index += 1
|
53
|
+
next
|
54
|
+
end
|
55
|
+
rows_repeated = row_range["table:number-rows-repeated"].to_i
|
56
|
+
break if rows_repeated + row_index + 1 >= 1048576 && options[:force] == false
|
57
|
+
|
58
|
+
cells = row_cells(row_range)
|
59
|
+
yield cells
|
60
|
+
@cells << cells
|
61
|
+
row_index += 1
|
62
|
+
|
63
|
+
if rows_repeated > 1
|
64
|
+
base_row_range = row_range
|
65
|
+
(rows_repeated - 1).times do |i|
|
66
|
+
base_row_range.remove_attribute("number-rows-repeated")
|
67
|
+
base_row_range = base_row_range.add_next_sibling(row_range.dup)
|
68
|
+
base_row_range["table:number-rows-repeated"] = (rows_repeated - i)
|
69
|
+
cells = row_cells(base_row_range)
|
70
|
+
yield cells
|
71
|
+
@cells << cells
|
72
|
+
row_index += 1
|
73
|
+
end
|
74
|
+
end
|
46
75
|
end
|
47
76
|
end
|
48
77
|
|
49
|
-
def each_column
|
78
|
+
def each_column(&block)
|
79
|
+
return Enumerator.new(self, :each_column) unless block
|
80
|
+
self.each_row{|i| i}
|
50
81
|
@cells.transpose.each do |columns|
|
51
82
|
yield columns
|
52
83
|
end
|
53
84
|
end
|
54
85
|
|
86
|
+
private
|
87
|
+
def row_cells(row_range)
|
88
|
+
row_cells = []
|
89
|
+
row_range.xpath(".//table:table-cell|.//table:covered-table-cell").each_with_index do |cell, index|
|
90
|
+
number_repeated = cell["table:number-columns-repeated"].to_i
|
91
|
+
break if number_repeated + index >= 1024
|
92
|
+
|
93
|
+
row_cells << Rusk::Cell.new(cell)
|
94
|
+
|
95
|
+
if number_repeated > 1
|
96
|
+
cell.remove_attribute("number-columns-repeated")
|
97
|
+
base_cell = cell
|
98
|
+
(number_repeated - 1).times do
|
99
|
+
base_cell = base_cell.add_next_sibling(cell.dup)
|
100
|
+
row_cells << Rusk::Cell.new(base_cell)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
row_cells
|
106
|
+
end
|
107
|
+
|
55
108
|
end
|
56
109
|
end
|
data/lib/rusk/version.rb
CHANGED
Binary file
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2">
|
3
|
+
<office:scripts/>
|
4
|
+
<office:font-face-decls>
|
5
|
+
<style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
6
|
+
<style:font-face style:name="MS Pゴシック" svg:font-family="'MS Pゴシック'" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
7
|
+
<style:font-face style:name="Arial Unicode MS" svg:font-family="'Arial Unicode MS'" style:font-family-generic="system" style:font-pitch="variable"/>
|
8
|
+
<style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/>
|
9
|
+
</office:font-face-decls>
|
10
|
+
<office:automatic-styles>
|
11
|
+
<style:style style:name="co1" style:family="table-column">
|
12
|
+
<style:table-column-properties fo:break-before="auto" style:column-width="2.178cm"/>
|
13
|
+
</style:style>
|
14
|
+
<style:style style:name="ro1" style:family="table-row">
|
15
|
+
<style:table-row-properties style:row-height="0.476cm" fo:break-before="auto" style:use-optimal-row-height="false"/>
|
16
|
+
</style:style>
|
17
|
+
<style:style style:name="ta1" style:family="table" style:master-page-name="PageStyle_5f_Sheet1">
|
18
|
+
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
|
19
|
+
</style:style>
|
20
|
+
</office:automatic-styles>
|
21
|
+
<office:body>
|
22
|
+
<office:spreadsheet>
|
23
|
+
<table:calculation-settings table:case-sensitive="false" table:automatic-find-labels="false" table:use-regular-expressions="false">
|
24
|
+
<table:iteration table:maximum-difference="0.0001"/>
|
25
|
+
</table:calculation-settings>
|
26
|
+
<table:table table:name="Sheet1" table:style-name="ta1">
|
27
|
+
<office:forms form:automatic-focus="false" form:apply-design-mode="false"/>
|
28
|
+
<table:table-column table:style-name="co1" table:number-columns-repeated="1024" table:default-cell-style-name="Default"/>
|
29
|
+
<table:table-row table:style-name="ro1">
|
30
|
+
<table:table-cell office:value-type="string">
|
31
|
+
<text:p>created</text:p>
|
32
|
+
</table:table-cell>
|
33
|
+
<table:table-cell table:number-columns-repeated="1023"/>
|
34
|
+
</table:table-row>
|
35
|
+
<table:table-row table:style-name="ro1">
|
36
|
+
<table:table-cell office:value-type="string">
|
37
|
+
<text:p>by</text:p>
|
38
|
+
</table:table-cell>
|
39
|
+
<table:table-cell table:number-columns-repeated="1023"/>
|
40
|
+
</table:table-row>
|
41
|
+
<table:table-row table:style-name="ro1">
|
42
|
+
<table:table-cell office:value-type="string">
|
43
|
+
<text:p>excel</text:p>
|
44
|
+
</table:table-cell>
|
45
|
+
<table:table-cell table:number-columns-repeated="1023"/>
|
46
|
+
</table:table-row>
|
47
|
+
<table:table-row table:style-name="ro1">
|
48
|
+
<table:table-cell office:value-type="float" office:value="2010">
|
49
|
+
<text:p>2010</text:p>
|
50
|
+
</table:table-cell>
|
51
|
+
<table:table-cell table:number-columns-repeated="1023"/>
|
52
|
+
</table:table-row>
|
53
|
+
<table:table-row table:style-name="ro1" table:number-rows-repeated="1048571">
|
54
|
+
<table:table-cell table:number-columns-repeated="1024"/>
|
55
|
+
</table:table-row>
|
56
|
+
<table:table-row table:style-name="ro1">
|
57
|
+
<table:table-cell table:number-columns-repeated="1024"/>
|
58
|
+
</table:table-row>
|
59
|
+
</table:table>
|
60
|
+
<table:named-expressions/>
|
61
|
+
</office:spreadsheet>
|
62
|
+
</office:body>
|
63
|
+
</office:document-content>
|
data/spec/data/general_datas.ods
CHANGED
Binary file
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2">
|
2
|
+
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2">
|
3
3
|
<office:scripts/>
|
4
4
|
<office:font-face-decls>
|
5
5
|
<style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable"/>
|
@@ -11,9 +11,18 @@
|
|
11
11
|
<style:style style:name="co1" style:family="table-column">
|
12
12
|
<style:table-column-properties fo:break-before="auto" style:column-width="2.267cm"/>
|
13
13
|
</style:style>
|
14
|
-
<style:style style:name="
|
14
|
+
<style:style style:name="co2" style:family="table-column">
|
15
|
+
<style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/>
|
16
|
+
</style:style>
|
17
|
+
<style:style style:name="ro1" style:family="table-row">
|
15
18
|
<style:table-row-properties style:row-height="0.448cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
|
16
19
|
</style:style>
|
20
|
+
<style:style style:name="ro2" style:family="table-row">
|
21
|
+
<style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
|
22
|
+
</style:style>
|
23
|
+
<style:style style:name="ro3" style:family="table-row">
|
24
|
+
<style:table-row-properties style:row-height="0.427cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
|
25
|
+
</style:style>
|
17
26
|
<style:style style:name="ta1" style:family="table" style:master-page-name="Default">
|
18
27
|
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
|
19
28
|
</style:style>
|
@@ -35,41 +44,44 @@
|
|
35
44
|
<number:boolean-style style:name="N99">
|
36
45
|
<number:boolean/>
|
37
46
|
</number:boolean-style>
|
38
|
-
<number:time-style style:name="
|
47
|
+
<number:time-style style:name="N10040" number:language="en" number:country="US">
|
39
48
|
<number:hours number:style="long"/>
|
40
49
|
<number:text>:</number:text>
|
41
50
|
<number:minutes number:style="long"/>
|
42
51
|
</number:time-style>
|
43
|
-
<number:date-style style:name="
|
52
|
+
<number:date-style style:name="N10076" number:language="en" number:country="US" number:automatic-order="true">
|
44
53
|
<number:month number:style="long" number:textual="true"/>
|
45
54
|
<number:text> </number:text>
|
46
55
|
<number:day/>
|
47
56
|
<number:text>, </number:text>
|
48
57
|
<number:year number:style="long"/>
|
49
58
|
</number:date-style>
|
50
|
-
<number:currency-style style:name="
|
59
|
+
<number:currency-style style:name="N10104P0" style:volatile="true" number:language="en" number:country="US">
|
51
60
|
<number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol>
|
52
61
|
<number:number number:decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
|
53
62
|
</number:currency-style>
|
54
|
-
<number:currency-style style:name="
|
63
|
+
<number:currency-style style:name="N10104" number:language="en" number:country="US">
|
55
64
|
<style:text-properties fo:color="#ff0000"/>
|
56
65
|
<number:text>-</number:text>
|
57
66
|
<number:currency-symbol number:language="en" number:country="US">$</number:currency-symbol>
|
58
67
|
<number:number number:decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
|
59
|
-
<style:map style:condition="value()>=0" style:apply-style-name="
|
68
|
+
<style:map style:condition="value()>=0" style:apply-style-name="N10104P0"/>
|
60
69
|
</number:currency-style>
|
61
|
-
<style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="
|
62
|
-
<style:style style:name="ce2" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="
|
70
|
+
<style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N10076"/>
|
71
|
+
<style:style style:name="ce2" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N10040"/>
|
63
72
|
<style:style style:name="ce3" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N10"/>
|
64
73
|
<style:style style:name="ce4" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N51"/>
|
65
74
|
<style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/>
|
66
|
-
<style:style style:name="ce6" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="
|
75
|
+
<style:style style:name="ce6" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N10104"/>
|
76
|
+
<style:style style:name="ce7" style:family="table-cell" style:parent-style-name="Default">
|
77
|
+
<style:table-cell-properties fo:border="0.06pt solid #000000"/>
|
78
|
+
</style:style>
|
67
79
|
</office:automatic-styles>
|
68
80
|
<office:body>
|
69
81
|
<office:spreadsheet>
|
70
82
|
<table:table table:name="Sheet1" table:style-name="ta1">
|
71
83
|
<table:table-column table:style-name="co1" table:number-columns-repeated="3" table:default-cell-style-name="Default"/>
|
72
|
-
<table:table-row table:style-name="
|
84
|
+
<table:table-row table:style-name="ro1">
|
73
85
|
<table:table-cell office:value-type="string">
|
74
86
|
<text:p>string</text:p>
|
75
87
|
</table:table-cell>
|
@@ -78,7 +90,7 @@
|
|
78
90
|
</table:table-cell>
|
79
91
|
<table:table-cell/>
|
80
92
|
</table:table-row>
|
81
|
-
<table:table-row table:style-name="
|
93
|
+
<table:table-row table:style-name="ro1">
|
82
94
|
<table:table-cell office:value-type="string">
|
83
95
|
<text:p>date</text:p>
|
84
96
|
</table:table-cell>
|
@@ -87,7 +99,7 @@
|
|
87
99
|
</table:table-cell>
|
88
100
|
<table:table-cell/>
|
89
101
|
</table:table-row>
|
90
|
-
<table:table-row table:style-name="
|
102
|
+
<table:table-row table:style-name="ro1">
|
91
103
|
<table:table-cell office:value-type="string">
|
92
104
|
<text:p>time</text:p>
|
93
105
|
</table:table-cell>
|
@@ -96,7 +108,7 @@
|
|
96
108
|
</table:table-cell>
|
97
109
|
<table:table-cell/>
|
98
110
|
</table:table-row>
|
99
|
-
<table:table-row table:style-name="
|
111
|
+
<table:table-row table:style-name="ro1">
|
100
112
|
<table:table-cell office:value-type="string">
|
101
113
|
<text:p>float</text:p>
|
102
114
|
</table:table-cell>
|
@@ -105,7 +117,7 @@
|
|
105
117
|
</table:table-cell>
|
106
118
|
<table:table-cell/>
|
107
119
|
</table:table-row>
|
108
|
-
<table:table-row table:style-name="
|
120
|
+
<table:table-row table:style-name="ro1">
|
109
121
|
<table:table-cell office:value-type="string" table:number-columns-spanned="2" table:number-rows-spanned="1">
|
110
122
|
<text:p>merged_cell</text:p>
|
111
123
|
</table:table-cell>
|
@@ -114,7 +126,7 @@
|
|
114
126
|
<text:p>after merged column</text:p>
|
115
127
|
</table:table-cell>
|
116
128
|
</table:table-row>
|
117
|
-
<table:table-row table:style-name="
|
129
|
+
<table:table-row table:style-name="ro1">
|
118
130
|
<table:table-cell office:value-type="string" table:number-columns-spanned="1" table:number-rows-spanned="2">
|
119
131
|
<text:p>merged_row cell</text:p>
|
120
132
|
</table:table-cell>
|
@@ -123,36 +135,36 @@
|
|
123
135
|
</table:table-cell>
|
124
136
|
<table:table-cell/>
|
125
137
|
</table:table-row>
|
126
|
-
<table:table-row table:style-name="
|
138
|
+
<table:table-row table:style-name="ro1">
|
127
139
|
<table:covered-table-cell/>
|
128
140
|
<table:table-cell office:value-type="string">
|
129
141
|
<text:p>merged second row cell</text:p>
|
130
142
|
</table:table-cell>
|
131
143
|
<table:table-cell/>
|
132
144
|
</table:table-row>
|
133
|
-
<table:table-row table:style-name="
|
145
|
+
<table:table-row table:style-name="ro1">
|
134
146
|
<table:table-cell office:value-type="string">
|
135
147
|
<text:p>after merged row cell</text:p>
|
136
148
|
</table:table-cell>
|
137
149
|
<table:table-cell table:number-columns-repeated="2"/>
|
138
150
|
</table:table-row>
|
139
|
-
<table:table-row table:style-name="
|
151
|
+
<table:table-row table:style-name="ro1">
|
140
152
|
<table:table-cell table:number-columns-repeated="3"/>
|
141
153
|
</table:table-row>
|
142
|
-
<table:table-row table:style-name="
|
154
|
+
<table:table-row table:style-name="ro1">
|
143
155
|
<table:table-cell office:value-type="string">
|
144
156
|
<text:p>after blank row</text:p>
|
145
157
|
</table:table-cell>
|
146
158
|
<table:table-cell table:number-columns-repeated="2"/>
|
147
159
|
</table:table-row>
|
148
|
-
<table:table-row table:style-name="
|
160
|
+
<table:table-row table:style-name="ro1">
|
149
161
|
<table:table-cell/>
|
150
162
|
<table:table-cell office:value-type="string">
|
151
163
|
<text:p>after blank column</text:p>
|
152
164
|
</table:table-cell>
|
153
165
|
<table:table-cell/>
|
154
166
|
</table:table-row>
|
155
|
-
<table:table-row table:style-name="
|
167
|
+
<table:table-row table:style-name="ro1">
|
156
168
|
<table:table-cell office:value-type="string" table:number-columns-spanned="2" table:number-rows-spanned="1">
|
157
169
|
<text:p>hide the cell next to</text:p>
|
158
170
|
</table:table-cell>
|
@@ -161,7 +173,7 @@
|
|
161
173
|
</table:covered-table-cell>
|
162
174
|
<table:table-cell/>
|
163
175
|
</table:table-row>
|
164
|
-
<table:table-row table:style-name="
|
176
|
+
<table:table-row table:style-name="ro1">
|
165
177
|
<table:table-cell office:value-type="string">
|
166
178
|
<text:p>percentage</text:p>
|
167
179
|
</table:table-cell>
|
@@ -170,7 +182,7 @@
|
|
170
182
|
</table:table-cell>
|
171
183
|
<table:table-cell/>
|
172
184
|
</table:table-row>
|
173
|
-
<table:table-row table:style-name="
|
185
|
+
<table:table-row table:style-name="ro1">
|
174
186
|
<table:table-cell office:value-type="string">
|
175
187
|
<text:p>enter date of time</text:p>
|
176
188
|
</table:table-cell>
|
@@ -179,7 +191,7 @@
|
|
179
191
|
</table:table-cell>
|
180
192
|
<table:table-cell/>
|
181
193
|
</table:table-row>
|
182
|
-
<table:table-row table:style-name="
|
194
|
+
<table:table-row table:style-name="ro1">
|
183
195
|
<table:table-cell office:value-type="string">
|
184
196
|
<text:p>boolean</text:p>
|
185
197
|
</table:table-cell>
|
@@ -190,7 +202,7 @@
|
|
190
202
|
<text:p>FALSE</text:p>
|
191
203
|
</table:table-cell>
|
192
204
|
</table:table-row>
|
193
|
-
<table:table-row table:style-name="
|
205
|
+
<table:table-row table:style-name="ro1">
|
194
206
|
<table:table-cell office:value-type="string">
|
195
207
|
<text:p>currency</text:p>
|
196
208
|
</table:table-cell>
|
@@ -200,18 +212,31 @@
|
|
200
212
|
<table:table-cell/>
|
201
213
|
</table:table-row>
|
202
214
|
</table:table>
|
203
|
-
<table:table table:name="
|
204
|
-
<table:table-column table:style-name="co1" table:default-cell-style-name="
|
205
|
-
<table:table-
|
206
|
-
|
215
|
+
<table:table table:name="rows-repeated" table:style-name="ta1">
|
216
|
+
<table:table-column table:style-name="co1" table:default-cell-style-name="ce7"/>
|
217
|
+
<table:table-column table:style-name="co2" table:default-cell-style-name="ce7"/>
|
218
|
+
<table:table-row table:style-name="ro3">
|
219
|
+
<table:table-cell office:value-type="string">
|
220
|
+
<text:p>title1</text:p>
|
221
|
+
</table:table-cell>
|
222
|
+
<table:table-cell office:value-type="string">
|
223
|
+
<text:p>title2</text:p>
|
224
|
+
</table:table-cell>
|
225
|
+
</table:table-row>
|
226
|
+
<table:table-row table:style-name="ro3" table:number-rows-repeated="10">
|
227
|
+
<table:table-cell table:number-columns-repeated="2"/>
|
228
|
+
</table:table-row>
|
229
|
+
<table:table-row table:style-name="ro3">
|
230
|
+
<table:table-cell table:number-columns-repeated="2"/>
|
207
231
|
</table:table-row>
|
208
232
|
</table:table>
|
209
233
|
<table:table table:name="Sheet3" table:style-name="ta1">
|
210
234
|
<table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
|
211
|
-
<table:table-row table:style-name="
|
235
|
+
<table:table-row table:style-name="ro1">
|
212
236
|
<table:table-cell/>
|
213
237
|
</table:table-row>
|
214
238
|
</table:table>
|
239
|
+
<table:named-expressions/>
|
215
240
|
</office:spreadsheet>
|
216
241
|
</office:body>
|
217
242
|
</office:document-content>
|
data/spec/sheet_spec.rb
CHANGED
@@ -3,60 +3,111 @@ require File.expand_path('spec_helper', File.dirname(__FILE__))
|
|
3
3
|
|
4
4
|
describe Rusk::Sheet do
|
5
5
|
before do
|
6
|
-
content = Nokogiri::XML(File.read("#{dir}/general_datas_content.xml"))
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
6
|
+
@content = Nokogiri::XML(File.read("#{dir}/general_datas_content.xml"))
|
7
|
+
end
|
8
|
+
|
9
|
+
shared_context "read Sheet1" do
|
10
|
+
before do
|
11
|
+
@sheet = Rusk::Sheet.new(@content.xpath("//table:table")[0])
|
12
|
+
@cells = [
|
13
|
+
["string", "mruby", ""],
|
14
|
+
["date", Date.new(2012,04,29), ""],
|
15
|
+
["time", "16:50", ""],
|
16
|
+
["float", 7000.0, ""],
|
17
|
+
["merged_cell", "", "after merged column"],
|
18
|
+
["merged_row cell", "merged first row cell", ""],
|
19
|
+
["", "merged second row cell", ""],
|
20
|
+
["after merged row cell", "", ""],
|
21
|
+
["", "", ""],
|
22
|
+
["after blank row", "", ""],
|
23
|
+
["", "after blank column", ""],
|
24
|
+
["hide the cell next to", "hidden cell", ""],
|
25
|
+
["percentage", 0.1, ""],
|
26
|
+
["enter date of time", DateTime.new(2012,5,26,18,17), ""],
|
27
|
+
["boolean", true, false],
|
28
|
+
["currency", 10.0, ""]
|
29
|
+
]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
shared_context "read rows-repeated" do
|
34
|
+
before do
|
35
|
+
@sheet = Rusk::Sheet.new(@content.xpath("//table:table")[1])
|
36
|
+
@cells = [
|
37
|
+
["title1", "title2"],
|
38
|
+
["", ""],
|
39
|
+
["", ""],
|
40
|
+
["", ""],
|
41
|
+
["", ""],
|
42
|
+
["", ""],
|
43
|
+
["", ""],
|
44
|
+
["", ""],
|
45
|
+
["", ""],
|
46
|
+
["", ""],
|
47
|
+
["", ""],
|
48
|
+
["", ""]
|
49
|
+
]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
shared_context "read file created from excel 2010" do
|
54
|
+
before do
|
55
|
+
content = Nokogiri::XML(File.read("#{dir}/created_from_excel2010_content.xml"))
|
56
|
+
@sheet = Rusk::Sheet.new(content.xpath("//table:table")[0])
|
57
|
+
@cells = [["created"], ["by"], ["excel"], [2010.0]]
|
58
|
+
end
|
26
59
|
end
|
27
60
|
|
28
61
|
describe "#name" do
|
62
|
+
include_context "read Sheet1"
|
29
63
|
it { @sheet.name.should eq "Sheet1" }
|
30
64
|
end
|
31
65
|
|
32
66
|
describe "#[]" do
|
33
|
-
context "
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
context "with not exist cell index" do
|
48
|
-
context "when row is existing, column is not existing" do
|
49
|
-
it { @sheet[0, 1000].should be_nil }
|
67
|
+
context "read Sheet1(merged, columns-repeated, various data type)" do
|
68
|
+
include_context "read Sheet1"
|
69
|
+
context "with exist cell index" do
|
70
|
+
it { @sheet[2, 1].should be_kind_of Rusk::Cell }
|
71
|
+
it { @sheet[0, 0].value.should eq "string" }
|
72
|
+
it { @sheet[0, 1].value.should eq "mruby" }
|
73
|
+
it { @sheet[1, 1].value.should eq Date.new(2012,4,29) }
|
74
|
+
it { @sheet[4, 2].value.should eq 'after merged column' }
|
75
|
+
it { @sheet[5, 1].value.should eq 'merged first row cell' }
|
76
|
+
it { @sheet[6, 1].value.should eq 'merged second row cell' }
|
77
|
+
it { @sheet[8, 0].value.should eq "" }
|
78
|
+
it { @sheet[8, 1].value.should eq "" }
|
79
|
+
it { @sheet[11, 0].value.should eq 'hide the cell next to' }
|
80
|
+
it { @sheet[11, 1].value.should eq 'hidden cell' }
|
50
81
|
end
|
51
82
|
|
52
|
-
context "
|
53
|
-
|
83
|
+
context "with not exist cell index" do
|
84
|
+
context "when row is existing, column is not existing" do
|
85
|
+
it { @sheet[0, 1000].should be_nil }
|
86
|
+
end
|
87
|
+
|
88
|
+
context "when row and column is not existing" do
|
89
|
+
it { @sheet[1000, 10000].should be_nil }
|
90
|
+
end
|
54
91
|
end
|
55
92
|
end
|
56
93
|
|
94
|
+
context "read rows-repeated" do
|
95
|
+
include_context "read rows-repeated"
|
96
|
+
it { @sheet.map(&:value).should have(24).items }
|
97
|
+
it { @sheet.map(&:value).should eq @cells.flatten }
|
98
|
+
end
|
99
|
+
|
100
|
+
context "read created_from_excel2010" do
|
101
|
+
include_context "read file created from excel 2010"
|
102
|
+
it { @sheet[0, 0].value.should eq "created" }
|
103
|
+
it { @sheet[1, 0].value.should eq "by" }
|
104
|
+
it { @sheet.map(&:value).should eq @cells.flatten }
|
105
|
+
end
|
106
|
+
|
57
107
|
end
|
58
108
|
|
59
109
|
describe "#each" do
|
110
|
+
include_context "read Sheet1"
|
60
111
|
it "access order by row and column" do
|
61
112
|
cells = @cells.flatten
|
62
113
|
index = 0
|
@@ -64,20 +115,55 @@ describe Rusk::Sheet do
|
|
64
115
|
cell.value.should eq cells[index]
|
65
116
|
index += 1
|
66
117
|
end
|
118
|
+
|
119
|
+
index.should eq cells.size
|
120
|
+
end
|
121
|
+
|
122
|
+
context "without block" do
|
123
|
+
it { @sheet.each.should be_kind_of Enumerator }
|
67
124
|
end
|
68
125
|
end
|
69
126
|
|
70
127
|
describe "#each_row" do
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
128
|
+
shared_examples "Sheet#each_row access order by first row" do
|
129
|
+
it "access order by first row" do
|
130
|
+
index = 0
|
131
|
+
@sheet.each_row do |rows|
|
132
|
+
rows.map(&:value).should eq @cells[index]
|
133
|
+
index += 1
|
134
|
+
end
|
135
|
+
|
136
|
+
index.should eq @cells.size
|
76
137
|
end
|
77
138
|
end
|
139
|
+
|
140
|
+
context "read Sheet1 of general_datas.ods" do
|
141
|
+
include_context "read Sheet1"
|
142
|
+
it_behaves_like "Sheet#each_row access order by first row"
|
143
|
+
end
|
144
|
+
|
145
|
+
context "read file created from excel" do
|
146
|
+
include_context "read file created from excel 2010"
|
147
|
+
it_behaves_like "Sheet#each_row access order by first row"
|
148
|
+
|
149
|
+
context "once call Sheet#each_row" do
|
150
|
+
before do
|
151
|
+
@sheet.each_row do |cell|
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
it_behaves_like "Sheet#each_row access order by first row"
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context "without block" do
|
160
|
+
include_context "read Sheet1"
|
161
|
+
it { @sheet.each_row.should be_kind_of Enumerator }
|
162
|
+
end
|
78
163
|
end
|
79
164
|
|
80
165
|
describe "#each_column" do
|
166
|
+
include_context "read Sheet1"
|
81
167
|
it "access order by first column" do
|
82
168
|
index = 0
|
83
169
|
cells = @cells.transpose
|
@@ -85,6 +171,11 @@ describe Rusk::Sheet do
|
|
85
171
|
columns.map(&:value).should eq cells[index]
|
86
172
|
index += 1
|
87
173
|
end
|
174
|
+
index.should eq cells.size
|
175
|
+
end
|
176
|
+
|
177
|
+
context "without block" do
|
178
|
+
it { @sheet.each_column.should be_kind_of Enumerator }
|
88
179
|
end
|
89
180
|
end
|
90
181
|
|
@@ -110,6 +201,46 @@ describe Rusk::Sheet do
|
|
110
201
|
it { @book[1].name.should eq "changed" }
|
111
202
|
end
|
112
203
|
end
|
204
|
+
|
205
|
+
context "read rows-repeated" do
|
206
|
+
before do
|
207
|
+
Rusk::Book.open(@tmp_file) do |book|
|
208
|
+
sheet = book[1]
|
209
|
+
sheet[1, 1].value = "modified 1,1"
|
210
|
+
sheet[2, 1].value = "modified 2,1"
|
211
|
+
sheet[3, 0].value = "modified 3,0"
|
212
|
+
sheet[3, 1].value = "modified 3,1"
|
213
|
+
sheet[11, 1].value = "modified 11,1"
|
214
|
+
sheet[5, 1].value = "modified 5,1"
|
215
|
+
book.save
|
216
|
+
end
|
217
|
+
@sheet = Rusk::Book.open(@tmp_file)[1]
|
218
|
+
end
|
219
|
+
|
220
|
+
it { @sheet[1,0].value.should eq "" }
|
221
|
+
it { @sheet[1,1].value.should eq "modified 1,1" }
|
222
|
+
it { @sheet[2,0].value.should eq "" }
|
223
|
+
it { @sheet[2,1].value.should eq "modified 2,1" }
|
224
|
+
it { @sheet[3,0].value.should eq "modified 3,0" }
|
225
|
+
it { @sheet[3,1].value.should eq "modified 3,1" }
|
226
|
+
it { @sheet[4,0].value.should eq "" }
|
227
|
+
it { @sheet[4,1].value.should eq "" }
|
228
|
+
it { @sheet[5,0].value.should eq "" }
|
229
|
+
it { @sheet[5,1].value.should eq "modified 5,1" }
|
230
|
+
it { @sheet[6,0].value.should eq "" }
|
231
|
+
it { @sheet[6,1].value.should eq "" }
|
232
|
+
it { @sheet[7,0].value.should eq "" }
|
233
|
+
it { @sheet[7,1].value.should eq "" }
|
234
|
+
it { @sheet[8,0].value.should eq "" }
|
235
|
+
it { @sheet[8,1].value.should eq "" }
|
236
|
+
it { @sheet[9,0].value.should eq "" }
|
237
|
+
it { @sheet[9,1].value.should eq "" }
|
238
|
+
it { @sheet[10,0].value.should eq "" }
|
239
|
+
it { @sheet[10,1].value.should eq "" }
|
240
|
+
it { @sheet[11,0].value.should eq "" }
|
241
|
+
it { @sheet[11,1].value.should eq "modified 11,1" }
|
242
|
+
|
243
|
+
end
|
113
244
|
end
|
114
245
|
|
115
246
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rusk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubyzip
|
@@ -178,6 +178,8 @@ files:
|
|
178
178
|
- rusk.gemspec
|
179
179
|
- spec/book_spec.rb
|
180
180
|
- spec/cell_spec.rb
|
181
|
+
- spec/data/created_from_excel2010.ods
|
182
|
+
- spec/data/created_from_excel2010_content.xml
|
181
183
|
- spec/data/general_datas.ods
|
182
184
|
- spec/data/general_datas_content.xml
|
183
185
|
- spec/sheet_spec.rb
|
@@ -196,7 +198,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
196
198
|
version: '0'
|
197
199
|
segments:
|
198
200
|
- 0
|
199
|
-
hash: -
|
201
|
+
hash: -564749220511002682
|
200
202
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
203
|
none: false
|
202
204
|
requirements:
|
@@ -205,16 +207,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
207
|
version: '0'
|
206
208
|
segments:
|
207
209
|
- 0
|
208
|
-
hash: -
|
210
|
+
hash: -564749220511002682
|
209
211
|
requirements: []
|
210
212
|
rubyforge_project:
|
211
|
-
rubygems_version: 1.8.
|
213
|
+
rubygems_version: 1.8.23
|
212
214
|
signing_key:
|
213
215
|
specification_version: 3
|
214
216
|
summary: Read and write Open Document Spreadsheet Format(ods).
|
215
217
|
test_files:
|
216
218
|
- spec/book_spec.rb
|
217
219
|
- spec/cell_spec.rb
|
220
|
+
- spec/data/created_from_excel2010.ods
|
221
|
+
- spec/data/created_from_excel2010_content.xml
|
218
222
|
- spec/data/general_datas.ods
|
219
223
|
- spec/data/general_datas_content.xml
|
220
224
|
- spec/sheet_spec.rb
|