rexcel 0.1.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/benchmark/rexcel_benchmark.rb +70 -0
- data/examples/example.rb +29 -0
- data/examples/example_color.rb +43 -0
- data/examples/example_format.rb +23 -0
- data/lib/rexcel.rb +166 -0
- data/lib/rexcel/cell.rb +130 -0
- data/lib/rexcel/row.rb +73 -0
- data/lib/rexcel/style.rb +224 -0
- data/lib/rexcel/workbook.rb +229 -0
- data/lib/rexcel/worksheet.rb +92 -0
- data/unittest/expected/Test_Style_xlm-test_backgroundcolor-gray.xml +34 -0
- data/unittest/expected/Test_Style_xlm-test_bold-bold.xml +34 -0
- data/unittest/expected/Test_Style_xlm-test_color-gray.xml +34 -0
- data/unittest/expected/Test_Style_xlm-test_italic-italic.xml +34 -0
- data/unittest/expected/Test_workbook-test_save_xml.xml +29 -0
- data/unittest/test_rexcel.rb +725 -0
- metadata +139 -0
@@ -0,0 +1,92 @@
|
|
1
|
+
module Excel
|
2
|
+
=begin rdoc
|
3
|
+
Implements a worksheet.
|
4
|
+
|
5
|
+
Worksheets are part of a Workbook and contain Row
|
6
|
+
=end
|
7
|
+
class Worksheet
|
8
|
+
def initialize( name = nil, options = {})
|
9
|
+
@log = options[:log] || LOGGER
|
10
|
+
@name = name || 'Sheet'
|
11
|
+
@columns = []
|
12
|
+
@rows = []
|
13
|
+
options.each{|key,value|
|
14
|
+
case key
|
15
|
+
when :log
|
16
|
+
else
|
17
|
+
@log.warn("Excel::Worksheet: undefined option #{option}")
|
18
|
+
end
|
19
|
+
}
|
20
|
+
end
|
21
|
+
#Name of the sheet
|
22
|
+
attr_reader :name
|
23
|
+
#Array with columns sequence. Needed to insert Hashes.
|
24
|
+
attr_reader :columns
|
25
|
+
#Array with rows
|
26
|
+
attr_reader :rows
|
27
|
+
=begin rdoc
|
28
|
+
Add content to the worksheet.
|
29
|
+
* Array: Added as Row to the actual worksheet.
|
30
|
+
* Hash: Added as Row to the actual worksheet. Requires the definition of columns
|
31
|
+
* Row: Added the actual worksheet.
|
32
|
+
|
33
|
+
If no actual worksheet is available, a new worksheet i created.
|
34
|
+
=end
|
35
|
+
def << (insertion)
|
36
|
+
case insertion
|
37
|
+
when Array
|
38
|
+
@rows << row = Row.new()
|
39
|
+
row << insertion
|
40
|
+
when Hash
|
41
|
+
raise ArgumentError, "#{Worksheet}: Hash without heading data" if @columns.empty?
|
42
|
+
@rows << row = Row.new()
|
43
|
+
@log.fatal("Worksheet: Fixme Columns definition")
|
44
|
+
@columns.each{|column|
|
45
|
+
row << insertion[column]
|
46
|
+
}
|
47
|
+
when Row
|
48
|
+
@rows << insertion
|
49
|
+
else
|
50
|
+
raise ArgumentError, "#{Worksheet}: Wrong insertion type #{insertion.inspect}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
=begin rdoc
|
54
|
+
Build the xml for the work sheet.
|
55
|
+
|
56
|
+
ns must be a method-object to implement the namespace definitions.
|
57
|
+
=end
|
58
|
+
def to_xml(xmlbuilder, ns)
|
59
|
+
raise EmptyError, "Worksheet #{@name} without content" if @rows.empty?
|
60
|
+
|
61
|
+
@log.debug("Prepare XML for worksheet #{@name}")
|
62
|
+
xmlbuilder[ns.call].Worksheet(ns.call('Name') => @name){
|
63
|
+
xmlbuilder[ns.call].Table(){
|
64
|
+
#~ xmlbuilder[ns.call].Column( ns.call('Width') => 100)
|
65
|
+
@rows.each{|row|
|
66
|
+
row.to_xml(xmlbuilder, ns)
|
67
|
+
} #row
|
68
|
+
}
|
69
|
+
}
|
70
|
+
end #to_xml
|
71
|
+
=begin rdoc
|
72
|
+
Build the xls for the work sheet.
|
73
|
+
|
74
|
+
Receives a OLE-Worksheet.
|
75
|
+
=end
|
76
|
+
def to_xls(ws)
|
77
|
+
@log.debug("Prepare Worksheet #{@name}")
|
78
|
+
ws.Name = @name
|
79
|
+
|
80
|
+
#fixme: Add styles
|
81
|
+
#~ @log.warn("XLS contains no styles")
|
82
|
+
|
83
|
+
@rows.each_with_index{|row, rownum|
|
84
|
+
row.columns.each_with_index{|col, colnum|
|
85
|
+
@log.debug("Prepare cell #{rownum+1},#{colnum+1}")
|
86
|
+
col.to_xls( ws.Cells(rownum+1, colnum+1), row )
|
87
|
+
}#columns in row
|
88
|
+
}#rows
|
89
|
+
end #to_xls
|
90
|
+
|
91
|
+
end #class Worksheet
|
92
|
+
end #module Excel
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<ss:Styles>
|
4
|
+
<ss:Style ss:ID="1">
|
5
|
+
<ss:Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
|
6
|
+
</ss:Style>
|
7
|
+
</ss:Styles>
|
8
|
+
<ss:Worksheet ss:Name="Sheet">
|
9
|
+
<ss:Table>
|
10
|
+
<ss:Row>
|
11
|
+
<ss:Cell>
|
12
|
+
<ss:Data ss:Type="String">Normal text</ss:Data>
|
13
|
+
</ss:Cell>
|
14
|
+
<ss:Cell ss:StyleID="1">
|
15
|
+
<ss:Data ss:Type="String">gray text</ss:Data>
|
16
|
+
</ss:Cell>
|
17
|
+
</ss:Row>
|
18
|
+
<ss:Row ss:StyleID="1">
|
19
|
+
<ss:Cell>
|
20
|
+
<ss:Data ss:Type="Number">1</ss:Data>
|
21
|
+
</ss:Cell>
|
22
|
+
<ss:Cell>
|
23
|
+
<ss:Data ss:Type="Number">2</ss:Data>
|
24
|
+
</ss:Cell>
|
25
|
+
<ss:Cell>
|
26
|
+
<ss:Data ss:Type="Number">3</ss:Data>
|
27
|
+
</ss:Cell>
|
28
|
+
<ss:Cell>
|
29
|
+
<ss:Data ss:Type="Number">4</ss:Data>
|
30
|
+
</ss:Cell>
|
31
|
+
</ss:Row>
|
32
|
+
</ss:Table>
|
33
|
+
</ss:Worksheet>
|
34
|
+
</ss:Workbook>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<ss:Styles>
|
4
|
+
<ss:Style ss:ID="1">
|
5
|
+
<ss:Font ss:Bold="1"/>
|
6
|
+
</ss:Style>
|
7
|
+
</ss:Styles>
|
8
|
+
<ss:Worksheet ss:Name="Sheet">
|
9
|
+
<ss:Table>
|
10
|
+
<ss:Row>
|
11
|
+
<ss:Cell>
|
12
|
+
<ss:Data ss:Type="String">Normal text</ss:Data>
|
13
|
+
</ss:Cell>
|
14
|
+
<ss:Cell ss:StyleID="1">
|
15
|
+
<ss:Data ss:Type="String">bold text</ss:Data>
|
16
|
+
</ss:Cell>
|
17
|
+
</ss:Row>
|
18
|
+
<ss:Row ss:StyleID="1">
|
19
|
+
<ss:Cell>
|
20
|
+
<ss:Data ss:Type="Number">1</ss:Data>
|
21
|
+
</ss:Cell>
|
22
|
+
<ss:Cell>
|
23
|
+
<ss:Data ss:Type="Number">2</ss:Data>
|
24
|
+
</ss:Cell>
|
25
|
+
<ss:Cell>
|
26
|
+
<ss:Data ss:Type="Number">3</ss:Data>
|
27
|
+
</ss:Cell>
|
28
|
+
<ss:Cell>
|
29
|
+
<ss:Data ss:Type="Number">4</ss:Data>
|
30
|
+
</ss:Cell>
|
31
|
+
</ss:Row>
|
32
|
+
</ss:Table>
|
33
|
+
</ss:Worksheet>
|
34
|
+
</ss:Workbook>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<ss:Styles>
|
4
|
+
<ss:Style ss:ID="1">
|
5
|
+
<ss:Font ss:Color="#C0C0C0"/>
|
6
|
+
</ss:Style>
|
7
|
+
</ss:Styles>
|
8
|
+
<ss:Worksheet ss:Name="Sheet">
|
9
|
+
<ss:Table>
|
10
|
+
<ss:Row>
|
11
|
+
<ss:Cell>
|
12
|
+
<ss:Data ss:Type="String">Normal text</ss:Data>
|
13
|
+
</ss:Cell>
|
14
|
+
<ss:Cell ss:StyleID="1">
|
15
|
+
<ss:Data ss:Type="String">gray text</ss:Data>
|
16
|
+
</ss:Cell>
|
17
|
+
</ss:Row>
|
18
|
+
<ss:Row ss:StyleID="1">
|
19
|
+
<ss:Cell>
|
20
|
+
<ss:Data ss:Type="Number">1</ss:Data>
|
21
|
+
</ss:Cell>
|
22
|
+
<ss:Cell>
|
23
|
+
<ss:Data ss:Type="Number">2</ss:Data>
|
24
|
+
</ss:Cell>
|
25
|
+
<ss:Cell>
|
26
|
+
<ss:Data ss:Type="Number">3</ss:Data>
|
27
|
+
</ss:Cell>
|
28
|
+
<ss:Cell>
|
29
|
+
<ss:Data ss:Type="Number">4</ss:Data>
|
30
|
+
</ss:Cell>
|
31
|
+
</ss:Row>
|
32
|
+
</ss:Table>
|
33
|
+
</ss:Worksheet>
|
34
|
+
</ss:Workbook>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<ss:Styles>
|
4
|
+
<ss:Style ss:ID="1">
|
5
|
+
<ss:Font ss:Italic="1"/>
|
6
|
+
</ss:Style>
|
7
|
+
</ss:Styles>
|
8
|
+
<ss:Worksheet ss:Name="Sheet">
|
9
|
+
<ss:Table>
|
10
|
+
<ss:Row>
|
11
|
+
<ss:Cell>
|
12
|
+
<ss:Data ss:Type="String">Normal text</ss:Data>
|
13
|
+
</ss:Cell>
|
14
|
+
<ss:Cell ss:StyleID="1">
|
15
|
+
<ss:Data ss:Type="String">italic text</ss:Data>
|
16
|
+
</ss:Cell>
|
17
|
+
</ss:Row>
|
18
|
+
<ss:Row ss:StyleID="1">
|
19
|
+
<ss:Cell>
|
20
|
+
<ss:Data ss:Type="Number">1</ss:Data>
|
21
|
+
</ss:Cell>
|
22
|
+
<ss:Cell>
|
23
|
+
<ss:Data ss:Type="Number">2</ss:Data>
|
24
|
+
</ss:Cell>
|
25
|
+
<ss:Cell>
|
26
|
+
<ss:Data ss:Type="Number">3</ss:Data>
|
27
|
+
</ss:Cell>
|
28
|
+
<ss:Cell>
|
29
|
+
<ss:Data ss:Type="Number">4</ss:Data>
|
30
|
+
</ss:Cell>
|
31
|
+
</ss:Row>
|
32
|
+
</ss:Table>
|
33
|
+
</ss:Worksheet>
|
34
|
+
</ss:Workbook>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<ss:Worksheet ss:Name="Sheet0">
|
4
|
+
<ss:Table>
|
5
|
+
<ss:Row>
|
6
|
+
<ss:Cell>
|
7
|
+
<ss:Data ss:Type="Number">1</ss:Data>
|
8
|
+
</ss:Cell>
|
9
|
+
<ss:Cell>
|
10
|
+
<ss:Data ss:Type="Number">2</ss:Data>
|
11
|
+
</ss:Cell>
|
12
|
+
<ss:Cell>
|
13
|
+
<ss:Data ss:Type="Number">3</ss:Data>
|
14
|
+
</ss:Cell>
|
15
|
+
</ss:Row>
|
16
|
+
<ss:Row>
|
17
|
+
<ss:Cell>
|
18
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
19
|
+
</ss:Cell>
|
20
|
+
<ss:Cell>
|
21
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
22
|
+
</ss:Cell>
|
23
|
+
<ss:Cell>
|
24
|
+
<ss:Data ss:Type="String">c</ss:Data>
|
25
|
+
</ss:Cell>
|
26
|
+
</ss:Row>
|
27
|
+
</ss:Table>
|
28
|
+
</ss:Worksheet>
|
29
|
+
</ss:Workbook>
|
@@ -0,0 +1,725 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require 'test/unit'
|
3
|
+
require "more_unit_test/assert_equal_filecontent.rb" #assert_equal_filecontent
|
4
|
+
|
5
|
+
=begin
|
6
|
+
Offen:
|
7
|
+
* Zelltypen
|
8
|
+
* Attribute (row/cell)
|
9
|
+
=end
|
10
|
+
|
11
|
+
$:.unshift('../lib') if $0 == __FILE__
|
12
|
+
require 'rexcel'
|
13
|
+
Excel::LOGGER.level = Log4r::OFF #only really important messages
|
14
|
+
|
15
|
+
#Encoding from OLE/Excel
|
16
|
+
XLS_ENCODING = Encoding.find("CP850")
|
17
|
+
|
18
|
+
=begin rdoc
|
19
|
+
Mock a document.
|
20
|
+
|
21
|
+
Must defined
|
22
|
+
* namespace, including the ns-method
|
23
|
+
* xml-frame using and defining the namespace
|
24
|
+
|
25
|
+
Usage:
|
26
|
+
assert_equal(%{},
|
27
|
+
@mock.testcase{|builder, ns_proc|
|
28
|
+
row.to_xml( builder,ns_proc)
|
29
|
+
})
|
30
|
+
=end
|
31
|
+
class Mock_document
|
32
|
+
def initialize()
|
33
|
+
@namespace = 'ss'
|
34
|
+
end
|
35
|
+
def ns(attr=nil)
|
36
|
+
attr ? "%s:%s" % [@namespace, attr] : @namespace
|
37
|
+
end
|
38
|
+
=begin rdoc
|
39
|
+
Build relevant xml-part
|
40
|
+
=end
|
41
|
+
def testcase()
|
42
|
+
builder = Nokogiri::XML::Builder.new(){|builder|
|
43
|
+
builder.Test( "xmlns:#{@namespace}" =>"urn:schemas-microsoft-com:office:spreadsheet"){|builder|
|
44
|
+
yield builder, method(:ns)
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
# builder.to_xml #complete xml
|
49
|
+
|
50
|
+
#extract content from block
|
51
|
+
doc = Nokogiri::XML::Document.parse(builder.to_xml)
|
52
|
+
doc.at_css('Test').children.to_xml.strip
|
53
|
+
end
|
54
|
+
end
|
55
|
+
=begin rdoc
|
56
|
+
CHeck identic content of xls[x]-files with Beyond Compare.
|
57
|
+
|
58
|
+
RCs:
|
59
|
+
0 Success
|
60
|
+
1 Binary same
|
61
|
+
2 Rules-based same
|
62
|
+
11 Binary differences
|
63
|
+
12 Similar
|
64
|
+
13 Rules-based differences
|
65
|
+
14 Conflicts detected
|
66
|
+
100 Unknown error
|
67
|
+
101 Conflicts detected, merge output not written
|
68
|
+
102 BComp.exe unable to wait until BCompare.exe finishes
|
69
|
+
103 BComp.exe cannot find BCompare.exe
|
70
|
+
104 Trial period expired
|
71
|
+
105 Error loading script file
|
72
|
+
106 Script syntax error
|
73
|
+
107 Script failed to load folders or files
|
74
|
+
|
75
|
+
Doesn't recognice type differences (eg. 1 == '1' )
|
76
|
+
=end
|
77
|
+
|
78
|
+
def test_bc(file1,file2)
|
79
|
+
|
80
|
+
bc_exe = "C:\\Program Files\\Beyond Compare 3\\BCompare.exe"
|
81
|
+
if ! File.exist?(bc_exe)
|
82
|
+
puts "Beyond compare not found - ignore test"
|
83
|
+
return 2
|
84
|
+
end
|
85
|
+
cmd = [
|
86
|
+
'"%s"' % bc_exe,
|
87
|
+
file1, file2,
|
88
|
+
'/qc'
|
89
|
+
].join(" ")
|
90
|
+
|
91
|
+
system(cmd)
|
92
|
+
$? >> 8 #exit status
|
93
|
+
end
|
94
|
+
|
95
|
+
class Test_excel < Test::Unit::TestCase
|
96
|
+
def test_version()
|
97
|
+
assert_equal('0.1.0', Excel::VERSION)
|
98
|
+
end
|
99
|
+
end #class Test_excel < Test::Unit::TestCase
|
100
|
+
|
101
|
+
class Test_ole < Test::Unit::TestCase
|
102
|
+
def test_singleton()
|
103
|
+
|
104
|
+
assert_instance_of( Excel::Excel, Excel::Excel.instance )
|
105
|
+
assert_equal( Excel::Excel.instance.object_id, Excel::Excel.instance.object_id )
|
106
|
+
assert_instance_of( WIN32OLE, Excel::Excel.instance.xl )
|
107
|
+
#~ Excel::Excel.instance.close
|
108
|
+
#~ assert_nil(Excel::Excel.instance.xl )
|
109
|
+
#~ Excel::Excel.instance.reconnect
|
110
|
+
#~ assert_instance_of( WIN32OLE, Excel::Excel.instance.xl )
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
end #class Test_excel < Test::Unit::TestCase
|
115
|
+
|
116
|
+
|
117
|
+
class Test_workbook < Test::Unit::TestCase
|
118
|
+
FILELIST = %w{
|
119
|
+
test_save_xml.xml test_save_xml.xls test_save_xml.xlsx
|
120
|
+
test_save.xls test_save.xlsx}
|
121
|
+
def setup()
|
122
|
+
FILELIST.each{|fn|
|
123
|
+
File.delete(fn) if File.exist?(fn)
|
124
|
+
}
|
125
|
+
end
|
126
|
+
def teardown()
|
127
|
+
FILELIST.each{|fn|
|
128
|
+
File.delete(fn) if File.exist?(fn)
|
129
|
+
}
|
130
|
+
end
|
131
|
+
def test_init()
|
132
|
+
assert_nothing_raised{ Excel::Workbook.new() }
|
133
|
+
assert_nothing_raised{ Excel::Workbook.new( Excel::LOGGER) }
|
134
|
+
assert_raise(ArgumentError){ Excel::Workbook.new( 1 ) }
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_save_xml()
|
138
|
+
|
139
|
+
assert_false( File.exist?('test_save_xml.xml'))
|
140
|
+
assert_false( File.exist?('test_save_xml.xls'))
|
141
|
+
assert_false( File.exist?('test_save_xml.xlsx'))
|
142
|
+
|
143
|
+
wb = Excel::Workbook.new()
|
144
|
+
wb << [1,2,3] #add anything, else you get an error
|
145
|
+
wb << ['a','b','c'] #add anything, else you get an error
|
146
|
+
assert_nothing_raised{ wb.save('test_save_xml.xml') }
|
147
|
+
assert_nothing_raised{ wb.save('test_save_xml.xls', 'test_save_xml.xml')}
|
148
|
+
assert_nothing_raised{ wb.save('test_save_xml.xlsx', 'test_save_xml.xml')}
|
149
|
+
|
150
|
+
assert_true( File.exist?('test_save_xml.xml'))
|
151
|
+
assert_true( File.exist?('test_save_xml.xls'))
|
152
|
+
assert_true( File.exist?('test_save_xml.xlsx'))
|
153
|
+
|
154
|
+
|
155
|
+
#~ assert_equal_filecontent( "expected/%s-%s.xml" %[self.class, __method__],
|
156
|
+
#~ wb.build_excel_xml('ss') )
|
157
|
+
assert_equal( %{<?xml version="1.0"?>
|
158
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
159
|
+
<ss:Worksheet ss:Name="Sheet0">
|
160
|
+
<ss:Table>
|
161
|
+
<ss:Row>
|
162
|
+
<ss:Cell>
|
163
|
+
<ss:Data ss:Type="Number">1</ss:Data>
|
164
|
+
</ss:Cell>
|
165
|
+
<ss:Cell>
|
166
|
+
<ss:Data ss:Type="Number">2</ss:Data>
|
167
|
+
</ss:Cell>
|
168
|
+
<ss:Cell>
|
169
|
+
<ss:Data ss:Type="Number">3</ss:Data>
|
170
|
+
</ss:Cell>
|
171
|
+
</ss:Row>
|
172
|
+
<ss:Row>
|
173
|
+
<ss:Cell>
|
174
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
175
|
+
</ss:Cell>
|
176
|
+
<ss:Cell>
|
177
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
178
|
+
</ss:Cell>
|
179
|
+
<ss:Cell>
|
180
|
+
<ss:Data ss:Type="String">c</ss:Data>
|
181
|
+
</ss:Cell>
|
182
|
+
</ss:Row>
|
183
|
+
</ss:Table>
|
184
|
+
</ss:Worksheet>
|
185
|
+
</ss:Workbook>},
|
186
|
+
wb.build_excel_xml('ss') )
|
187
|
+
|
188
|
+
assert_equal( 2, test_bc('test_save_xml.xls', 'test_save_xml.xlsx'))
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_save_xls()
|
193
|
+
|
194
|
+
assert_false( File.exist?('test_save.xls'))
|
195
|
+
assert_false( File.exist?('test_save.xlsx'))
|
196
|
+
|
197
|
+
wb = Excel::Workbook.new()
|
198
|
+
wb << [ 1,2,3,4]
|
199
|
+
wb << [ :a, :b, :c ]
|
200
|
+
assert_nothing_raised{ wb.save('test_save.xls')}
|
201
|
+
assert_nothing_raised{ wb.save('test_save.xlsx')}
|
202
|
+
|
203
|
+
assert_true( File.exist?('test_save.xls'))
|
204
|
+
assert_true( File.exist?('test_save.xlsx'))
|
205
|
+
|
206
|
+
assert_equal( 2, test_bc('test_save.xls', 'test_save.xlsx'))
|
207
|
+
|
208
|
+
assert_false( File.exist?('test_save.xml'))
|
209
|
+
assert_false( File.exist?('test_save_xml.xls'))
|
210
|
+
assert_nothing_raised{ wb.save('test_save_xml.xml')}
|
211
|
+
assert_nothing_raised{ wb.save('test_save_xml.xlsx', 'test_save_xml.xml')}
|
212
|
+
assert_true( File.exist?('test_save_xml.xml'))
|
213
|
+
assert_true( File.exist?('test_save_xml.xlsx'))
|
214
|
+
assert_equal( 2, test_bc('test_save.xlsx', 'test_save_xml.xlsx'))
|
215
|
+
|
216
|
+
end #def test_create_wb()
|
217
|
+
|
218
|
+
def test_save_other()
|
219
|
+
wb = Excel::Workbook.new()
|
220
|
+
assert_raise( ArgumentError ){wb.save('test_save_xml.doc')}
|
221
|
+
end
|
222
|
+
end #class Test_workbook
|
223
|
+
|
224
|
+
class Test_workbook_insertions < Test::Unit::TestCase
|
225
|
+
def test_insert_worksheet()
|
226
|
+
wb = Excel::Workbook.new()
|
227
|
+
assert_equal(0, wb.worksheets.size)
|
228
|
+
|
229
|
+
assert_nothing_raised{ wb << Excel::Worksheet.new() }
|
230
|
+
assert_equal(1, wb.worksheets.size)
|
231
|
+
assert_equal('Sheet', wb.worksheets.last.name)
|
232
|
+
|
233
|
+
assert_nothing_raised{ wb << Excel::Worksheet.new('Sheet for test') }
|
234
|
+
assert_equal(2, wb.worksheets.size)
|
235
|
+
assert_equal('Sheet for test', wb.worksheets.last.name)
|
236
|
+
end
|
237
|
+
def test_insert_array
|
238
|
+
wb = Excel::Workbook.new()
|
239
|
+
assert_equal(0, wb.worksheets.size)
|
240
|
+
assert_nothing_raised{ wb << [:a,:b,:c,:d] }
|
241
|
+
assert_equal(1, wb.worksheets.size)
|
242
|
+
assert_equal(%{<?xml version="1.0"?>
|
243
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
244
|
+
<ss:Worksheet ss:Name="Sheet0">
|
245
|
+
<ss:Table>
|
246
|
+
<ss:Row>
|
247
|
+
<ss:Cell>
|
248
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
249
|
+
</ss:Cell>
|
250
|
+
<ss:Cell>
|
251
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
252
|
+
</ss:Cell>
|
253
|
+
<ss:Cell>
|
254
|
+
<ss:Data ss:Type="String">c</ss:Data>
|
255
|
+
</ss:Cell>
|
256
|
+
<ss:Cell>
|
257
|
+
<ss:Data ss:Type="String">d</ss:Data>
|
258
|
+
</ss:Cell>
|
259
|
+
</ss:Row>
|
260
|
+
</ss:Table>
|
261
|
+
</ss:Worksheet>
|
262
|
+
</ss:Workbook>},
|
263
|
+
wb.build_excel_xml( 'ss' )
|
264
|
+
)
|
265
|
+
assert_nothing_raised{ wb << [:a,:b,:c,:d] }
|
266
|
+
end
|
267
|
+
def test_insert_row()
|
268
|
+
wb = Excel::Workbook.new()
|
269
|
+
assert_equal(0, wb.worksheets.size)
|
270
|
+
assert_nothing_raised{ wb << Excel::Row.new() }
|
271
|
+
assert_equal(1, wb.worksheets.size)
|
272
|
+
#Exception for empty row
|
273
|
+
assert_raise( Excel::EmptyError ){ wb.build_excel_xml( 'ns' ) }
|
274
|
+
end
|
275
|
+
def test_insert_hash()
|
276
|
+
wb = Excel::Workbook.new()
|
277
|
+
assert_equal(0, wb.worksheets.size)
|
278
|
+
assert_equal(nil, wb.active_worksheet)
|
279
|
+
#Hash requires Heading data
|
280
|
+
assert_raise( ArgumentError ){ wb << { 1 => :a, 2 => :b, 3 => :c } }
|
281
|
+
assert_equal(1, wb.worksheets.size)
|
282
|
+
assert_instance_of(Excel::Worksheet, wb.active_worksheet)
|
283
|
+
|
284
|
+
ws = wb.active_worksheet
|
285
|
+
ws.columns << 1
|
286
|
+
ws.columns << 2
|
287
|
+
|
288
|
+
assert_nothing_raised{ wb << { 1 => :a, 2 => :b, 3 => :c } }
|
289
|
+
assert_equal(1, wb.worksheets.size)#no new worksheet created
|
290
|
+
assert_equal(%{<?xml version="1.0"?>
|
291
|
+
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
292
|
+
<ss:Worksheet ss:Name="Sheet0">
|
293
|
+
<ss:Table>
|
294
|
+
<ss:Row>
|
295
|
+
<ss:Cell>
|
296
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
297
|
+
</ss:Cell>
|
298
|
+
<ss:Cell>
|
299
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
300
|
+
</ss:Cell>
|
301
|
+
</ss:Row>
|
302
|
+
</ss:Table>
|
303
|
+
</ss:Worksheet>
|
304
|
+
</ss:Workbook>},
|
305
|
+
wb.build_excel_xml( 'ss' )
|
306
|
+
)
|
307
|
+
|
308
|
+
end #def test_insert()
|
309
|
+
def test_insert_other()
|
310
|
+
wb = Excel::Workbook.new()
|
311
|
+
assert_raise(ArgumentError){ wb << 1 }
|
312
|
+
end
|
313
|
+
|
314
|
+
end #class Test_workbook
|
315
|
+
|
316
|
+
class Test_Worksheet_insertions < Test::Unit::TestCase
|
317
|
+
def setup()
|
318
|
+
@mock = Mock_document.new
|
319
|
+
end
|
320
|
+
def test_insert_array
|
321
|
+
ws = Excel::Worksheet.new()
|
322
|
+
assert_equal(0, ws.rows.size)
|
323
|
+
assert_raise(Excel::EmptyError){
|
324
|
+
@mock.testcase{|builder, ns_proc|
|
325
|
+
ws.to_xml( builder,ns_proc)
|
326
|
+
}}
|
327
|
+
assert_nothing_raised{ ws << [:a,:b,:c,:d] }
|
328
|
+
assert_equal(1, ws.rows.size)
|
329
|
+
assert_equal(%{<ss:Worksheet ss:Name="Sheet">
|
330
|
+
<ss:Table>
|
331
|
+
<ss:Row>
|
332
|
+
<ss:Cell>
|
333
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
334
|
+
</ss:Cell>
|
335
|
+
<ss:Cell>
|
336
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
337
|
+
</ss:Cell>
|
338
|
+
<ss:Cell>
|
339
|
+
<ss:Data ss:Type="String">c</ss:Data>
|
340
|
+
</ss:Cell>
|
341
|
+
<ss:Cell>
|
342
|
+
<ss:Data ss:Type="String">d</ss:Data>
|
343
|
+
</ss:Cell>
|
344
|
+
</ss:Row>
|
345
|
+
</ss:Table>
|
346
|
+
</ss:Worksheet>},
|
347
|
+
@mock.testcase{|builder, ns_proc|
|
348
|
+
ws.to_xml( builder,ns_proc)
|
349
|
+
})
|
350
|
+
assert_nothing_raised{ ws << [:a,:b,:c,:d] }
|
351
|
+
end
|
352
|
+
def test_insert_row()
|
353
|
+
ws = Excel::Worksheet.new()
|
354
|
+
assert_equal(0, ws.rows.size)
|
355
|
+
assert_nothing_raised{ ws << ( Excel::Row.new() << 'a') }
|
356
|
+
assert_equal(1, ws.rows.size)
|
357
|
+
assert_equal(%{<ss:Worksheet ss:Name="Sheet">
|
358
|
+
<ss:Table>
|
359
|
+
<ss:Row>
|
360
|
+
<ss:Cell>
|
361
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
362
|
+
</ss:Cell>
|
363
|
+
</ss:Row>
|
364
|
+
</ss:Table>
|
365
|
+
</ss:Worksheet>},
|
366
|
+
@mock.testcase{|builder, ns_proc|
|
367
|
+
ws.to_xml( builder,ns_proc)
|
368
|
+
})
|
369
|
+
end
|
370
|
+
def test_insert_hash()
|
371
|
+
ws = Excel::Worksheet.new()
|
372
|
+
assert_equal(0, ws.rows.size)
|
373
|
+
#Hash requires Heading data
|
374
|
+
assert_raise( ArgumentError ){ ws << { 1 => :a, 2 => :b, 3 => :c } }
|
375
|
+
assert_equal(0, ws.rows.size)
|
376
|
+
|
377
|
+
ws.columns << 1
|
378
|
+
ws.columns << 2
|
379
|
+
|
380
|
+
assert_nothing_raised{ ws << { 1 => :a, 2 => :b, 3 => :c } }
|
381
|
+
assert_equal(1, ws.rows.size)
|
382
|
+
assert_equal(%{<ss:Worksheet ss:Name="Sheet">
|
383
|
+
<ss:Table>
|
384
|
+
<ss:Row>
|
385
|
+
<ss:Cell>
|
386
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
387
|
+
</ss:Cell>
|
388
|
+
<ss:Cell>
|
389
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
390
|
+
</ss:Cell>
|
391
|
+
</ss:Row>
|
392
|
+
</ss:Table>
|
393
|
+
</ss:Worksheet>},
|
394
|
+
@mock.testcase{|builder, ns_proc|
|
395
|
+
ws.to_xml( builder,ns_proc)
|
396
|
+
})
|
397
|
+
|
398
|
+
end #def test_insert()
|
399
|
+
def test_insert_other()
|
400
|
+
ws = Excel::Worksheet.new()
|
401
|
+
assert_raise(ArgumentError){ ws << 1 }
|
402
|
+
assert_raise(ArgumentError){ ws << Excel::Worksheet.new() }
|
403
|
+
end
|
404
|
+
|
405
|
+
end #class Test_Worksheet
|
406
|
+
|
407
|
+
class Test_Row < Test::Unit::TestCase
|
408
|
+
def test_style()
|
409
|
+
style = Excel::Style.new('style_example')
|
410
|
+
assert_equal( nil, Excel::Row.new.style)
|
411
|
+
assert_instance_of( Excel::Style, Excel::Row.new(:style => style).style)
|
412
|
+
assert_equal( style, Excel::Row.new(:style => style).style)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
class Test_Row_insertions < Test::Unit::TestCase
|
416
|
+
def setup()
|
417
|
+
@mock = Mock_document.new
|
418
|
+
end
|
419
|
+
def test_insert_array
|
420
|
+
row = Excel::Row.new()
|
421
|
+
assert_equal(0, row.columns.size)
|
422
|
+
assert_nothing_raised{ row << [:a,:b,:c,:d] }
|
423
|
+
assert_equal(%{<ss:Row>
|
424
|
+
<ss:Cell>
|
425
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
426
|
+
</ss:Cell>
|
427
|
+
<ss:Cell>
|
428
|
+
<ss:Data ss:Type="String">b</ss:Data>
|
429
|
+
</ss:Cell>
|
430
|
+
<ss:Cell>
|
431
|
+
<ss:Data ss:Type="String">c</ss:Data>
|
432
|
+
</ss:Cell>
|
433
|
+
<ss:Cell>
|
434
|
+
<ss:Data ss:Type="String">d</ss:Data>
|
435
|
+
</ss:Cell>
|
436
|
+
</ss:Row>},
|
437
|
+
@mock.testcase{|builder, ns_proc|
|
438
|
+
row.to_xml( builder,ns_proc)
|
439
|
+
})
|
440
|
+
assert_equal(4, row.columns.size)
|
441
|
+
assert_nothing_raised{ row << [:a,:b,:c,:d] }
|
442
|
+
end
|
443
|
+
def test_insert_hash()
|
444
|
+
row = Excel::Row.new()
|
445
|
+
assert_equal(0, row.columns.size)
|
446
|
+
#Hash requires Heading data
|
447
|
+
assert_raise( ArgumentError ){ row << { 1 => 1, 2 => 2, 3 => 3 } }
|
448
|
+
assert_equal(0, row.columns.size)
|
449
|
+
end #def test_insert()
|
450
|
+
def test_insert_other()
|
451
|
+
row = Excel::Row.new()
|
452
|
+
assert_equal(0, row.columns.size)
|
453
|
+
assert_raise(Excel::EmptyError){
|
454
|
+
@mock.testcase{|builder, ns_proc|row.to_xml( builder,ns_proc)}
|
455
|
+
}
|
456
|
+
assert_nothing_raised{ row << 'a' }
|
457
|
+
assert_equal(1, row.columns.size)
|
458
|
+
assert_equal(%{<ss:Row>
|
459
|
+
<ss:Cell>
|
460
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
461
|
+
</ss:Cell>
|
462
|
+
</ss:Row>},
|
463
|
+
@mock.testcase{|builder, ns_proc|
|
464
|
+
row.to_xml( builder,ns_proc)
|
465
|
+
})
|
466
|
+
assert_nothing_raised{ row << 'x' }
|
467
|
+
assert_equal(2, row.columns.size)
|
468
|
+
assert_equal(%{<ss:Row>
|
469
|
+
<ss:Cell>
|
470
|
+
<ss:Data ss:Type="String">a</ss:Data>
|
471
|
+
</ss:Cell>
|
472
|
+
<ss:Cell>
|
473
|
+
<ss:Data ss:Type="String">x</ss:Data>
|
474
|
+
</ss:Cell>
|
475
|
+
</ss:Row>},
|
476
|
+
@mock.testcase{|builder, ns_proc|
|
477
|
+
row.to_xml( builder,ns_proc)
|
478
|
+
})
|
479
|
+
end
|
480
|
+
def test_insert_errors()
|
481
|
+
row = Excel::Row.new()
|
482
|
+
assert_raise(ArgumentError){ row << Excel::Row.new() }
|
483
|
+
assert_raise(ArgumentError){ row << Excel::Worksheet.new() }
|
484
|
+
assert_raise(ArgumentError){ row << Excel::Workbook.new() }
|
485
|
+
end
|
486
|
+
|
487
|
+
#~ def test_bold()
|
488
|
+
#~ pend("#{self.class}##{__method__} output")
|
489
|
+
#~ end
|
490
|
+
#~ def test_italic()
|
491
|
+
#~ pend("#{self.class}##{__method__} output")
|
492
|
+
#~ end
|
493
|
+
#~ def test_color()
|
494
|
+
#~ pend("#{self.class}##{__method__} output")
|
495
|
+
#~ end
|
496
|
+
#~ def test_backgroundcolor()
|
497
|
+
#~ pend("#{self.class}##{__method__} output")
|
498
|
+
#~ end
|
499
|
+
|
500
|
+
end #class Test_Row
|
501
|
+
|
502
|
+
|
503
|
+
class Test_Cell < Test::Unit::TestCase
|
504
|
+
def test_create()
|
505
|
+
assert_nil( Excel::Cell.new().content)
|
506
|
+
assert_equal( 1, Excel::Cell.new(1).content)
|
507
|
+
end #def test_create()
|
508
|
+
def test_style()
|
509
|
+
style = Excel::Style.new('style_example')
|
510
|
+
assert_equal( nil, Excel::Cell.new(1).style)
|
511
|
+
assert_instance_of( Excel::Style, Excel::Cell.new(1, :style => style).style)
|
512
|
+
assert_equal( style, Excel::Cell.new(1, :style => style).style)
|
513
|
+
end
|
514
|
+
|
515
|
+
end #class Test_Cell
|
516
|
+
|
517
|
+
class Test_Cell_xml < Test::Unit::TestCase
|
518
|
+
def setup()
|
519
|
+
@mock = Mock_document.new
|
520
|
+
end
|
521
|
+
def test_content_string
|
522
|
+
assert_equal("<ss:Cell>\n <ss:Data ss:Type=\"String\">content</ss:Data>\n </ss:Cell>",
|
523
|
+
@mock.testcase{|builder, ns_proc|
|
524
|
+
cell = Excel::Cell.new('content')
|
525
|
+
cell.to_xml( builder,ns_proc)
|
526
|
+
})
|
527
|
+
end
|
528
|
+
def test_content_number
|
529
|
+
assert_equal("<ss:Cell>\n <ss:Data ss:Type=\"Number\">1</ss:Data>\n </ss:Cell>",
|
530
|
+
@mock.testcase{|builder, ns_proc|
|
531
|
+
cell = Excel::Cell.new(1)
|
532
|
+
cell.to_xml( builder,ns_proc)
|
533
|
+
})
|
534
|
+
assert_equal("<ss:Cell>\n <ss:Data ss:Type=\"Number\">1.1</ss:Data>\n </ss:Cell>",
|
535
|
+
@mock.testcase{|builder, ns_proc|
|
536
|
+
cell = Excel::Cell.new(1.1)
|
537
|
+
cell.to_xml( builder,ns_proc)
|
538
|
+
})
|
539
|
+
assert_equal("<ss:Cell>\n <ss:Data ss:Type=\"Number\">281474976710656</ss:Data>\n </ss:Cell>",
|
540
|
+
@mock.testcase{|builder, ns_proc|
|
541
|
+
cell = Excel::Cell.new(281474976710656) #Bignum
|
542
|
+
cell.to_xml( builder,ns_proc)
|
543
|
+
})
|
544
|
+
end
|
545
|
+
def test_content_with_type
|
546
|
+
assert_equal("<ss:Cell>\n <ss:Data ss:Type=\"String\">1</ss:Data>\n </ss:Cell>",
|
547
|
+
@mock.testcase{|builder, ns_proc|
|
548
|
+
cell = Excel::Cell.new(1, :string => true)
|
549
|
+
cell.to_xml( builder,ns_proc)
|
550
|
+
})
|
551
|
+
end #def test_content
|
552
|
+
|
553
|
+
end #class Test_Cell_xlm
|
554
|
+
|
555
|
+
class Test_Cell_xls < Test::Unit::TestCase
|
556
|
+
def setup()
|
557
|
+
wb = Excel::Excel.instance.xl.Workbooks.Add #Includes 3 worksheets
|
558
|
+
@ws = wb.ActiveSheet
|
559
|
+
end
|
560
|
+
def test_content_string_xls
|
561
|
+
cell = Excel::Cell.new('content')
|
562
|
+
cell_ole = cell.to_xls(@ws.Cells(1,1))
|
563
|
+
assert_instance_of( WIN32OLE, cell_ole)
|
564
|
+
assert_equal(XLS_ENCODING, cell_ole.value.encoding)
|
565
|
+
assert_equal('content', cell_ole.value)
|
566
|
+
assert_equal('@', cell_ole.NumberFormat)
|
567
|
+
|
568
|
+
end #def test_content_string_xls
|
569
|
+
def test_content_number
|
570
|
+
cell_ole = Excel::Cell.new(1).to_xls(@ws.Cells(1,1))
|
571
|
+
assert_equal(1, cell_ole.value)
|
572
|
+
assert_equal(XLS_ENCODING, cell_ole.NumberFormat.encoding)
|
573
|
+
assert_equal("Standard".encode(XLS_ENCODING), cell_ole.NumberFormat)
|
574
|
+
|
575
|
+
cell_ole = Excel::Cell.new(1.1).to_xls(@ws.Cells(1,2))
|
576
|
+
assert_equal(1.1, cell_ole.value)
|
577
|
+
assert_equal("Standard".encode(XLS_ENCODING), cell_ole.NumberFormat)
|
578
|
+
|
579
|
+
#Bignum
|
580
|
+
cell_ole = Excel::Cell.new(281474976710656).to_xls(@ws.Cells(1,3))
|
581
|
+
assert_equal(281474976710656, cell_ole.value)
|
582
|
+
assert_equal("Standard".encode(XLS_ENCODING), cell_ole.NumberFormat)
|
583
|
+
end
|
584
|
+
def test_content_with_type
|
585
|
+
cell_ole = Excel::Cell.new(1, :string => true ).to_xls(@ws.Cells(1,1))
|
586
|
+
assert_equal('1', cell_ole.value)
|
587
|
+
assert_equal('@', cell_ole.NumberFormat)
|
588
|
+
end #def test_content
|
589
|
+
end #class Test_Cell_xls
|
590
|
+
|
591
|
+
class Test_Style < Test::Unit::TestCase
|
592
|
+
def setup()
|
593
|
+
#~ wb = Excel::Excel.instance.xl.Workbooks.Add #Includes 3 worksheets
|
594
|
+
#~ @ws = wb.ActiveSheet
|
595
|
+
end
|
596
|
+
def test_create()
|
597
|
+
style = Excel::Style.new('style1')
|
598
|
+
assert_instance_of( Excel::Style, style)
|
599
|
+
assert_equal('style1', style.name)
|
600
|
+
#Assignment after usage in workbook
|
601
|
+
assert_equal(nil, style.style_id)
|
602
|
+
|
603
|
+
#Detect duplicate styles
|
604
|
+
#~ assert_raise(ArgumentError){ Excel::Style.new('style1') }
|
605
|
+
|
606
|
+
style2 = Excel::Style.new('style2')
|
607
|
+
assert_instance_of( Excel::Style, style2)
|
608
|
+
assert_equal('style2', style2.name)
|
609
|
+
assert_equal(nil, style2.style_id)
|
610
|
+
end
|
611
|
+
def test_insert()
|
612
|
+
wb = Excel::Workbook.new()
|
613
|
+
style = Excel::Style.new('style1')
|
614
|
+
|
615
|
+
assert_equal(0, wb.styles.size)
|
616
|
+
assert_nothing_raised{ wb << style }
|
617
|
+
assert_equal(1, wb.styles.size)
|
618
|
+
assert_equal(1, style.style_id)
|
619
|
+
end
|
620
|
+
|
621
|
+
def test_insert_ws()
|
622
|
+
ws = Excel::Worksheet.new
|
623
|
+
style = Excel::Style.new('style1')
|
624
|
+
#Worksheets don't accept Styles
|
625
|
+
assert_raise(ArgumentError){ ws << style }
|
626
|
+
end
|
627
|
+
end
|
628
|
+
|
629
|
+
|
630
|
+
class Test_Style_xlm < Test::Unit::TestCase
|
631
|
+
def setup()
|
632
|
+
@wb = Excel::Workbook.new
|
633
|
+
@wb << @ws = Excel::Worksheet.new
|
634
|
+
@ws << @row = Excel::Row.new
|
635
|
+
@row << cell = Excel::Cell.new('Normal text')
|
636
|
+
end
|
637
|
+
def test_bold()
|
638
|
+
|
639
|
+
#~ assert_equal_filecontent( "expected/%s-%s.xml" %[self.class, __method__],
|
640
|
+
#~ wb.build_excel_xml('ss') )
|
641
|
+
|
642
|
+
@wb << style = Excel::Style.new('bold', :bold => true )
|
643
|
+
assert_true( style.bold )
|
644
|
+
assert_nil( style.italic )
|
645
|
+
assert_nil( style.color )
|
646
|
+
assert_nil( style.backgroundcolor )
|
647
|
+
|
648
|
+
#add a formated cell
|
649
|
+
@row << Excel::Cell.new('bold text', :style => style)
|
650
|
+
#And a additional row
|
651
|
+
@ws << ( Excel::Row.new(:style => style) << [1,2,3,4] )
|
652
|
+
assert_equal_filecontent( "expected/%s-%s-bold.xml" %[self.class, __method__],
|
653
|
+
@wb.build_excel_xml('ss') )
|
654
|
+
#~ @wb.save("expected/%s-%s-bold.xls" %[self.class, __method__])
|
655
|
+
end
|
656
|
+
def test_italic()
|
657
|
+
|
658
|
+
#~ assert_equal_filecontent( "expected/%s-%s.xml" %[self.class, __method__],
|
659
|
+
#~ wb.build_excel_xml('ss') )
|
660
|
+
|
661
|
+
@wb << style = Excel::Style.new('italic', :italic => true )
|
662
|
+
assert_nil( style.bold )
|
663
|
+
assert_true( style.italic )
|
664
|
+
assert_nil( style.color )
|
665
|
+
assert_nil( style.backgroundcolor )
|
666
|
+
|
667
|
+
#add a formated cell
|
668
|
+
@row << Excel::Cell.new('italic text', :style => style)
|
669
|
+
|
670
|
+
#And a additional row
|
671
|
+
@ws << ( Excel::Row.new(:style => style) << [1,2,3,4] )
|
672
|
+
|
673
|
+
assert_equal_filecontent( "expected/%s-%s-italic.xml" %[self.class, __method__],
|
674
|
+
@wb.build_excel_xml('ss') )
|
675
|
+
end
|
676
|
+
def test_color()
|
677
|
+
@wb << style = Excel::Style.new('gray', :color => 15 )
|
678
|
+
assert_nil( style.bold )
|
679
|
+
assert_nil( style.italic )
|
680
|
+
assert_equal(15, style.color )
|
681
|
+
assert_nil( style.backgroundcolor )
|
682
|
+
|
683
|
+
@row << Excel::Cell.new('gray text', :style => style)
|
684
|
+
|
685
|
+
#And a additional row
|
686
|
+
@ws << ( Excel::Row.new(:style => style) << [1,2,3,4] )
|
687
|
+
|
688
|
+
assert_equal_filecontent( "expected/%s-%s-gray.xml" %[self.class, __method__],
|
689
|
+
@wb.build_excel_xml('ss') )
|
690
|
+
|
691
|
+
end
|
692
|
+
def test_backgroundcolor()
|
693
|
+
@wb << style = Excel::Style.new('gray', :backgroundcolor => 15 )
|
694
|
+
assert_nil( style.bold )
|
695
|
+
assert_nil( style.italic )
|
696
|
+
assert_equal(15, style.backgroundcolor )
|
697
|
+
assert_nil( style.color )
|
698
|
+
|
699
|
+
@row << Excel::Cell.new('gray text', :style => style)
|
700
|
+
|
701
|
+
#And a additional row
|
702
|
+
@ws << ( Excel::Row.new(:style => style) << [1,2,3,4] )
|
703
|
+
|
704
|
+
assert_equal_filecontent( "expected/%s-%s-gray.xml" %[self.class, __method__],
|
705
|
+
@wb.build_excel_xml('ss') )
|
706
|
+
|
707
|
+
end
|
708
|
+
end
|
709
|
+
|
710
|
+
#~ END{
|
711
|
+
#~ Excel::Excel.instance.close
|
712
|
+
#~ }
|
713
|
+
|
714
|
+
__END__
|
715
|
+
|
716
|
+
#~ build_xml('test_save_xml.xml')
|
717
|
+
|
718
|
+
#~ mk_excel(File.join(Dir.pwd, "test_xml.xlsx"), File.join(Dir.pwd, 'test_save_xml.xml'))
|
719
|
+
xls = ExcelXML.new
|
720
|
+
#~ xls.save_xml("test_xml.xml")
|
721
|
+
File.delete("test_xml.xml") if File.exist?("test_xml.xml")
|
722
|
+
xls.mk_excel("test_xml.xlsx")
|
723
|
+
#~ xls.mk_excel("test_xml.xlsx", 'example_excel_xml.xml')
|
724
|
+
|
725
|
+
#~ mk_excel("./test2.xls", data) #Speichert in Eigene Dateien
|