robust_excel_ole 1.1.5 → 1.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog +6 -0
  3. data/README.rdoc +2 -2
  4. data/docs/README_excel.rdoc +2 -3
  5. data/docs/README_open.rdoc +8 -12
  6. data/docs/README_ranges.rdoc +21 -9
  7. data/docs/README_sheet.rdoc +1 -1
  8. data/lib/robust_excel_ole/book.rb +3 -23
  9. data/lib/robust_excel_ole/excel.rb +2 -15
  10. data/lib/robust_excel_ole/reo_common.rb +11 -7
  11. data/lib/robust_excel_ole/sheet.rb +36 -15
  12. data/lib/robust_excel_ole/version.rb +1 -1
  13. data/robust_excel_ole.gemspec +1 -1
  14. data/spec/book_spec.rb +1 -1
  15. data/spec/book_specs/book_close_spec.rb +3 -3
  16. data/spec/book_specs/book_misc_spec.rb +25 -1
  17. data/spec/book_specs/book_open_spec.rb +299 -5
  18. data/spec/book_specs/book_sheet_spec.rb +1 -1
  19. data/spec/book_specs/book_unobtr_spec.rb +275 -35
  20. data/spec/data/another_workbook.xls +0 -0
  21. data/spec/data/different_workbook.xls +0 -0
  22. data/spec/data/workbook.xls +0 -0
  23. data/spec/excel_spec.rb +118 -5
  24. data/spec/helpers/key_sender.rb +2 -2
  25. data/spec/reo_common_spec.rb +0 -4
  26. data/spec/sheet_spec.rb +32 -0
  27. data/spec/spec_helper.rb +3 -0
  28. metadata +3 -21
  29. data/spec/ruby1.8.6_rspec2.14/book_spec.rb +0 -1421
  30. data/spec/ruby1.8.6_rspec2.14/book_specs/book_all_spec.rb +0 -22
  31. data/spec/ruby1.8.6_rspec2.14/book_specs/book_close_spec.rb +0 -252
  32. data/spec/ruby1.8.6_rspec2.14/book_specs/book_misc_spec.rb +0 -1070
  33. data/spec/ruby1.8.6_rspec2.14/book_specs/book_open_spec.rb +0 -1855
  34. data/spec/ruby1.8.6_rspec2.14/book_specs/book_save_spec.rb +0 -514
  35. data/spec/ruby1.8.6_rspec2.14/book_specs/book_sheet_spec.rb +0 -395
  36. data/spec/ruby1.8.6_rspec2.14/book_specs/book_subclass_spec.rb +0 -51
  37. data/spec/ruby1.8.6_rspec2.14/book_specs/book_unobtr_spec.rb +0 -1737
  38. data/spec/ruby1.8.6_rspec2.14/bookstore_spec.rb +0 -495
  39. data/spec/ruby1.8.6_rspec2.14/cell_spec.rb +0 -76
  40. data/spec/ruby1.8.6_rspec2.14/cygwin_spec.rb +0 -42
  41. data/spec/ruby1.8.6_rspec2.14/excel_spec.rb +0 -1820
  42. data/spec/ruby1.8.6_rspec2.14/general_spec.rb +0 -212
  43. data/spec/ruby1.8.6_rspec2.14/range_spec.rb +0 -131
  44. data/spec/ruby1.8.6_rspec2.14/reo_common_spec.rb +0 -130
  45. data/spec/ruby1.8.6_rspec2.14/sheet_spec.rb +0 -663
  46. data/spec/ruby1.8.6_rspec2.14/spec_helper.rb +0 -35
@@ -1,76 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), './spec_helper')
3
-
4
- include RobustExcelOle
5
-
6
- describe Cell do
7
-
8
- before(:all) do
9
- excel = Excel.new(:reuse => true)
10
- open_books = excel == nil ? 0 : excel.Workbooks.Count
11
- puts "*** open books *** : #{open_books}" if open_books > 0
12
- Excel.kill_all
13
- end
14
-
15
- before do
16
- @dir = create_tmpdir
17
- end
18
-
19
- after do
20
- rm_tmp(@dir)
21
- end
22
-
23
- context "open simple.xls" do
24
- before do
25
- @book = Book.open(@dir + '/workbook.xls', :read_only => true)
26
- @sheet = @book.sheet(2)
27
- @cell = @sheet[1, 1]
28
- end
29
-
30
- after do
31
- @book.close
32
- end
33
-
34
- describe "#value" do
35
- it "get cell's value" do
36
- @cell.value.should eq 'simple'
37
- end
38
- end
39
-
40
- describe "#value=" do
41
- it "change cell data to 'fooooo'" do
42
- @cell.value = 'fooooo'
43
- @cell.value.should eq 'fooooo'
44
- end
45
- end
46
-
47
- describe "#method_missing" do
48
- context "unknown method" do
49
- it { expect { @cell.hogehogefoo }.to raise_error }
50
- end
51
- end
52
-
53
- end
54
-
55
- context "open merge_cells.xls" do
56
- before do
57
- @book = Book.open(@dir + '/merge_cells.xls', :read_only => true)
58
- @sheet = @book.sheet(1)
59
- end
60
-
61
- after do
62
- @book.close
63
- end
64
-
65
- it "merged cell get same value" do
66
- @sheet[1, 1].value.should be_nil
67
- @sheet[2, 1].value.should eq 'first merged'
68
- end
69
-
70
- it "set merged cell" do
71
- @sheet[2, 1].value = "set merge cell"
72
- @sheet[2, 1].value.should eq "set merge cell"
73
- @sheet[2, 2].value.should eq "set merge cell"
74
- end
75
- end
76
- end
@@ -1,42 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), './spec_helper')
3
-
4
- describe "on cygwin", :if => RUBY_PLATFORM =~ /cygwin/ do
5
- describe ".cygpath" do
6
- context "cygwin path is '/cygdrive/c/Users'" do
7
- context "with '-w' options" do
8
- it { RobustExcelOle::Cygwin.cygpath('-w', '/cygdrive/c/Users').should eq 'C:\\Users' }
9
- end
10
-
11
- context "with '-wa' options" do
12
- it { RobustExcelOle::Cygwin.cygpath('-wa', '/cygdrive/c/Users').should eq 'C:\\Users' }
13
- end
14
-
15
- context "with '-ws' options" do
16
- it { RobustExcelOle::Cygwin.cygpath('-ws', '/cygdrive/c/Users').should eq 'C:\\Users' }
17
- end
18
- end
19
-
20
- context "windows path is 'C:\\Users'" do
21
- context "with '-u option" do
22
- it { RobustExcelOle::Cygwin.cygpath('-u', 'C:\\Users').should eq '/cygdrive/c/Users'}
23
- end
24
- end
25
-
26
- context "cygwin path is './'" do
27
- context "with '-u' options" do
28
- it { RobustExcelOle::Cygwin.cygpath('-u', './').should eq './' }
29
- end
30
-
31
- context "with '-ua' options" do
32
- it { RobustExcelOle::Cygwin.cygpath('-ua', './').should eq File.expand_path('./') + '/' }
33
- end
34
-
35
- context "with '-us' options" do
36
- it { RobustExcelOle::Cygwin.cygpath('-us', './').should eq './' }
37
- end
38
- end
39
-
40
- end
41
-
42
- end
@@ -1,1820 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- require File.join(File.dirname(__FILE__), './spec_helper')
4
-
5
- $VERBOSE = nil
6
-
7
- include General
8
-
9
- module RobustExcelOle
10
-
11
- describe Excel do
12
-
13
- before(:all) do
14
- Excel.kill_all
15
- sleep 0.2
16
- end
17
-
18
- before do
19
- @dir = create_tmpdir
20
- @simple_file = @dir + '/workbook.xls'
21
- @another_simple_file = @dir + '/another_workbook.xls'
22
- @different_file = @dir + '/different_workbook.xls'
23
- @invalid_name_file = 'b/workbook.xls'
24
- @simple_file1 = @simple_file
25
- @different_file1 = @different_file
26
- end
27
-
28
- after do
29
- Excel.kill_all
30
- rm_tmp(@dir)
31
- end
32
-
33
- context "Illegal Refrence" do
34
-
35
- before do
36
-
37
- book1 = Book.open(@simple_file1)
38
- book2 = Book.open(@simple_file1, :force_excel => :new)
39
- a = book1.saved
40
- end
41
-
42
- it "should not cause warning 'Illegal Reference probably recycled'" do
43
- Excel.close_all
44
- book = Book.open(@simple_file)
45
- end
46
- end
47
-
48
- context "excel creation" do
49
-
50
- def creation_ok? # :nodoc: #
51
- @excel.alive?.should be_true
52
- @excel.Visible.should be_false
53
- @excel.DisplayAlerts.should be_false
54
- @excel.Name.should == "Microsoft Excel"
55
- end
56
-
57
- it "should access excel.excel" do
58
- excel = Excel.new(:reuse => false)
59
- excel.excel.should == excel
60
- excel.excel.should be_a Excel
61
- end
62
-
63
- it "should work with 'new' " do
64
- @excel = Excel.new
65
- creation_ok?
66
- end
67
-
68
- it "should work with 'new' " do
69
- @excel = Excel.new(:reuse => false)
70
- creation_ok?
71
- end
72
-
73
- it "should work with 'reuse' " do
74
- excel = Excel.create
75
- @excel = Excel.new(:reuse => true)
76
- creation_ok?
77
- @excel.should === excel
78
- @excel = Excel.current
79
- creation_ok?
80
- @excel.should === excel
81
- end
82
-
83
- it "should work with 'create' " do
84
- excel = Excel.create
85
- @excel = Excel.new(:reuse => false)
86
- creation_ok?
87
- @excel.should_not == excel
88
- @excel = Excel.create
89
- creation_ok?
90
- @excel.should_not == excel
91
- end
92
-
93
- context "lifting an Excel instance given as WIN32Ole object" do
94
-
95
- before do
96
- @book = Book.open(@simple_file)
97
- @excel = @book.excel
98
- end
99
-
100
- it "lifts an Excel instance given as WIN32Ole object" do
101
- win32ole_excel = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
102
- excel = Excel.new(win32ole_excel)
103
- excel.should be_a Excel
104
- excel.should be_alive
105
- excel.should === @excel
106
- end
107
-
108
- it "lifts an Excel instance given as WIN32Ole object with options" do
109
- @excel.Visible = true
110
- @excel.DisplayAlerts = true
111
- win32ole_excel = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
112
- excel = Excel.new(win32ole_excel)
113
- excel.should be_a Excel
114
- excel.should be_alive
115
- excel.should === @excel
116
- excel.Visible.should be_true
117
- excel.DisplayAlerts.should be_true
118
- end
119
-
120
- end
121
- end
122
-
123
- context "identity transparence" do
124
-
125
- before do
126
- @excel1 = Excel.create
127
- end
128
-
129
- it "should create different Excel instances" do
130
- excel2 = Excel.create
131
- excel2.should_not == @excel1
132
- excel2.Hwnd.should_not == @excel1.Hwnd
133
- end
134
-
135
- it "should reuse the existing Excel instances" do
136
- excel2 = Excel.current
137
- excel2.should === @excel1
138
- excel2.Hwnd.should == @excel1.Hwnd
139
- end
140
-
141
- it "should reuse existing Excel instance with default options for 'new'" do
142
- excel2 = Excel.new
143
- excel2.should === @excel1
144
- excel2.Hwnd.should == @excel1.Hwnd
145
- end
146
-
147
- it "should yield the same Excel instances for the same Excel objects" do
148
- excel2 = @excel1
149
- excel2.Hwnd.should == @excel1.Hwnd
150
- excel2.should === @excel1
151
- end
152
- end
153
-
154
- context "current" do
155
-
156
- it "should connect to the Excel" do
157
- excel1 = Excel.create
158
- excel2 = Excel.current
159
- excel2.should === excel1
160
- end
161
-
162
- it "should create a new Excel if there is no Excel to connect with" do
163
- excel1 = Excel.create
164
- excel1.close
165
- sleep 0.2
166
- excel2 = Excel.current
167
- excel1.should_not be_alive
168
- excel2.should be_alive
169
- Excel.excels_number.should == 1
170
- end
171
-
172
- it "should make the Excel instance not alive if the Excel that was connected with was closed" do
173
- excel1 = Excel.create
174
- excel2 = Excel.current
175
- excel1.close
176
- sleep 0.2
177
- excel1.should_not be_alive
178
- excel2.should_not be_alive
179
- sleep 0.2
180
- Excel.excels_number.should == 0
181
- end
182
-
183
- it "should reuse the first opened Excel instance if not the first opened Excel instance was closed" do
184
- excel1 = Excel.create
185
- excel2 = Excel.create
186
- excel2.close
187
- sleep 0.2
188
- excel3 = Excel.current
189
- excel3.should === excel1
190
- end
191
-
192
- it "should reuse the Excel that was not closed" do
193
- excel1 = Excel.create
194
- excel2 = Excel.create
195
- excel1.close
196
- sleep 0.2
197
- excel3 = Excel.current
198
- excel3.should === excel2
199
- excel3.Hwnd.should == excel2.Hwnd
200
- end
201
- end
202
-
203
- context "excels_number" do
204
-
205
- it "should return right number of excel instances" do
206
- Excel.kill_all
207
- sleep 0.2
208
- n1 = Excel.excels_number
209
- e1 = Excel.create
210
- Excel.excels_number.should == n1 + 1
211
- e2 = Excel.create
212
- Excel.excels_number.should == n1 + 2
213
- end
214
- end
215
-
216
- context "kill Excel processes hard" do
217
-
218
- before do
219
- @excel1 = Excel.create
220
- @excel2 = Excel.create
221
- end
222
-
223
- it "should kill Excel processes" do
224
- Excel.kill_all
225
- @excel1.alive?.should be_false
226
- @excel2.alive?.should be_false
227
- end
228
- end
229
-
230
- context "recreating Excel instances" do
231
-
232
- context "with a single Excel instance" do
233
-
234
- before do
235
- @book1 = Book.open(@simple_file)
236
- @excel1 = @book1.excel
237
- end
238
-
239
- it "should recreate an Excel instance" do
240
- @excel1.close
241
- @excel1.should_not be_alive
242
- @excel1.recreate
243
- @excel1.should be_a Excel
244
- @excel1.should be_alive
245
- @excel1.Visible.should be_false
246
- @excel1.DisplayAlerts.should be_false
247
- @book1.should_not be_alive
248
- @book1.reopen
249
- @book1.should be_alive
250
- @excel1.close
251
- @excel1.should_not be_alive
252
- end
253
-
254
- it "should recreate an Excel instance with old visible and displayalerts values" do
255
- @excel1.visible = true
256
- @excel1.displayalerts = true
257
- @excel1.close
258
- @excel1.should_not be_alive
259
- @excel1.recreate
260
- @excel1.should be_a Excel
261
- @excel1.should be_alive
262
- @excel1.Visible.should be_true
263
- @excel1.DisplayAlerts.should be_true
264
- @book1.reopen
265
- @book1.should be_alive
266
- @excel1.close
267
- @excel1.should_not be_alive
268
- end
269
-
270
- it "should recreate an Excel instance with new visible and displayalerts values" do
271
- @excel1.close
272
- @excel1.should_not be_alive
273
- @excel1.recreate(:visible => true, :displayalerts => true)
274
- @excel1.should be_a Excel
275
- @excel1.should be_alive
276
- @excel1.Visible.should be_true
277
- @excel1.DisplayAlerts.should be_true
278
- @book1.reopen
279
- @book1.should be_alive
280
- @excel1.close
281
- @excel1.should_not be_alive
282
- end
283
-
284
- it "should recreate an Excel instance and reopen the book" do
285
- @excel1.close
286
- @excel1.should_not be_alive
287
- @excel1.recreate(:reopen_workbooks => true)
288
- @excel1.should be_a Excel
289
- @excel1.should be_alive
290
- @excel1.Visible.should be_false
291
- @excel1.DisplayAlerts.should be_false
292
- @book1.should be_alive
293
- @excel1.close
294
- @excel1.should_not be_alive
295
- end
296
- end
297
-
298
- context "with several Excel instances" do
299
-
300
- before do
301
- @book1 = Book.open(@simple_file)
302
- @book2 = Book.open(@another_simple_file, :force_excel => @book1)
303
- @book3 = Book.open(@different_file, :force_excel => :new)
304
- @excel1 = @book1.excel
305
- @excel3 = @book3.excel
306
- @excel1.visible = true
307
- @excel3.displayalerts = true
308
- end
309
-
310
- it "should recreate several Excel instances" do
311
- @excel1.close(:if_unsaved => :forget)
312
- @excel3.close
313
- sleep 0.2
314
- @excel1.should_not be_alive
315
- @excel3.should_not be_alive
316
- @excel1.recreate(:reopen_workbooks => true, :displayalerts => true)
317
- @excel1.should be_alive
318
- @excel1.should be_a Excel
319
- @excel1.Visible.should be_true
320
- @excel1.DisplayAlerts.should be_true
321
- @book1.should be_alive
322
- @book2.should be_alive
323
- @excel3.recreate(:visible => true)
324
- @excel3.should be_alive
325
- @excel3.should be_a Excel
326
- @excel3.Visible.should be_true
327
- @excel3.DisplayAlerts.should be_true
328
- @book3.reopen
329
- @book3.should be_alive
330
- @book3.excel.should == @excel3
331
- @excel1.close(:if_unsaved => :forget)
332
- sleep 0.2
333
- @excel1.should_not be_alive
334
- @excel3.close
335
- sleep 0.2
336
- @excel3.should_not be_alive
337
- end
338
- end
339
- end
340
-
341
- context "close excel instances" do
342
- def direct_excel_creation_helper # :nodoc: #
343
- expect { WIN32OLE.connect("Excel.Application") }.to raise_error
344
- sleep 0.1
345
- ole_excel1 = WIN32OLE.new("Excel.Application")
346
- ole_excel1.Workbooks.Add
347
- ole_excel2 = WIN32OLE.new("Excel.Application")
348
- ole_excel2.Workbooks.Add
349
- expect { WIN32OLE.connect("Excel.Application") }.to_not raise_error
350
- end
351
-
352
- it "simple file with default" do
353
- Excel.kill_all
354
- direct_excel_creation_helper
355
- sleep 4
356
- Excel.kill_all
357
- sleep 4
358
- expect { WIN32OLE.connect("Excel.Application") }.to raise_error
359
- end
360
- end
361
-
362
- describe "close_all" do
363
-
364
- context "with saved workbooks" do
365
-
366
- it "should do with no Excel instances" do
367
- expect{
368
- Excel.close_all
369
- }.to_not raise_error
370
- end
371
-
372
- it "should close one Excel instance" do
373
- excel1 = Excel.create
374
- result = Excel.close_all
375
- sleep 0.2
376
- excel1.should_not be_alive
377
- result.should == [1,0]
378
- end
379
-
380
- it "should close two Excel instances" do
381
- excel1 = Excel.create
382
- excel2 = Excel.create
383
- result = Excel.close_all
384
- sleep 0.2
385
- excel1.should_not be_alive
386
- excel2.should_not be_alive
387
- result.should == [2,0]
388
- end
389
- end
390
-
391
- context "with unsaved workbooks" do
392
-
393
- context "with one Excel instance" do
394
-
395
- before do
396
- book1 = Book.open(@simple_file1, :visible => true)
397
- @excel1 = book1.excel
398
- sheet1 = book1.sheet(1)
399
- @old_cell_value1 = sheet1[1,1].value
400
- sheet1[1,1] = sheet1[1,1].value == "foo" ? "bar" : "foo"
401
- book1.Saved.should be_false
402
- end
403
-
404
- it "should save the unsaved workbook" do
405
- result = Excel.close_all(:if_unsaved => :save)
406
- sleep 0.2
407
- @excel1.should_not be_alive
408
- new_book1 = Book.open(@simple_file1)
409
- new_sheet1 = new_book1.sheet(1)
410
- new_sheet1[1,1].value.should_not == @old_cell_value1
411
- new_book1.close
412
- result.should == [1,0]
413
- end
414
-
415
- it "should forget the unsaved workbook" do
416
- result = Excel.close_all(:if_unsaved => :forget)
417
- sleep 0.2
418
- @excel1.should_not be_alive
419
- new_book1 = Book.open(@simple_file1)
420
- new_sheet1 = new_book1.sheet(1)
421
- new_sheet1[1,1].value.should == @old_cell_value1
422
- new_book1.close
423
- result.should == [1,0]
424
- end
425
- end
426
-
427
- context "with two Excel instances" do
428
-
429
- before do
430
- book1 = Book.open(@simple_file1, :force_excel => :new)
431
- book2 = Book.open(@different_file, :force_excel => :new)
432
- @excel1 = book1.excel
433
- @excel2 = book2.excel
434
- sheet2 = book2.sheet(1)
435
- @old_cell_value2 = sheet2[1,1].value
436
- sheet2[1,1] = sheet2[1,1].value == "foo" ? "bar" : "foo"
437
- end
438
-
439
- it "should close the first Excel without unsaved workbooks and then raise an error" do
440
- expect{
441
- Excel.close_all(:if_unsaved => :raise)
442
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
443
- sleep 0.2
444
- @excel1.should_not be_alive
445
- @excel2.should be_alive
446
- result = Excel.close_all(:if_unsaved => :forget)
447
- sleep 0.2
448
- @excel2.should_not be_alive
449
- result.should == [1,0]
450
- end
451
-
452
- it "should close the first Excel without unsaved workbooks and then raise an error" do
453
- expect{
454
- Excel.close_all
455
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
456
- sleep 0.2
457
- @excel1.should_not be_alive
458
- @excel2.should be_alive
459
- result = Excel.close_all(:if_unsaved => :forget)
460
- sleep 0.2
461
- @excel2.should_not be_alive
462
- result.should == [1,0]
463
- end
464
-
465
- it "should close the Excel instances with saving the unsaved workbooks" do
466
- result = Excel.close_all(:if_unsaved => :save)
467
- sleep 0.2
468
- @excel1.should_not be_alive
469
- @excel2.should_not be_alive
470
- new_book2 = Book.open(@different_file1)
471
- new_sheet2 = new_book2.sheet(1)
472
- new_sheet2[1,1].value.should_not == @old_cell_value2
473
- new_book2.close
474
- result.should == [2,0]
475
- end
476
-
477
- it "should close the Excel instances without saving the unsaved workbooks" do
478
- result = Excel.close_all(:if_unsaved => :forget)
479
- sleep 0.2
480
- @excel1.should_not be_alive
481
- @excel2.should_not be_alive
482
- new_book2 = Book.open(@different_file1)
483
- new_sheet2 = new_book2.sheet(1)
484
- new_sheet2[1,1].value.should == @old_cell_value2
485
- new_book2.close
486
- result.should == [2,0]
487
- end
488
-
489
- it "should raise an error for invalid option" do
490
- expect {
491
- Excel.close_all(:if_unsaved => :invalid_option)
492
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option")
493
- end
494
- end
495
-
496
- context "with three Excel instances" do
497
-
498
- before do
499
- @book1 = Book.open(@simple_file1, :force_excel => :new)
500
- @book2 = Book.open(@another_simple_file, :force_excel => :new)
501
- @book3 = Book.open(@different_file, :force_excel => :new)
502
- old_cell_value1 = @book2.sheet(1)[1,1].value
503
- @book2.sheet(1)[1,1] = old_cell_value1 == "foo" ? "bar" : "foo"
504
- end
505
-
506
- it "should close the 1st and 3rd Excel instances that have saved workbooks" do
507
- expect{
508
- Excel.close_all(:if_unsaved => :raise)
509
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
510
- sleep 0.2
511
- @book1.excel.should_not be_alive
512
- @book2.excel.should be_alive
513
- @book3.excel.should_not be_alive
514
- result = Excel.close_all(:if_unsaved => :forget)
515
- @book2.excel.should_not be_alive
516
- result.should == [1,0]
517
- end
518
- end
519
-
520
- context "with unknown Excel instances" do
521
-
522
- before do
523
- @ole_xl = WIN32OLE.new('Excel.Application')
524
- @book1 = Book.open(@simple_file1, :force_excel => :new)
525
- @book2 = Book.open(@another_simple_file, :force_excel => :new)
526
- @book3 = Book.open(@different_file, :force_excel => :new)
527
- old_cell_value1 = @book2.sheet(1)[1,1].value
528
- @book2.sheet(1)[1,1] = old_cell_value1 == "foo" ? "bar" : "foo"
529
- end
530
-
531
- it "should close three Excel instances that have saved workbooks" do
532
- expect{
533
- Excel.close_all(:if_unsaved => :raise)
534
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
535
- sleep 0.2
536
- expect{
537
- @ole_xl.Name
538
- }.to raise_error(WIN32OLERuntimeError)
539
- @book1.excel.should_not be_alive
540
- @book2.excel.should be_alive
541
- @book3.excel.should_not be_alive
542
- result = Excel.close_all(:if_unsaved => :forget)
543
- @book2.excel.should_not be_alive
544
- result.should == [1,0]
545
- end
546
-
547
- it "should close all four Excel instances" do
548
- result = Excel.close_all(:if_unsaved => :forget)
549
- sleep 0.2
550
- expect{
551
- @ole_xl.Name
552
- }.to raise_error(RuntimeError, "failed to get Dispatch Interface")
553
- @book1.excel.should_not be_alive
554
- @book2.excel.should_not be_alive
555
- @book3.excel.should_not be_alive
556
- result.should == [4,0]
557
- end
558
- end
559
-
560
- end
561
- end
562
-
563
- describe "close" do
564
-
565
- context "with saved workbooks" do
566
-
567
- before do
568
- @excel = Excel.create
569
- @book = Book.open(@simple_file)
570
- @excel.should be_alive
571
- end
572
-
573
- it "should close the Excel" do
574
- @book.should be_alive
575
- @excel.close
576
- sleep 0.2
577
- @excel.should_not be_alive
578
- @book.should_not be_alive
579
- end
580
-
581
- it "should close the Excel without destroying the others" do
582
- excel2 = Excel.create
583
- @excel.close
584
- sleep 0.2
585
- @excel.should_not be_alive
586
- excel2.should be_alive
587
- end
588
- end
589
-
590
- context "with unsaved workbooks" do
591
-
592
- before do
593
- @excel = Excel.create
594
- @book = Book.open(@simple_file)
595
- sheet = @book.sheet(1)
596
- @old_cell_value = sheet[1,1].value
597
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
598
- @book2 = Book.open(@another_simple_file)
599
- sheet2 = @book2.sheet(1)
600
- @old_cell_value2 = sheet2[1,1].value
601
- sheet2[1,1] = sheet2[1,1].value == "foo" ? "bar" : "foo"
602
- @excel.should be_alive
603
- @book.should be_alive
604
- @book.saved.should be_false
605
- @book2.should be_alive
606
- @book2.saved.should be_false
607
- end
608
-
609
- it "should raise an error" do
610
- expect{
611
- @excel.close(:if_unsaved => :raise)
612
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
613
- end
614
-
615
- it "should raise an error per default" do
616
- expect{
617
- @excel.close(:if_unsaved => :raise)
618
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
619
- end
620
-
621
- it "should close the Excel without saving the workbook" do
622
- result = @excel.close(:if_unsaved => :forget)
623
- sleep 0.2
624
- @excel.should_not be_alive
625
- result.should == 1
626
- new_book = Book.open(@simple_file)
627
- new_sheet = new_book.sheet(1)
628
- new_sheet[1,1].value.should == @old_cell_value
629
- new_book.close
630
- end
631
-
632
- it "should close the Excel without saving the workbook even with displayalerts true" do
633
- @excel.displayalerts = false
634
- @excel.should be_alive
635
- @excel.displayalerts = true
636
- result = @excel.close(:if_unsaved => :forget)
637
- sleep 0.2
638
- result.should == 1
639
- @excel.should_not be_alive
640
- new_book = Book.open(@simple_file)
641
- new_sheet = new_book.sheet(1)
642
- new_sheet[1,1].value.should == @old_cell_value
643
- new_book.close
644
- end
645
-
646
- it "should close the Excel with saving the workbook" do
647
- @excel.should be_alive
648
- result = @excel.close(:if_unsaved => :save)
649
- sleep 0.2
650
- result.should == 1
651
- @excel.should_not be_alive
652
- new_book = Book.open(@simple_file)
653
- new_sheet = new_book.sheet(1)
654
- new_sheet[1,1].value.should_not == @old_cell_value
655
- new_book.close
656
- end
657
-
658
- it "should raise an error for invalid option" do
659
- expect {
660
- @excel.close(:if_unsaved => :invalid_option)
661
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option")
662
- end
663
- end
664
-
665
- context "with :if_unsaved => :alert" do
666
-
667
- before do
668
- @key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '/helpers/key_sender.rb') + '" "Microsoft Excel" ' , "w"
669
- @excel = Excel.create(:visible => true)
670
- @book = Book.open(@simple_file, :visible => true)
671
- sheet = @book.sheet(1)
672
- @old_cell_value = sheet[1,1].value
673
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
674
- end
675
-
676
- after do
677
- @key_sender.close
678
- end
679
-
680
- it "should save if user answers 'yes'" do
681
- # "Yes" is to the left of "No", which is the default. --> language independent
682
- @excel.should be_alive
683
- @key_sender.puts "{enter}"
684
- result = @excel.close(:if_unsaved => :alert)
685
- @excel.should_not be_alive
686
- result.should == 1
687
- new_book = Book.open(@simple_file)
688
- new_sheet = new_book.sheet(1)
689
- new_sheet[1,1].value.should_not == @old_cell_value
690
- new_book.close
691
- end
692
-
693
- it "should not save if user answers 'no'" do
694
- @excel.should be_alive
695
- @book.should be_alive
696
- @book.saved.should be_false
697
- @key_sender.puts "{right}{enter}"
698
- result = @excel.close(:if_unsaved => :alert)
699
- @excel.should_not be_alive
700
- result.should == 1
701
- @book.should_not be_alive
702
- new_book = Book.open(@simple_file)
703
- new_sheet = new_book.sheet(1)
704
- new_sheet[1,1].value.should == @old_cell_value
705
- new_book.close
706
- end
707
-
708
- it "should not save if user answers 'cancel'" do
709
- # strangely, in the "cancel" case, the question will sometimes be repeated twice
710
- @excel.should be_alive
711
- @book.should be_alive
712
- @book.saved.should be_false
713
- @key_sender.puts "{left}{enter}"
714
- @key_sender.puts "{left}{enter}"
715
- expect{
716
- @excel.close(:if_unsaved => :alert)
717
- }.to raise_error(ExcelREOError, "user canceled or runtime error")
718
- end
719
- end
720
- end
721
-
722
- describe "close_workbooks" do
723
-
724
- context "with standard" do
725
-
726
- before do
727
- @book = Book.open(@simple_file)
728
- sheet = @book.sheet(1)
729
- @old_cell_value = sheet[1,1].value
730
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
731
- @book3 = Book.open(@different_file, :read_only => true)
732
- sheet3 = @book3.sheet(1)
733
- sheet3[1,1] = sheet3[1,1].value == "foo" ? "bar" : "foo"
734
- @excel = @book.excel
735
- @book2 = Book.open(@another_simple_file, :force_excel => :new)
736
- end
737
-
738
- it "should be ok if there are no unsaved workbooks" do
739
- expect{
740
- @book2.excel.close_workbooks
741
- }.to_not raise_error
742
- end
743
-
744
- it "should raise error" do
745
- expect{
746
- @excel.close_workbooks(:if_unsaved => :raise)
747
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
748
- end
749
-
750
- it "should raise error per default" do
751
- expect{
752
- @excel.close_workbooks
753
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks")
754
- end
755
-
756
- it "should close the workbook with forgetting the workbook" do
757
- @excel.close_workbooks(:if_unsaved => :forget)
758
- sleep 0.2
759
- @excel.should be_alive
760
- @excel.Workbooks.Count.should == 0
761
- new_book = Book.open(@simple_file)
762
- new_sheet = new_book.sheet(1)
763
- new_sheet[1,1].value.should == @old_cell_value
764
- new_book.close
765
- end
766
-
767
- it "should close the workbook with saving the workbook" do
768
- @excel.close_workbooks(:if_unsaved => :save)
769
- sleep 0.2
770
- @excel.should be_alive
771
- @excel.Workbooks.Count.should == 0
772
- new_book = Book.open(@simple_file)
773
- new_sheet = new_book.sheet(1)
774
- new_sheet[1,1].value.should_not == @old_cell_value
775
- new_book.close
776
- end
777
-
778
- it "should raise an error for invalid option" do
779
- expect {
780
- @excel.close_workbooks(:if_unsaved => :invalid_option)
781
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option")
782
- end
783
- end
784
- end
785
-
786
- describe "retain_saved_workbooks" do
787
-
788
- before do
789
- @book1 = Book.open(@simple_file)
790
- @book2 = Book.open(@another_simple_file)
791
- @book3 = Book.open(@different_file)
792
- sheet2 = @book2.sheet(1)
793
- sheet2[1,1] = sheet2[1,1].value == "foo" ? "bar" : "foo"
794
- @book2.Saved.should be_false
795
- @excel = Excel.current
796
- end
797
-
798
- it "should retain saved workbooks" do
799
- @excel.retain_saved_workbooks do
800
- sheet1 = @book1.sheet(1)
801
- sheet1[1,1] = sheet1[1,1].value == "foo" ? "bar" : "foo"
802
- @book1.Saved.should be_false
803
- sheet3 = @book3.sheet(1)
804
- sheet3[1,1] = sheet3[1,1].value == "foo" ? "bar" : "foo"
805
- @book3.Saved.should be_false
806
- end
807
- @book1.Saved.should be_true
808
- @book2.Saved.should be_false
809
- @book3.Saved.should be_true
810
- end
811
- end
812
-
813
- describe "unsaved_workbooks" do
814
-
815
- context "with standard" do
816
-
817
- before do
818
- @book = Book.open(@simple_file)
819
- sheet = @book.sheet(1)
820
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
821
- @book3 = Book.open(@different_file, :read_only => true)
822
- sheet3 = @book3.sheet(1)
823
- sheet3[1,1] = sheet3[1,1].value == "foo" ? "bar" : "foo"
824
- @book.Saved.should be_false
825
- @book3.Saved.should be_false
826
- end
827
-
828
- it "should list unsaved workbooks" do
829
- excel = @book.excel
830
- # unsaved_workbooks yields different WIN32OLE objects than book.workbook
831
- uw_names = []
832
- excel.unsaved_workbooks.each {|uw| uw_names << uw.Name}
833
- uw_names.should == [@book.ole_workbook.Name]
834
- end
835
-
836
- it "should yield true, that there are unsaved workbooks" do
837
- Excel.contains_unsaved_workbooks?.should be_true
838
- end
839
- end
840
- end
841
-
842
- describe "unsaved_known_workbooks" do
843
-
844
- it "should return empty list" do
845
- Excel.unsaved_known_workbooks.should be_empty
846
- end
847
-
848
- it "should return empty list for first Excel instance" do
849
- book = Book.open(@simple_file)
850
- Excel.unsaved_known_workbooks.should == [[]]
851
- book.close
852
- end
853
-
854
- it "should return one unsaved book" do
855
- book = Book.open(@simple_file)
856
- sheet = book.sheet(1)
857
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
858
- # Excel.unsaved_known_workbooks.should == [[book.ole_workbook]]
859
- unsaved_known_wbs = Excel.unsaved_known_workbooks
860
- unsaved_known_wbs.size.should == 1
861
- unsaved_known_wbs.each do |ole_wb_list|
862
- ole_wb_list.size.should == 1
863
- ole_wb_list.each do |ole_workbook|
864
- ole_workbook.Fullname.tr('\\','/').should == @simple_file
865
- end
866
- end
867
- book2 = Book.open(@another_simple_file)
868
- # Excel.unsaved_known_workbooks.should == [[book.ole_workbook]]
869
- unsaved_known_wbs = Excel.unsaved_known_workbooks
870
- unsaved_known_wbs.size.should == 1
871
- unsaved_known_wbs.each do |ole_wb_list|
872
- ole_wb_list.size.should == 1
873
- ole_wb_list.each do |ole_workbook|
874
- ole_workbook.Fullname.tr('\\','/').should == @simple_file
875
- end
876
- end
877
- book2.close
878
- book.close(:if_unsaved => :forget)
879
- end
880
-
881
- it "should return two unsaved books" do
882
- book = Book.open(@simple_file)
883
- sheet = book.sheet(1)
884
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
885
- book2 = Book.open(@another_simple_file)
886
- sheet2 = book2.sheet(1)
887
- sheet2[1,1] = sheet2[1,1].value == "foo" ? "bar" : "foo"
888
- #Excel.unsaved_known_workbooks.should == [[book.ole_workbook, book2.ole_workbook]]
889
- unsaved_known_wbs = Excel.unsaved_known_workbooks
890
- unsaved_known_wbs.size.should == 1
891
- unsaved_known_wbs.each do |ole_wb_list|
892
- ole_wb_list.size.should == 2
893
- ole_workbook1, ole_workbook2 = ole_wb_list
894
- ole_workbook1.Fullname.tr('\\','/').should == @simple_file
895
- ole_workbook2.Fullname.tr('\\','/').should == @another_simple_file
896
- end
897
- book2.close(:if_unsaved => :forget)
898
- book.close(:if_unsaved => :forget)
899
- end
900
-
901
- it "should return two unsaved books" do
902
- book = Book.open(@simple_file)
903
- sheet = book.sheet(1)
904
- sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
905
- book2 = Book.open(@another_simple_file, :force_excel => :new)
906
- sheet2 = book2.sheet(1)
907
- sheet2[1,1] = sheet2[1,1].value == "foo" ? "bar" : "foo"
908
- #Excel.unsaved_known_workbooks.should == [[book.ole_workbook], [book2.ole_workbook]]
909
- unsaved_known_wbs = Excel.unsaved_known_workbooks
910
- unsaved_known_wbs.size.should == 2
911
- ole_wb_list1, ole_wb_list2 = unsaved_known_wbs
912
- ole_wb_list1.each do |ole_wb_list|
913
- ole_wb_list1.size.should == 1
914
- ole_wb_list1.each do |ole_workbook|
915
- ole_workbook.Fullname.tr('\\','/').should == @simple_file
916
- end
917
- end
918
- ole_wb_list2.each do |ole_wb_list|
919
- ole_wb_list2.size.should == 1
920
- ole_wb_list2.each do |ole_workbook|
921
- ole_workbook.Fullname.tr('\\','/').should == @another_simple_file
922
- end
923
- end
924
- book2.close(:if_unsaved => :forget)
925
- book.close(:if_unsaved => :forget)
926
- end
927
-
928
- end
929
-
930
- describe "alive" do
931
-
932
- it "should yield alive" do
933
- excel = Excel.create
934
- excel.alive?.should be_true
935
- end
936
-
937
- it "should yield not alive" do
938
- excel = Excel.create
939
- excel.close
940
- excel.alive?.should be_false
941
- end
942
-
943
- end
944
-
945
- describe "==" do
946
- before do
947
- @excel1 = Excel.create
948
- end
949
-
950
- it "should be true with two identical excel instances" do
951
- excel2 = Excel.current
952
- excel2.should == @excel1
953
- end
954
-
955
- it "should be false with two different excel instances" do
956
- excel2 = Excel.create
957
- excel2.should_not == @excel1
958
- end
959
-
960
- it "should be false with non-Excel objects" do
961
- @excel1.should_not == "hallo"
962
- @excel1.should_not == 7
963
- @excel1.should_not == nil
964
- end
965
-
966
- # Error
967
- it "should be false with dead Excel objects" do
968
- excel2 = Excel.current
969
- sleep 3
970
- Excel.close_all
971
- sleep 2
972
- excel2.should_not == @excel1
973
- end
974
-
975
- end
976
-
977
- describe "focus" do
978
-
979
- it "should focus" do
980
- excel = Excel.create
981
- excel.focus
982
- excel.Visible.should be_true
983
- end
984
-
985
- end
986
-
987
-
988
-
989
- context "with Visible and DisplayAlerts, focus" do
990
-
991
- it "should bring Excel in focus" do
992
- excel1 = Excel.create
993
- excel2 = Excel.create
994
- excel1.focus
995
- excel1.Visible.should be_true
996
- excel1.visible.should be_true
997
- end
998
-
999
- it "should set default values" do
1000
- excel1 = Excel.new
1001
- excel1.Visible.should be_false
1002
- excel1.DisplayAlerts.should be_false
1003
- excel1.visible.should be_false
1004
- excel1.displayalerts.should == :if_visible
1005
- end
1006
-
1007
- it "should set visible true" do
1008
- excel1 = Excel.new(:visible => true)
1009
- excel1.Visible.should be_true
1010
- excel1.DisplayAlerts.should be_true
1011
- excel1.visible.should be_true
1012
- excel1.displayalerts.should == :if_visible
1013
- end
1014
-
1015
- it "should set visible false" do
1016
- excel1 = Excel.new(:visible => false)
1017
- excel1.Visible.should be_false
1018
- excel1.DisplayAlerts.should be_false
1019
- excel1.visible.should be_false
1020
- excel1.displayalerts.should == :if_visible
1021
- end
1022
-
1023
- it "should set displayalerts true" do
1024
- excel1 = Excel.new(:displayalerts => true)
1025
- excel1.Visible.should be_false
1026
- excel1.DisplayAlerts.should be_true
1027
- excel1.visible.should be_false
1028
- excel1.displayalerts.should be_true
1029
- end
1030
-
1031
- it "should set displayalerts false" do
1032
- excel1 = Excel.new(:displayalerts => false)
1033
- excel1.Visible.should be_false
1034
- excel1.DisplayAlerts.should be_false
1035
- excel1.visible.should be_false
1036
- excel1.displayalerts.should be_false
1037
- end
1038
-
1039
- it "should use values of the current Excel when reusing" do
1040
- excel1 = Excel.create
1041
- excel1.Visible.should be_false
1042
- excel1.DisplayAlerts.should be_false
1043
- excel1.visible.should be_false
1044
- excel1.displayalerts.should == :if_visible
1045
- excel1.Visible = true
1046
- excel1.DisplayAlerts = true
1047
- excel1.Visible.should be_true
1048
- excel1.DisplayAlerts.should be_true
1049
- excel2 = Excel.new(:reuse => true)
1050
- excel2.Visible.should be_true
1051
- excel2.DisplayAlerts.should be_true
1052
- end
1053
-
1054
- it "should take visible and displayalerts from Visible and DisplayAlerts of the connected Excel" do
1055
- excel1 = Excel.create
1056
- excel2 = Excel.current
1057
- excel2.Visible.should be_false
1058
- excel2.visible.should be_false
1059
- excel2.DisplayAlerts.should be_false
1060
- excel2.displayalerts.should == :if_visible
1061
- end
1062
-
1063
- it "should take Visible and DisplayAlerts from the connected Excel" do
1064
- excel1 = Excel.create
1065
- excel2 = Excel.current(:visible => true)
1066
- excel2.Visible.should be_true
1067
- excel2.visible.should be_true
1068
- excel2.DisplayAlerts.should be_true
1069
- excel2.displayalerts.should == :if_visible
1070
- end
1071
-
1072
- it "should set Excel visible and invisible with current" do
1073
- excel1 = Excel.new(:reuse => false, :visible => true)
1074
- excel1.Visible.should be_true
1075
- excel1.visible.should be_true
1076
- excel1.DisplayAlerts.should be_true
1077
- excel1.displayalerts.should == :if_visible
1078
- excel1.visible = false
1079
- excel1.Visible.should be_false
1080
- excel1.visible.should be_false
1081
- excel1.DisplayAlerts.should be_false
1082
- excel1.displayalerts.should == :if_visible
1083
- excel2 = Excel.current(:visible => true)
1084
- excel2.Visible.should be_true
1085
- excel2.visible.should be_true
1086
- excel2.displayalerts.should == :if_visible
1087
- excel2.DisplayAlerts.should be_true
1088
- end
1089
-
1090
- it "should set Excel visible and invisible" do
1091
- excel = Excel.new(:reuse => false, :visible => true)
1092
- excel.Visible.should be_true
1093
- excel.visible.should be_true
1094
- excel.DisplayAlerts.should be_true
1095
- excel.displayalerts.should == :if_visible
1096
- excel.visible = false
1097
- excel.Visible.should be_false
1098
- excel.visible.should be_false
1099
- excel.DisplayAlerts.should be_false
1100
- excel.displayalerts.should == :if_visible
1101
- excel7 = Excel.current
1102
- excel7.should === excel
1103
- excel7.Visible.should be_false
1104
- excel7.DisplayAlerts.should be_false
1105
- excel1 = Excel.create(:visible => true)
1106
- excel1.should_not == excel
1107
- excel1.Visible.should be_true
1108
- excel1.visible.should be_true
1109
- excel1.DisplayAlerts.should be_true
1110
- excel1.displayalerts.should == :if_visible
1111
- excel2 = Excel.create(:visible => false)
1112
- excel2.Visible.should be_false
1113
- excel2.visible.should be_false
1114
- excel2.DisplayAlerts.should be_false
1115
- excel2.displayalerts.should == :if_visible
1116
- excel3 = Excel.current
1117
- excel3.should === excel
1118
- excel3.Visible.should be_false
1119
- excel3.visible.should be_false
1120
- excel3.DisplayAlerts.should be_false
1121
- excel3.displayalerts.should == :if_visible
1122
- excel4 = Excel.current(:visible => true)
1123
- excel4.should === excel
1124
- excel4.Visible.should be_true
1125
- excel4.visible.should be_true
1126
- excel4.DisplayAlerts.should be_true
1127
- excel4.displayalerts.should == :if_visible
1128
- excel5 = Excel.current(:visible => false)
1129
- excel5.should === excel
1130
- excel5.Visible.should be_false
1131
- excel5.visible.should be_false
1132
- excel5.DisplayAlerts.should be_false
1133
- excel5.displayalerts.should == :if_visible
1134
- end
1135
-
1136
- it "should enable or disable Excel DispayAlerts" do
1137
- excel = Excel.new(:reuse => false, :displayalerts => true)
1138
- excel.DisplayAlerts.should be_true
1139
- excel.displayalerts.should be_true
1140
- excel.Visible.should be_false
1141
- excel.visible.should be_false
1142
- excel6 = Excel.current
1143
- excel6.should === excel
1144
- excel6.DisplayAlerts.should be_true
1145
- excel6.displayalerts.should be_true
1146
- excel6.Visible.should be_false
1147
- excel6.visible.should be_false
1148
- excel.displayalerts = false
1149
- excel.DisplayAlerts.should be_false
1150
- excel.displayalerts.should be_false
1151
- excel.Visible.should be_false
1152
- excel.visible.should be_false
1153
- excel7 = Excel.current
1154
- excel7.should === excel
1155
- excel7.DisplayAlerts.should be_false
1156
- excel7.displayalerts.should be_false
1157
- excel7.Visible.should be_false
1158
- excel7.visible.should be_false
1159
- excel1 = Excel.create(:displayalerts => true)
1160
- excel1.should_not == excel
1161
- excel1.DisplayAlerts.should be_true
1162
- excel1.displayalerts.should be_true
1163
- excel1.Visible.should be_false
1164
- excel1.visible.should be_false
1165
- excel2 = Excel.create(:displayalerts => false)
1166
- excel2.DisplayAlerts.should be_false
1167
- excel2.displayalerts.should be_false
1168
- excel2.Visible.should be_false
1169
- excel2.visible.should be_false
1170
- excel3 = Excel.current
1171
- excel3.should === excel
1172
- excel3.DisplayAlerts.should be_false
1173
- excel3.displayalerts.should be_false
1174
- excel3.Visible.should be_false
1175
- excel3.visible.should be_false
1176
- excel4 = Excel.current(:displayalerts => true)
1177
- excel4.should === excel
1178
- excel4.DisplayAlerts.should be_true
1179
- excel4.displayalerts.should be_true
1180
- excel4.Visible.should be_false
1181
- excel4.visible.should be_false
1182
- excel5 = Excel.current(:displayalerts => false)
1183
- excel5.should === excel
1184
- excel5.DisplayAlerts.should be_false
1185
- excel5.displayalerts.should be_false
1186
- excel5.Visible.should be_false
1187
- excel5.visible.should be_false
1188
- end
1189
-
1190
- it "should set Excel visible and displayalerts" do
1191
- excel = Excel.new(:reuse => false, :visible => true, :displayalerts => true)
1192
- excel.DisplayAlerts.should be_true
1193
- excel.displayalerts.should be_true
1194
- excel.Visible.should be_true
1195
- excel.visible.should be_true
1196
- excel6 = Excel.current
1197
- excel6.should === excel
1198
- excel6.DisplayAlerts.should be_true
1199
- excel6.displayalerts.should be_true
1200
- excel6.Visible.should be_true
1201
- excel6.visible.should be_true
1202
- excel.displayalerts = false
1203
- excel.DisplayAlerts.should be_false
1204
- excel.displayalerts.should be_false
1205
- excel.Visible.should be_true
1206
- excel.visible.should be_true
1207
- excel7 = Excel.current
1208
- excel7.should === excel
1209
- excel7.DisplayAlerts.should be_false
1210
- excel7.displayalerts.should be_false
1211
- excel7.Visible.should be_true
1212
- excel7.visible.should be_true
1213
- excel2 = Excel.new(:reuse => false, :visible => true, :displayalerts => true)
1214
- excel2.visible = false
1215
- excel2.DisplayAlerts.should be_true
1216
- excel2.displayalerts.should be_true
1217
- excel2.Visible.should be_false
1218
- excel2.visible.should be_false
1219
- excel3 = Excel.new(:reuse => false, :visible => true, :displayalerts => false)
1220
- excel3.Visible.should be_true
1221
- excel3.DisplayAlerts.should be_false
1222
- excel3 = Excel.new(:reuse => false, :visible => false, :displayalerts => true)
1223
- excel3.Visible.should be_false
1224
- excel3.DisplayAlerts.should be_true
1225
- excel3 = Excel.new(:reuse => false, :visible => false, :displayalerts => false)
1226
- excel3.Visible.should be_false
1227
- excel3.DisplayAlerts.should be_false
1228
- excel4 = Excel.create(:visible => true, :displayalerts => true)
1229
- excel4.DisplayAlerts.should be_true
1230
- excel4.displayalerts.should be_true
1231
- excel4.Visible.should be_true
1232
- excel4.visible.should be_true
1233
- excel5 = Excel.current(:visible => true, :displayalerts => false)
1234
- excel5.should === excel
1235
- excel5.DisplayAlerts.should be_false
1236
- excel5.displayalerts.should be_false
1237
- excel5.Visible.should be_true
1238
- excel5.visible.should be_true
1239
- excel6 = Excel.current(:visible => false, :displayalerts => true)
1240
- excel6.should === excel
1241
- excel6.DisplayAlerts.should be_true
1242
- excel6.displayalerts.should be_true
1243
- excel6.Visible.should be_false
1244
- excel6.visible.should be_false
1245
- end
1246
-
1247
- it "should work with displayalerts == if_visible" do
1248
- excel = Excel.new(:reuse => false, :visible => true, :displayalerts => :if_visible)
1249
- excel.Visible.should be_true
1250
- excel.DisplayAlerts.should be_true
1251
- excel2 = Excel.new(:reuse => false, :visible => false, :displayalerts => :if_visible)
1252
- excel2.Visible.should be_false
1253
- excel2.DisplayAlerts.should be_false
1254
- excel3 = Excel.new(:reuse => false, :displayalerts => :if_visible)
1255
- excel3.Visible.should be_false
1256
- excel3.DisplayAlerts.should be_false
1257
- excel3.visible = true
1258
- excel3.Visible.should be_true
1259
- excel3.DisplayAlerts.should be_true
1260
- excel3.visible = false
1261
- excel3.Visible.should be_false
1262
- excel3.DisplayAlerts.should be_false
1263
- end
1264
-
1265
- it "should keep visible and displayalerts values when reusing Excel" do
1266
- excel = Excel.new(:visible => true)
1267
- excel.Visible.should be_true
1268
- excel.DisplayAlerts.should be_true
1269
- excel2 = Excel.new(:displayalerts => false)
1270
- excel2.should == excel
1271
- excel.Visible.should be_true
1272
- excel.DisplayAlerts.should be_false
1273
- end
1274
-
1275
- it "should keep displayalerts and visible values when reusing Excel" do
1276
- excel = Excel.new(:displayalerts => true)
1277
- excel.Visible.should be_false
1278
- excel.DisplayAlerts.should be_true
1279
- excel2 = Excel.new(:visible => true)
1280
- excel2.should == excel
1281
- excel.Visible.should be_true
1282
- excel.DisplayAlerts.should be_true
1283
- end
1284
-
1285
- end
1286
-
1287
- context "with resetting displayalerts values" do
1288
- before do
1289
- @excel1 = Excel.new(:displayalerts => true)
1290
- @excel2 = Excel.new(:displayalerts => false, :reuse => false)
1291
- @excel3 = Excel.new(:displayalerts => false, :visible => true, :reuse => false)
1292
- end
1293
-
1294
- it "should turn off displayalerts" do
1295
- @excel1.DisplayAlerts.should be_true
1296
- begin
1297
- @excel1.with_displayalerts false do
1298
- @excel1.DisplayAlerts.should be_false
1299
- raise TestError, "any_error"
1300
- end
1301
- rescue TestError
1302
- @excel1.DisplayAlerts.should be_true
1303
- end
1304
- end
1305
-
1306
- it "should turn on displayalerts" do
1307
- @excel2.DisplayAlerts.should be_false
1308
- begin
1309
- @excel1.with_displayalerts true do
1310
- @excel1.DisplayAlerts.should be_true
1311
- raise TestError, "any_error"
1312
- end
1313
- rescue TestError
1314
- @excel2.DisplayAlerts.should be_false
1315
- end
1316
- end
1317
-
1318
- it "should set displayalerts to :if_visible" do
1319
- @excel1.DisplayAlerts.should be_true
1320
- begin
1321
- @excel1.with_displayalerts :if_visible do
1322
- @excel1.DisplayAlerts.should be_false
1323
- @excel1.Visible.should be_false
1324
- raise TestError, "any_error"
1325
- end
1326
- rescue TestError
1327
- @excel1.DisplayAlerts.should be_true
1328
- end
1329
- end
1330
-
1331
- it "should set displayalerts to :if_visible" do
1332
- @excel3.DisplayAlerts.should be_false
1333
- begin
1334
- @excel3.with_displayalerts :if_visible do
1335
- @excel3.DisplayAlerts.should be_true
1336
- @excel3.Visible.should be_true
1337
- raise TestError, "any_error"
1338
- end
1339
- rescue TestError
1340
- @excel3.DisplayAlerts.should be_false
1341
- end
1342
- end
1343
-
1344
- end
1345
-
1346
- context "with screen updating" do
1347
-
1348
- it "should set screen updating" do
1349
- excel1 = Excel.new
1350
- excel1.ScreenUpdating.should be_true
1351
- excel2 = Excel.create(:screenupdating => false)
1352
- excel2.ScreenUpdating.should be_false
1353
- excel3 = Excel.new
1354
- excel3.ScreenUpdating.should be_true
1355
- excel4 = Excel.new(:screenupdating => false)
1356
- excel4.ScreenUpdating.should be_false
1357
- end
1358
-
1359
- end
1360
-
1361
- context "with calculation" do
1362
-
1363
- it "should create and reuse Excel with calculation mode" do
1364
- excel1 = Excel.create(:calculation => :manual)
1365
- excel1.calculation.should == :manual
1366
- excel2 = Excel.create(:calculation => :automatic)
1367
- excel2.calculation.should == :automatic
1368
- excel3 = Excel.current
1369
- excel3.calculation.should == :manual
1370
- excel4 = Excel.current(:calculation => :automatic)
1371
- excel4.calculation.should == :automatic
1372
- excel5 = Excel.new(:reuse => false)
1373
- excel5.calculation.should == nil
1374
- excel6 = Excel.new(:reuse => false, :calculation => :manual)
1375
- excel6.calculation.should == :manual
1376
- end
1377
-
1378
- it "should do with_calculation mode without workbooks" do
1379
- @excel1 = Excel.new
1380
- old_calculation_mode = @excel1.Calculation
1381
- old_calculatebeforesave = @excel1.CalculateBeforeSave
1382
- @excel1.with_calculation(:automatic) do
1383
- @excel1.Calculation.should == old_calculation_mode
1384
- @excel1.CalculateBeforeSave.should == old_calculatebeforesave
1385
- end
1386
- @excel1.with_calculation(:manual) do
1387
- @excel1.Calculation.should == old_calculation_mode
1388
- @excel1.CalculateBeforeSave.should == old_calculatebeforesave
1389
- end
1390
- end
1391
-
1392
- it "should set calculation mode without workbooks" do
1393
- @excel1 = Excel.new
1394
- old_calculation_mode = @excel1.Calculation
1395
- old_calculatebeforesave = @excel1.CalculateBeforeSave
1396
- @excel1.calculation = :automatic
1397
- @excel1.calculation.should == :automatic
1398
- @excel1.Calculation.should == old_calculation_mode
1399
- @excel1.CalculateBeforeSave.should == old_calculatebeforesave
1400
- @excel1.calculation = :manual
1401
- @excel1.calculation.should == :manual
1402
- @excel1.Calculation.should == old_calculation_mode
1403
- @excel1.CalculateBeforeSave.should == old_calculatebeforesave
1404
- end
1405
-
1406
- it "should do with_calculation with workbook" do
1407
- @excel1 = Excel.new
1408
- book = Book.open(@simple_file, :visible => true)
1409
- old_calculation_mode = @excel1.Calculation
1410
- @excel1.with_calculation(:manual) do
1411
- @excel1.calculation.should == :manual
1412
- @excel1.Calculation.should == -4135
1413
- @excel1.CalculateBeforeSave.should be_false
1414
- book.Saved.should be_true
1415
- end
1416
- @excel1.Calculation.should == old_calculation_mode
1417
- @excel1.CalculateBeforeSave.should be_false
1418
- @excel1.with_calculation(:automatic) do
1419
- @excel1.calculation.should == :automatic
1420
- @excel1.Calculation.should == -4105
1421
- @excel1.CalculateBeforeSave.should be_false
1422
- book.Saved.should be_false
1423
- end
1424
- @excel1.Calculation.should == old_calculation_mode
1425
- @excel1.CalculateBeforeSave.should be_false
1426
- end
1427
-
1428
- it "should set calculation mode to manual with workbook" do
1429
- @excel1 = Excel.new
1430
- book = Book.open(@simple_file, :visible => true)
1431
- book.Windows(book.Name).Visible = true
1432
- @excel1.calculation = :manual
1433
- @excel1.calculation.should == :manual
1434
- @excel1.Calculation.should == -4135
1435
- @excel1.CalculateBeforeSave.should be_false
1436
- book.Saved.should be_true
1437
- end
1438
-
1439
- it "should set calculation mode to automatic with workbook" do
1440
- @excel1 = Excel.new
1441
- book = Book.open(@simple_file, :visible => true)
1442
- @excel1.calculation = :automatic
1443
- @excel1.calculation.should == :automatic
1444
- @excel1.Calculation.should == -4105
1445
- @excel1.CalculateBeforeSave.should be_false
1446
- book.Saved.should be_false
1447
- end
1448
-
1449
- it "should set Calculation without workbooks" do
1450
- @excel1 = Excel.new
1451
- expect{
1452
- @excel1.Calculation = -4135
1453
- }.to raise_error(WIN32OLERuntimeError)
1454
- end
1455
-
1456
- it "should do Calculation to manual with workbook" do
1457
- @excel1 = Excel.new
1458
- b = Book.open(@simple_file)
1459
- @excel1.Calculation = -4135
1460
- @excel1.calculation.should == :manual
1461
- @excel1.Calculation.should == -4135
1462
- end
1463
-
1464
- it "should do Calculation to automatic with workbook" do
1465
- @excel1 = Excel.new
1466
- b = Book.open(@simple_file)
1467
- @excel1.Calculation = -4105
1468
- @excel1.calculation.should == :automatic
1469
- @excel1.Calculation.should == -4105
1470
- end
1471
-
1472
- end
1473
-
1474
- context "method delegation for capitalized methods" do
1475
- before do
1476
- @excel1 = Excel.new
1477
- end
1478
-
1479
- it "should raise WIN32OLERuntimeError" do
1480
- expect{ @excel1.NonexistingMethod }.to raise_error(VBAMethodMissingError, /unknown VBA property or method :NonexistingMethod/)
1481
- end
1482
-
1483
- it "should raise NoMethodError for uncapitalized methods" do
1484
- expect{ @excel1.nonexisting_method }.to raise_error(NoMethodError)
1485
- end
1486
-
1487
- it "should report that Excel is not alive" do
1488
- @excel1.close
1489
- expect{ @excel1.Nonexisting_method }.to raise_error(ObjectNotAlive, "method missing: Excel not alive")
1490
- end
1491
-
1492
- end
1493
-
1494
- describe "for_this_instance" do
1495
-
1496
- before do
1497
- @excel = Excel.new(:reuse => false)
1498
- end
1499
-
1500
- it "should set options in the Excel instance" do
1501
- @excel.for_this_instance(:displayalerts => true, :visible => true, :screenupdating => true, :calculaiton => :manual)
1502
- @excel.DisplayAlerts.should be_true
1503
- @excel.Visible.should be_true
1504
- @excel.ScreenUpdating.should be_true
1505
- book = Book.open(@simple_file)
1506
- @excel.Calculation.should == -4135
1507
- book.close
1508
- end
1509
-
1510
- end
1511
-
1512
- context "for_all_workbooks" do
1513
-
1514
- it "should not raise an error for an empty Excel instance" do
1515
- excel = Excel.create
1516
- expect{
1517
- excel.for_all_workbooks(:visible => true, :read_only => true, :check_compatibility => true)
1518
- }.to_not raise_error
1519
- end
1520
-
1521
- it "should set options to true for a workbook" do
1522
- book1 = Book.open(@simple_file)
1523
- book1.excel.for_all_workbooks(:visible => true, :read_only => true, :check_compatibility => true)
1524
- book1.excel.Visible.should be_true
1525
- book1.Windows(book1.Name).Visible.should be_true
1526
- book1.visible.should be_true
1527
- book1.ReadOnly.should be_true
1528
- book1.CheckCompatibility.should be_true
1529
- end
1530
-
1531
- it "should set options for two workbooks" do
1532
- book1 = Book.open(@simple_file)
1533
- book2 = Book.open(@different_file)
1534
- excel = book1.excel
1535
- excel.for_all_workbooks(:visible => true, :read_only => true, :check_compatibility => true)
1536
- excel.Visible.should be_true
1537
- book1.Windows(book1.Name).Visible.should be_true
1538
- book1.visible.should be_true
1539
- book1.ReadOnly.should be_true
1540
- book1.CheckCompatibility.should be_true
1541
- book2.Windows(book2.Name).Visible.should be_true
1542
- book2.visible.should be_true
1543
- book2.ReadOnly.should be_true
1544
- book2.CheckCompatibility.should be_true
1545
- excel.for_all_workbooks(:visible => false, :read_only => false, :check_compatibility => false)
1546
- excel.Visible.should be_true
1547
- book1.Windows(book1.Name).Visible.should be_false
1548
- book1.visible.should be_false
1549
- book2.Windows(book2.Name).Visible.should be_false
1550
- book2.visible.should be_false
1551
- book2.ReadOnly.should be_false
1552
- book2.CheckCompatibility.should be_false
1553
- end
1554
-
1555
- end
1556
-
1557
- describe "known_excel_instances" do
1558
-
1559
- it "should return empty list" do
1560
- Excel.known_excel_instances.should be_empty
1561
- end
1562
-
1563
- it "should return list of one Excel process" do
1564
- excel = Excel.new
1565
- Excel.known_excel_instances.should == [excel]
1566
- excel.close
1567
- end
1568
-
1569
- it "should return list of two Excel processes" do
1570
- excel1 = Excel.create
1571
- excel2 = Excel.create
1572
- Excel.known_excel_instances.should == [excel1,excel2]
1573
- end
1574
-
1575
- it "should return list of two Excel processes" do
1576
- excel1 = Excel.new
1577
- excel2 = Excel.current
1578
- excel3 = Excel.create
1579
- Excel.known_excel_instances.should == [excel1,excel3]
1580
- end
1581
-
1582
- end
1583
-
1584
- context "with hwnd and hwnd2excel" do
1585
-
1586
- before do
1587
- Excel.kill_all
1588
- @excel1 = Excel.new(:visible => true)
1589
- @excel2 = Excel.new(:reuse => false, :visible => false)
1590
- end
1591
-
1592
- it "should yield the correct hwnd" do
1593
- @excel1.Hwnd.should == @excel1.hwnd
1594
- @excel2.Hwnd.should == @excel2.hwnd
1595
- end
1596
-
1597
- it "should provide the same excel instances" do
1598
- @excel1.should_not == @excel2
1599
- excel3 = Excel.hwnd2excel(@excel1.hwnd)
1600
- excel4 = Excel.hwnd2excel(@excel2.hwnd)
1601
- @excel1.should == excel3
1602
- @excel2.should == excel4
1603
- excel3.should_not == excel4
1604
- end
1605
-
1606
- =begin
1607
- # does not work yet
1608
- it "should not say 'probably recycled'" do
1609
- e1_hwnd = @excel1.hwnd
1610
- @excel1.close_workbooks
1611
- weak_xl = WeakRef.new(@excel1.ole_excel)
1612
- @excel1.Quit
1613
- @excel1 = nil
1614
- GC.start
1615
- sleep 2
1616
- process_id = Win32API.new("user32", "GetWindowThreadProcessId", ["I","P"], "I")
1617
- pid_puffer = " " * 32
1618
- process_id.call(e1_hwnd, pid_puffer)
1619
- pid = pid_puffer.unpack("L")[0]
1620
- begin
1621
- Process.kill("KILL", pid)
1622
- rescue
1623
- trace "kill_error: #{$!}"
1624
- end
1625
- if weak_xl.weakref_alive? then
1626
- #if WIN32OLE.ole_reference_count(weak_xlapp) > 0
1627
- begin
1628
- #weak_xl.ole_free
1629
- rescue
1630
- trace "weakref_probl_olefree"
1631
- end
1632
- end
1633
- excel5 = Excel.new(:reuse => false)
1634
- e1_again = Excel.hwnd2excel(e1_hwnd)
1635
- e1_again.Hwnd.should == e1_hwnd
1636
- e1_again.should == nil
1637
- end
1638
- =end
1639
- end
1640
-
1641
- describe "generate workbook" do
1642
-
1643
- context "with standard" do
1644
-
1645
- before do
1646
- @excel1 = Excel.create
1647
- @file_name = @dir + '/bar.xls'
1648
- end
1649
-
1650
- it "should generate a workbook" do
1651
- workbook = @excel1.generate_workbook(@file_name)
1652
- workbook.should be_a WIN32OLE
1653
- workbook.Name.should == File.basename(@file_name)
1654
- workbook.FullName.should == General::absolute_path(@file_name)
1655
- workbook.Saved.should be_true
1656
- workbook.ReadOnly.should be_false
1657
- workbook.Sheets.Count.should == 3
1658
- workbooks = @excel1.Workbooks
1659
- workbooks.Count.should == 1
1660
- end
1661
-
1662
- it "should generate the same workbook twice" do
1663
- workbook = @excel1.generate_workbook(@file_name)
1664
- workbook.should be_a WIN32OLE
1665
- workbook.Name.should == File.basename(@file_name)
1666
- workbook.FullName.should == General::absolute_path(@file_name)
1667
- workbook.Saved.should be_true
1668
- workbook.ReadOnly.should be_false
1669
- workbook.Sheets.Count.should == 3
1670
- workbooks = @excel1.Workbooks
1671
- workbooks.Count.should == 1
1672
- workbook2 = @excel1.generate_workbook(@file_name)
1673
- workbook2.should be_a WIN32OLE
1674
- workbooks = @excel1.Workbooks
1675
- workbooks.Count.should == 2
1676
- end
1677
-
1678
- it "should generate a workbook if one is already existing" do
1679
- book = Book.open(@simple_file)
1680
- workbook = @excel1.generate_workbook(@file_name)
1681
- workbook.should be_a WIN32OLE
1682
- workbook.Name.should == File.basename(@file_name)
1683
- workbook.FullName.should == General::absolute_path(@file_name)
1684
- workbook.Saved.should be_true
1685
- workbook.ReadOnly.should be_false
1686
- workbook.Sheets.Count.should == 3
1687
- workbooks = @excel1.Workbooks
1688
- workbooks.Count.should == 2
1689
- end
1690
-
1691
- it "should raise error if filename is with wrong path" do
1692
- expect{
1693
- workbook = @excel1.generate_workbook(@invalid_name_file)
1694
- }.to raise_error(FileNotFound, /could not save workbook with filename/)
1695
- end
1696
-
1697
- it "should raise error if filename is nil" do
1698
- expect{
1699
- workbook = @excel1.generate_workbook(@nil)
1700
- }.to raise_error(FileNameNotGiven, "filename is nil")
1701
- end
1702
-
1703
- end
1704
- end
1705
-
1706
- describe "nameval, set_nameval" do
1707
-
1708
- before do
1709
- @book1 = Book.open(@dir + '/another_workbook.xls')
1710
- @book1.Windows(@book1.Name).Visible = true
1711
- @excel1 = @book1.excel
1712
- end
1713
-
1714
- after do
1715
- @book1.close(:if_unsaved => :forget)
1716
- end
1717
-
1718
- it "should return value of a defined name" do
1719
- @excel1.nameval("firstcell").should == "foo"
1720
- @excel1["firstcell"].should == "foo"
1721
- end
1722
-
1723
- #it "should evaluate a formula" do
1724
- # @excel1.nameval("named_formula").should == 4
1725
- # @excel1["named_formula"].should == 4
1726
- #end
1727
-
1728
- it "should raise an error if name not defined" do
1729
- expect {
1730
- @excel1.nameval("foo")
1731
- }.to raise_error(NameNotFound, /name "foo"/)
1732
- expect {
1733
- @excel1["foo"]
1734
- }.to raise_error(NameNotFound, /name "foo"/)
1735
- expect {
1736
- excel2 = Excel.create
1737
- excel2.nameval("one")
1738
- }.to raise_error(NameNotFound, /name "one"/)
1739
- expect {
1740
- excel3 = Excel.create(:visible => true)
1741
- excel3["one"]
1742
- }.to raise_error(NameNotFound, /name "one"/)
1743
- end
1744
-
1745
- it "should set a range to a value" do
1746
- @excel1.nameval("firstcell").should == "foo"
1747
- @excel1.set_nameval("firstcell","bar")
1748
- @excel1.nameval("firstcell").should == "bar"
1749
- @excel1["firstcell"] = "foo"
1750
- @excel1.nameval("firstcell").should == "foo"
1751
- end
1752
-
1753
- it "should raise an error if name cannot be evaluated" do
1754
- expect{
1755
- @excel1.set_nameval("foo", 1)
1756
- }.to raise_error(NameNotFound, /name "foo"/)
1757
- expect{
1758
- @excel1["foo"] = 1
1759
- }.to raise_error(NameNotFound, /name "foo"/)
1760
- end
1761
- end
1762
-
1763
- describe "rangeval, set_rangeval" do
1764
-
1765
- before do
1766
- @book1 = Book.open(@dir + '/another_workbook.xls')
1767
- @excel1 = @book1.excel
1768
- end
1769
-
1770
- after do
1771
- @book1.close(:if_unsaved => :forget)
1772
- end
1773
-
1774
- it "should return value of a locally defined name" do
1775
- @excel1.rangeval("firstcell").should == "foo"
1776
- end
1777
-
1778
- it "should return value of a defined name" do
1779
- @excel1.rangeval("new").should == "foo"
1780
- @excel1.rangeval("one").should == 1.0
1781
- @excel1.rangeval("four").should == [[1,2],[3,4]]
1782
- @excel1.rangeval("firstrow").should == [[1,2]]
1783
- end
1784
-
1785
- it "should return default value if name not defined and default value is given" do
1786
- @excel1.rangeval("foo", :default => 2).should == 2
1787
- end
1788
-
1789
- it "should raise an error if name not defined for the sheet" do
1790
- expect {
1791
- @excel1.rangeval("foo")
1792
- }.to raise_error(NameNotFound, /name "foo" not in/)
1793
- expect {
1794
- @excel1.rangeval("named_formula")
1795
- }.to raise_error(NameNotFound, /name "named_formula" not in/)
1796
- expect {
1797
- excel2 = Excel.create
1798
- excel2.rangeval("one")
1799
- }.to raise_error(NameNotFound, /name "one" not in/)
1800
- end
1801
-
1802
- it "should set a range to a value" do
1803
- @excel1.rangeval("firstcell").should == "foo"
1804
- @excel1.set_rangeval("firstcell","bar")
1805
- @excel1.rangeval("firstcell").should == "bar"
1806
- end
1807
-
1808
- it "should raise an error if name cannot be evaluated" do
1809
- expect{
1810
- @excel1.set_nameval("foo", 1)
1811
- }.to raise_error(NameNotFound, /name "foo" not in/)
1812
- end
1813
-
1814
- end
1815
-
1816
- end
1817
- end
1818
-
1819
- class TestError < RuntimeError # :nodoc: #
1820
- end