robust_excel_ole 0.3.4 → 0.3.5
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/README.rdoc +73 -26
- data/README_detail.rdoc +92 -27
- data/examples/edit_sheets/example_access_sheets_and_cells.rb +3 -3
- data/examples/edit_sheets/example_concating.rb +12 -12
- data/examples/edit_sheets/example_copying.rb +47 -0
- data/examples/edit_sheets/example_expanding.rb +17 -26
- data/examples/edit_sheets/example_naming.rb +13 -10
- data/examples/edit_sheets/example_ranges.rb +2 -2
- data/examples/edit_sheets/example_saving.rb +8 -14
- data/examples/open_save_close/example_control_to_excel.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +3 -3
- data/examples/open_save_close/example_if_obstructed_save.rb +3 -3
- data/examples/open_save_close/example_if_unsaved_accept.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget.rb +4 -4
- data/examples/open_save_close/example_if_unsaved_forget_more.rb +5 -5
- data/examples/open_save_close/example_read_only.rb +1 -1
- data/examples/open_save_close/example_rename_cells.rb +1 -13
- data/examples/open_save_close/example_simple.rb +1 -1
- data/examples/open_save_close/example_unobtrusively.rb +3 -3
- data/lib/robust_excel_ole.rb +81 -2
- data/lib/robust_excel_ole/book.rb +171 -118
- data/lib/robust_excel_ole/{book_store.rb → bookstore.rb} +2 -2
- data/lib/robust_excel_ole/excel.rb +153 -24
- data/lib/robust_excel_ole/range.rb +2 -2
- data/lib/robust_excel_ole/sheet.rb +84 -35
- data/lib/robust_excel_ole/version.rb +1 -1
- data/reo.bat +3 -0
- data/spec/book_close_spec.rb +179 -0
- data/spec/book_misc_spec.rb +365 -0
- data/spec/book_open_spec.rb +793 -0
- data/spec/book_save_spec.rb +257 -0
- data/spec/book_sheet_spec.rb +160 -0
- data/spec/book_spec.rb +145 -1533
- data/spec/book_subclass_spec.rb +50 -0
- data/spec/book_unobtr_spec.rb +950 -0
- data/spec/{book_store_spec.rb → bookstore_spec.rb} +5 -5
- data/spec/cell_spec.rb +6 -6
- data/spec/data/{more_workbook.xls → another_workbook.xls} +0 -0
- data/spec/data/different_workbook.xls +0 -0
- data/spec/data/workbook.xls +0 -0
- data/spec/data/workbook.xlsm +0 -0
- data/spec/data/workbook.xlsx +0 -0
- data/spec/data/workbook_linked.xlsm +0 -0
- data/spec/data/workbook_linked_sub.xlsm +0 -0
- data/spec/excel_spec.rb +204 -5
- data/spec/range_spec.rb +6 -6
- data/spec/sheet_spec.rb +122 -34
- metadata +18 -8
- data/spec/data/workbook_connected_sub.xlsm +0 -0
@@ -35,7 +35,7 @@ class Book
|
|
35
35
|
end
|
36
36
|
|
37
37
|
|
38
|
-
describe
|
38
|
+
describe Bookstore do
|
39
39
|
|
40
40
|
before(:all) do
|
41
41
|
excel = Excel.new(:reuse => true)
|
@@ -45,7 +45,7 @@ describe BookStore do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
before do
|
48
|
-
@bookstore =
|
48
|
+
@bookstore = Bookstore.new
|
49
49
|
@dir = create_tmpdir
|
50
50
|
@simple_file = @dir + '/workbook.xls'
|
51
51
|
@simple_save_file = @dir + '/workbook_save.xls'
|
@@ -62,9 +62,9 @@ describe BookStore do
|
|
62
62
|
context "with standard" do
|
63
63
|
it "should create book store" do
|
64
64
|
expect {
|
65
|
-
@book_store =
|
65
|
+
@book_store = Bookstore.new
|
66
66
|
}.to_not raise_error
|
67
|
-
@book_store.should be_a
|
67
|
+
@book_store.should be_a Bookstore
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|
@@ -273,7 +273,7 @@ describe BookStore do
|
|
273
273
|
@bookstore.store(@book2)
|
274
274
|
@bookstore.store(@book3)
|
275
275
|
sheet = @book3[0]
|
276
|
-
sheet[
|
276
|
+
sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
|
277
277
|
@book.ReadOnly.should be_true
|
278
278
|
@book2.ReadOnly.should be_false
|
279
279
|
@book3.ReadOnly.should be_true
|
data/spec/cell_spec.rb
CHANGED
@@ -22,7 +22,7 @@ describe RobustExcelOle::Cell do
|
|
22
22
|
before do
|
23
23
|
@book = RobustExcelOle::Book.open(@dir + '/workbook.xls', :read_only => true)
|
24
24
|
@sheet = @book[1]
|
25
|
-
@cell = @sheet[
|
25
|
+
@cell = @sheet[1, 1]
|
26
26
|
end
|
27
27
|
|
28
28
|
after do
|
@@ -61,14 +61,14 @@ describe RobustExcelOle::Cell do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it "merged cell get same value" do
|
64
|
-
@sheet[
|
65
|
-
@sheet[
|
64
|
+
@sheet[1, 1].value.should be_nil
|
65
|
+
@sheet[2, 1].value.should eq 'first merged'
|
66
66
|
end
|
67
67
|
|
68
68
|
it "set merged cell" do
|
69
|
-
@sheet[
|
70
|
-
@sheet[
|
71
|
-
@sheet[
|
69
|
+
@sheet[2, 1].value = "set merge cell"
|
70
|
+
@sheet[2, 1].value.should eq "set merge cell"
|
71
|
+
@sheet[2, 2].value.should eq "set merge cell"
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
Binary file
|
Binary file
|
data/spec/data/workbook.xls
CHANGED
Binary file
|
data/spec/data/workbook.xlsm
CHANGED
Binary file
|
data/spec/data/workbook.xlsx
CHANGED
Binary file
|
Binary file
|
Binary file
|
data/spec/excel_spec.rb
CHANGED
@@ -14,8 +14,11 @@ module RobustExcelOle
|
|
14
14
|
|
15
15
|
before do
|
16
16
|
@dir = create_tmpdir
|
17
|
-
|
18
|
-
@
|
17
|
+
#print "tmpdir: "; p @dir
|
18
|
+
@simple_file = @dir + '/workbook.xls'
|
19
|
+
@another_simple_file = @dir + '/another_workbook.xls'
|
20
|
+
@different_file = @dir + '/different_workbook.xls'
|
21
|
+
@invalid_name_file = 'b/workbook.xls'
|
19
22
|
end
|
20
23
|
|
21
24
|
after do
|
@@ -32,6 +35,12 @@ module RobustExcelOle
|
|
32
35
|
@excel.Name.should == "Microsoft Excel"
|
33
36
|
end
|
34
37
|
|
38
|
+
it "should access excel.excel" do
|
39
|
+
excel = Excel.new(:reuse => false)
|
40
|
+
excel.excel.should == excel
|
41
|
+
excel.excel.should be_a Excel
|
42
|
+
end
|
43
|
+
|
35
44
|
it "should work with 'new' " do
|
36
45
|
@excel = Excel.new
|
37
46
|
creation_ok?
|
@@ -93,6 +102,156 @@ module RobustExcelOle
|
|
93
102
|
end
|
94
103
|
end
|
95
104
|
|
105
|
+
=begin
|
106
|
+
# testing private methods
|
107
|
+
context "close_excel" do
|
108
|
+
|
109
|
+
before do
|
110
|
+
@book = Book.open(@simple_file, :visible => true)
|
111
|
+
@excel = @book.excel
|
112
|
+
@book2 = Book.open(@simple_file, :force_excel => :new, :visible => true)
|
113
|
+
@excel2 = @book2.excel
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should close one Excel" do
|
117
|
+
@excel.should be_alive
|
118
|
+
@excel2.should be_alive
|
119
|
+
@book.should be_alive
|
120
|
+
@book2.should be_alive
|
121
|
+
@excel.close_excel(:hard => false)
|
122
|
+
@excel.should_not be_alive
|
123
|
+
@book.should_not be_alive
|
124
|
+
@excel2.should be_alive
|
125
|
+
@book2.should be_alive
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
=end
|
130
|
+
|
131
|
+
describe "close_all" do
|
132
|
+
|
133
|
+
context "with saved workbooks" do
|
134
|
+
|
135
|
+
before do
|
136
|
+
book = Book.open(@simple_file, :visible => true)
|
137
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :visible => true)
|
138
|
+
@excel = book.excel
|
139
|
+
@excel2 = book2.excel
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should close the Excel instances" do
|
143
|
+
@excel.should be_alive
|
144
|
+
@excel2.should be_alive
|
145
|
+
Excel.close_all
|
146
|
+
@excel.should_not be_alive
|
147
|
+
@excel2.should_not be_alive
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "close" do
|
153
|
+
|
154
|
+
context "with a saved workbook" do
|
155
|
+
|
156
|
+
before do
|
157
|
+
@excel = Excel.create
|
158
|
+
@book = Book.open(@simple_file)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should close the Excel" do
|
162
|
+
@excel.should be_alive
|
163
|
+
@book.should be_alive
|
164
|
+
@excel.close
|
165
|
+
@excel.should_not be_alive
|
166
|
+
@book.should_not be_alive
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context "with an unsaved workbook" do
|
171
|
+
|
172
|
+
before do
|
173
|
+
@excel = Excel.create
|
174
|
+
@book = Book.open(@simple_file)
|
175
|
+
sheet = @book[0]
|
176
|
+
@old_cell_value = sheet[1,1].value
|
177
|
+
sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should raise an error" do
|
181
|
+
@excel.should be_alive
|
182
|
+
@book.should be_alive
|
183
|
+
@book.saved.should be_false
|
184
|
+
expect{
|
185
|
+
@excel.close(:if_unsaved => :raise)
|
186
|
+
}.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
|
187
|
+
@excel.should be_alive
|
188
|
+
@book.should be_alive
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should close the Excel without saving the workbook" do
|
192
|
+
@excel.should be_alive
|
193
|
+
@book.should be_alive
|
194
|
+
@book.saved.should be_false
|
195
|
+
@excel.close(:if_unsaved => :forget)
|
196
|
+
@excel.should_not be_alive
|
197
|
+
@book.should_not be_alive
|
198
|
+
new_book = Book.open(@simple_file)
|
199
|
+
new_sheet = new_book[0]
|
200
|
+
new_sheet[1,1].value.should == @old_cell_value
|
201
|
+
new_book.close
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should close the Excel with saving the workbook" do
|
205
|
+
@excel.should be_alive
|
206
|
+
@book.should be_alive
|
207
|
+
@book.saved.should be_false
|
208
|
+
@excel.close(:if_unsaved => :save)
|
209
|
+
@excel.should_not be_alive
|
210
|
+
@book.should_not be_alive
|
211
|
+
new_book = Book.open(@simple_file)
|
212
|
+
new_sheet = new_book[0]
|
213
|
+
new_sheet[1,1].value.should_not == @old_cell_value
|
214
|
+
new_book.close
|
215
|
+
end
|
216
|
+
|
217
|
+
it "should raise an error for invalid option" do
|
218
|
+
expect {
|
219
|
+
@excel.close(:if_unsaved => :invalid_option)
|
220
|
+
}.to raise_error(ExcelErrorClose, ":if_unsaved: invalid option: invalid_option")
|
221
|
+
end
|
222
|
+
|
223
|
+
it "should raise an error by default" do
|
224
|
+
@excel.should be_alive
|
225
|
+
@book.should be_alive
|
226
|
+
@book.saved.should be_false
|
227
|
+
expect{
|
228
|
+
@excel.close
|
229
|
+
}.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
|
230
|
+
@excel.should be_alive
|
231
|
+
@book.should be_alive
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
# context "with :if_unsaved => :alert" do
|
237
|
+
# before do
|
238
|
+
# @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '/helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
|
239
|
+
# end
|
240
|
+
#
|
241
|
+
# after do
|
242
|
+
# @key_sender.close
|
243
|
+
# end
|
244
|
+
#
|
245
|
+
# possible_answers = [:yes, :no, :cancel]
|
246
|
+
# possible_answers.each_with_index do |answer, position|
|
247
|
+
# it "should" + (answer == :yes ? "" : " not") + " the unsaved book and" + (answer == :cancel ? " not" : "") + " close it" + "if user answers '#{answer}'" do
|
248
|
+
# # "Yes" is the default. "No" is right of "Yes", "Cancel" is right of "No" --> language independent
|
249
|
+
# @key_sender.puts "{right}" * position + "{enter}"
|
250
|
+
# end
|
251
|
+
# end
|
252
|
+
# end
|
253
|
+
|
254
|
+
|
96
255
|
describe "==" do
|
97
256
|
before do
|
98
257
|
@excel1 = Excel.create
|
@@ -236,6 +395,35 @@ module RobustExcelOle
|
|
236
395
|
end
|
237
396
|
end
|
238
397
|
|
398
|
+
describe "unsaved_workbooks" do
|
399
|
+
|
400
|
+
context "with standard" do
|
401
|
+
|
402
|
+
before do
|
403
|
+
@book = Book.open(@simple_file)
|
404
|
+
@book2 = Book.open(@another_simple_file)
|
405
|
+
@book3 = Book.open(@different_file, :read_only => true)
|
406
|
+
sheet = @book[0]
|
407
|
+
sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
|
408
|
+
sheet3 = @book3[0]
|
409
|
+
sheet3[1,1] = sheet3[1,1].value == "foo" ? "bar" : "foo"
|
410
|
+
end
|
411
|
+
|
412
|
+
it "should list unsaved workbooks" do
|
413
|
+
@book.Saved.should be_false
|
414
|
+
@book2.Save
|
415
|
+
@book2.Saved.should be_true
|
416
|
+
@book3.Saved.should be_false
|
417
|
+
excel = @book.excel
|
418
|
+
# unsaved_workbooks yields different WIN32OLE objects than book.workbook
|
419
|
+
uw_names = []
|
420
|
+
excel.unsaved_workbooks.each {|uw| uw_names << uw.Name}
|
421
|
+
uw_names.should == [@book.workbook.Name]
|
422
|
+
end
|
423
|
+
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
239
427
|
describe "generate workbook" do
|
240
428
|
|
241
429
|
context "with standard" do
|
@@ -289,7 +477,9 @@ module RobustExcelOle
|
|
289
477
|
it "should raise error when book cannot be saved" do
|
290
478
|
expect{
|
291
479
|
workbook = @excel1.generate_workbook(@invalid_name_file)
|
292
|
-
|
480
|
+
# not always Unknown ???? ToDo #*#
|
481
|
+
#}.to raise_error(ExcelErrorSaveUnknown)
|
482
|
+
}.to raise_error(ExcelErrorSave)
|
293
483
|
end
|
294
484
|
|
295
485
|
end
|
@@ -298,11 +488,20 @@ module RobustExcelOle
|
|
298
488
|
|
299
489
|
describe "RobustExcelOle" do
|
300
490
|
context "#absolute_path" do
|
491
|
+
before do
|
492
|
+
@previous_dir = Dir.getwd
|
493
|
+
end
|
494
|
+
|
495
|
+
after do
|
496
|
+
Dir.chdir @previous_dir
|
497
|
+
end
|
498
|
+
|
301
499
|
it "should work" do
|
302
500
|
RobustExcelOle::absolute_path("C:/abc").should == "C:\\abc"
|
303
501
|
RobustExcelOle::absolute_path("C:\\abc").should == "C:\\abc"
|
304
|
-
|
305
|
-
RobustExcelOle::absolute_path("C:abc").should ==
|
502
|
+
Dir.chdir "C:/windows"
|
503
|
+
RobustExcelOle::absolute_path("C:abc").downcase.should == Dir.pwd.gsub("/","\\").downcase + "\\abc"
|
504
|
+
RobustExcelOle::absolute_path("C:abc").upcase.should == File.expand_path("abc").gsub("/","\\").upcase
|
306
505
|
end
|
307
506
|
|
308
507
|
it "should return right absolute path name" do
|
data/spec/range_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe RobustExcelOle::Range do
|
|
14
14
|
@dir = create_tmpdir
|
15
15
|
@book = RobustExcelOle::Book.open(@dir + '/workbook.xls')
|
16
16
|
@sheet = @book[1]
|
17
|
-
@range = RobustExcelOle::Range.new(@sheet.
|
17
|
+
@range = RobustExcelOle::Range.new(@sheet.worksheet.UsedRange.Rows(1))
|
18
18
|
end
|
19
19
|
|
20
20
|
after do
|
@@ -50,9 +50,9 @@ describe RobustExcelOle::Range do
|
|
50
50
|
context "when instance is column range" do
|
51
51
|
before do
|
52
52
|
@sheet = @book[0]
|
53
|
-
@range = RobustExcelOle::Range.new(@sheet.
|
53
|
+
@range = RobustExcelOle::Range.new(@sheet.worksheet.UsedRange.Columns(1))
|
54
54
|
end
|
55
|
-
it { @range.values.should eq ['
|
55
|
+
it { @range.values.should eq ['foo', 'foo', 'matz'] }
|
56
56
|
end
|
57
57
|
|
58
58
|
context "read 'merge_cells.xls'" do
|
@@ -67,7 +67,7 @@ describe RobustExcelOle::Range do
|
|
67
67
|
|
68
68
|
context "only merged_cell" do
|
69
69
|
before do
|
70
|
-
@only_merged_range = @merge_cells_sheet.row_range(
|
70
|
+
@only_merged_range = @merge_cells_sheet.row_range(4)
|
71
71
|
end
|
72
72
|
|
73
73
|
context "without argument" do
|
@@ -75,14 +75,14 @@ describe RobustExcelOle::Range do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
context "with (1..2)" do
|
78
|
-
it { @only_merged_range.values(
|
78
|
+
it { @only_merged_range.values(2..3).should eq ['merged', 'merged'] }
|
79
79
|
end
|
80
80
|
|
81
81
|
end
|
82
82
|
|
83
83
|
context "mix merged cell and no merge cell" do
|
84
84
|
before do
|
85
|
-
@mix_merged_no_merged_range = @merge_cells_sheet.row_range(
|
85
|
+
@mix_merged_no_merged_range = @merge_cells_sheet.row_range(2)
|
86
86
|
end
|
87
87
|
|
88
88
|
context "without argument" do
|
data/spec/sheet_spec.rb
CHANGED
@@ -35,7 +35,7 @@ describe RobustExcelOle::Sheet do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "protected sheet can't be write" do
|
38
|
-
expect { @protected_sheet[
|
38
|
+
expect { @protected_sheet[1,1] = 'write' }.to raise_error
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -60,32 +60,58 @@ describe RobustExcelOle::Sheet do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
describe "#name=" do
|
63
|
+
|
63
64
|
it 'change sheet1 name to foo' do
|
64
65
|
@sheet.name = 'foo'
|
65
66
|
@sheet.name.should eq 'foo'
|
66
67
|
end
|
68
|
+
|
69
|
+
it "should raise error when adding the same name" do
|
70
|
+
@sheet.name = 'foo'
|
71
|
+
@sheet.name.should eq 'foo'
|
72
|
+
new_sheet = @book.add_sheet @sheet
|
73
|
+
expect{
|
74
|
+
new_sheet.name = 'foo'
|
75
|
+
}.to raise_error(ExcelErrorSheet, "sheet name already exists")
|
76
|
+
end
|
67
77
|
end
|
68
78
|
end
|
69
79
|
|
70
80
|
describe 'access cell' do
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
81
|
+
|
82
|
+
describe "#[]" do
|
83
|
+
|
84
|
+
context "access [1,1]" do
|
85
|
+
|
86
|
+
it { @sheet[1, 1].should be_kind_of RobustExcelOle::Cell }
|
87
|
+
it { @sheet[1, 1].value.should eq 'foo' }
|
75
88
|
end
|
76
89
|
|
77
|
-
context "access [
|
90
|
+
context "access [1, 1], [1, 2], [3, 1]" do
|
78
91
|
it "should get every values" do
|
79
|
-
@sheet[
|
80
|
-
@sheet[
|
81
|
-
@sheet[
|
92
|
+
@sheet[1, 1].value.should eq 'foo'
|
93
|
+
@sheet[1, 2].value.should eq 'workbook'
|
94
|
+
@sheet[3, 1].value.should eq 'matz'
|
82
95
|
end
|
83
96
|
end
|
97
|
+
|
98
|
+
context "supplying nil as parameter" do
|
99
|
+
it "should access [1,1]" do
|
100
|
+
@sheet[1, nil].value.should eq 'foo'
|
101
|
+
@sheet[nil, 1].value.should eq 'foo'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
it "change a cell to 'bar'" do
|
108
|
+
@sheet[1, 1] = 'bar'
|
109
|
+
@sheet[1, 1].value.should eq 'bar'
|
84
110
|
end
|
85
111
|
|
86
|
-
it "change a cell to
|
87
|
-
@sheet[
|
88
|
-
@sheet[
|
112
|
+
it "should change a cell to nil" do
|
113
|
+
@sheet[1, 1] = nil
|
114
|
+
@sheet[1, 1].value.should eq nil
|
89
115
|
end
|
90
116
|
|
91
117
|
describe '#each' do
|
@@ -93,7 +119,7 @@ describe RobustExcelOle::Sheet do
|
|
93
119
|
@sheet.each_with_index do |cell, i|
|
94
120
|
case i
|
95
121
|
when 0
|
96
|
-
cell.value.should eq '
|
122
|
+
cell.value.should eq 'foo'
|
97
123
|
when 1
|
98
124
|
cell.value.should eq 'workbook'
|
99
125
|
when 2
|
@@ -179,7 +205,7 @@ describe RobustExcelOle::Sheet do
|
|
179
205
|
@sheet.each_row_with_index do |rows, idx|
|
180
206
|
case idx
|
181
207
|
when 0
|
182
|
-
rows.values.should eq ['
|
208
|
+
rows.values.should eq ['foo', 'workbook', 'sheet1']
|
183
209
|
when 1
|
184
210
|
rows.values.should eq ['foo', nil, 'foobaaa']
|
185
211
|
when 2
|
@@ -266,9 +292,7 @@ describe RobustExcelOle::Sheet do
|
|
266
292
|
[nil, nil, 'third', 'merged']
|
267
293
|
]
|
268
294
|
end
|
269
|
-
|
270
295
|
end
|
271
|
-
|
272
296
|
end
|
273
297
|
|
274
298
|
describe "#each_column_with_index" do
|
@@ -276,7 +300,7 @@ describe RobustExcelOle::Sheet do
|
|
276
300
|
@sheet.each_column_with_index do |columns, idx|
|
277
301
|
case idx
|
278
302
|
when 0
|
279
|
-
columns.values.should eq ['
|
303
|
+
columns.values.should eq ['foo', 'foo', 'matz']
|
280
304
|
when 1
|
281
305
|
columns.values.should eq ['workbook', nil, 'is']
|
282
306
|
when 2
|
@@ -302,7 +326,7 @@ describe RobustExcelOle::Sheet do
|
|
302
326
|
describe "#row_range" do
|
303
327
|
context "with second argument" do
|
304
328
|
before do
|
305
|
-
@row_range = @sheet.row_range(
|
329
|
+
@row_range = @sheet.row_range(1, 2..3)
|
306
330
|
end
|
307
331
|
|
308
332
|
it { @row_range.should be_kind_of RobustExcelOle::Range }
|
@@ -314,7 +338,7 @@ describe RobustExcelOle::Sheet do
|
|
314
338
|
|
315
339
|
context "without second argument" do
|
316
340
|
before do
|
317
|
-
@row_range = @sheet.row_range(
|
341
|
+
@row_range = @sheet.row_range(3)
|
318
342
|
end
|
319
343
|
|
320
344
|
it "should get all cells" do
|
@@ -327,7 +351,7 @@ describe RobustExcelOle::Sheet do
|
|
327
351
|
describe "#col_range" do
|
328
352
|
context "with second argument" do
|
329
353
|
before do
|
330
|
-
@col_range = @sheet.col_range(
|
354
|
+
@col_range = @sheet.col_range(1, 2..3)
|
331
355
|
end
|
332
356
|
|
333
357
|
it { @col_range.should be_kind_of RobustExcelOle::Range }
|
@@ -339,7 +363,7 @@ describe RobustExcelOle::Sheet do
|
|
339
363
|
|
340
364
|
context "without second argument" do
|
341
365
|
before do
|
342
|
-
@col_range = @sheet.col_range(
|
366
|
+
@col_range = @sheet.col_range(2)
|
343
367
|
end
|
344
368
|
|
345
369
|
it "should get all cells" do
|
@@ -349,9 +373,11 @@ describe RobustExcelOle::Sheet do
|
|
349
373
|
end
|
350
374
|
|
351
375
|
describe "nvalue" do
|
352
|
-
|
376
|
+
|
377
|
+
context "returning the value of a range" do
|
378
|
+
|
353
379
|
before do
|
354
|
-
@book1 = RobustExcelOle::Book.open(@dir + '/
|
380
|
+
@book1 = RobustExcelOle::Book.open(@dir + '/another_workbook.xls', :read_only => true)
|
355
381
|
@sheet1 = @book1[0]
|
356
382
|
end
|
357
383
|
|
@@ -359,28 +385,90 @@ describe RobustExcelOle::Sheet do
|
|
359
385
|
@book1.close
|
360
386
|
end
|
361
387
|
|
362
|
-
it "should return value of a range" do
|
363
|
-
@sheet1.nvalue("
|
388
|
+
it "should return value of a range with nvalue and brackets operator" do
|
389
|
+
@sheet1.nvalue("firstcell").should == "foo"
|
390
|
+
@sheet1["firstcell"].should == "foo"
|
364
391
|
end
|
365
392
|
|
366
393
|
it "should raise an error if name not defined" do
|
367
394
|
expect {
|
368
|
-
value = @sheet1.nvalue("
|
369
|
-
}.to raise_error(
|
395
|
+
value = @sheet1.nvalue("foo")
|
396
|
+
}.to raise_error(SheetError, "name foo not in sheet")
|
397
|
+
expect {
|
398
|
+
@sheet1["foo"]
|
399
|
+
}.to raise_error(SheetError, "name foo not in sheet")
|
400
|
+
end
|
401
|
+
|
402
|
+
it "should return default value if name not defined" do
|
403
|
+
@sheet1.nvalue("foo", :default => 2).should == 2
|
370
404
|
end
|
405
|
+
end
|
406
|
+
end
|
371
407
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
408
|
+
describe "set_nvalue" do
|
409
|
+
|
410
|
+
context "setting the value of a range" do
|
411
|
+
|
412
|
+
before do
|
413
|
+
@book1 = RobustExcelOle::Book.open(@dir + '/another_workbook.xls', :read_only => true)
|
414
|
+
@sheet1 = @book1[0]
|
415
|
+
end
|
416
|
+
|
417
|
+
after do
|
418
|
+
@book1.close
|
419
|
+
end
|
420
|
+
|
421
|
+
it "should set a range to a value" do
|
422
|
+
@sheet1.nvalue("firstcell").should == "foo"
|
423
|
+
@sheet1[1,1].Value.should == "foo"
|
424
|
+
@sheet1.set_nvalue("firstcell","foo")
|
425
|
+
@sheet1.nvalue("firstcell").should == "foo"
|
426
|
+
@sheet1[1,1].Value.should == "foo"
|
427
|
+
@sheet1["firstcell"] = "bar"
|
428
|
+
@sheet1.nvalue("firstcell").should == "bar"
|
429
|
+
@sheet1[1,1].Value.should == "bar"
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
describe "set_name" do
|
435
|
+
|
436
|
+
context "setting the name of a range" do
|
437
|
+
|
438
|
+
before do
|
439
|
+
@book1 = RobustExcelOle::Book.open(@dir + '/another_workbook.xls', :read_only => true, :visible => true)
|
440
|
+
@sheet1 = @book1[0]
|
441
|
+
end
|
442
|
+
|
443
|
+
after do
|
444
|
+
@book1.close
|
445
|
+
end
|
446
|
+
|
447
|
+
it "should name an unnamed range with a giving address" do
|
448
|
+
expect{
|
449
|
+
@sheet1[1,2].Name.Name
|
450
|
+
}.to raise_error
|
451
|
+
@sheet1.set_name("foo",1,2)
|
452
|
+
@sheet1[1,2].Name.Name.should == "Sheet1!foo"
|
453
|
+
end
|
454
|
+
|
455
|
+
it "should rename an already named range with a giving address" do
|
456
|
+
@sheet1[1,1].Name.Name.should == "Sheet1!firstcell"
|
457
|
+
@sheet1.set_name("foo",1,1)
|
458
|
+
@sheet1[1,1].Name.Name.should == "Sheet1!foo"
|
459
|
+
end
|
460
|
+
|
461
|
+
it "should raise an error" do
|
462
|
+
expect{
|
463
|
+
@sheet1.set_name("foo",-2,1)
|
464
|
+
}.to raise_error(SheetError, "cannot add name foo to cell with row -2 and column 1")
|
465
|
+
end
|
378
466
|
end
|
379
467
|
end
|
380
468
|
|
381
469
|
describe "#method_missing" do
|
382
470
|
it "can access COM method" do
|
383
|
-
@sheet.Cells(1,1).Value.should eq '
|
471
|
+
@sheet.Cells(1,1).Value.should eq 'foo'
|
384
472
|
end
|
385
473
|
|
386
474
|
context "unknown method" do
|