robust_excel_ole 0.3.1 → 0.3.2
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 +69 -56
- data/README_detail.rdoc +44 -34
- data/TodoList.md +8 -6
- data/examples/edit_sheets/example_access_sheets_and_cells.rb +6 -6
- data/examples/edit_sheets/example_adding_sheets.rb +2 -2
- data/examples/edit_sheets/example_ranges.rb +3 -3
- data/examples/open_save_close/example_control_to_excel.rb +2 -2
- data/examples/open_save_close/example_default_excel.rb +2 -2
- data/examples/open_save_close/example_force_excel.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +4 -4
- data/examples/open_save_close/example_if_obstructed_forget.rb +2 -2
- data/examples/open_save_close/example_if_obstructed_save.rb +2 -2
- data/examples/open_save_close/example_if_unsaved_accept.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget_more.rb +1 -1
- data/examples/open_save_close/example_read_only.rb +2 -2
- data/examples/open_save_close/example_rename_cells.rb +1 -1
- data/examples/open_save_close/example_reuse.rb +3 -3
- data/examples/open_save_close/example_simple.rb +2 -2
- data/examples/open_save_close/example_unobtrusively.rb +1 -1
- data/lib/robust_excel_ole/book.rb +97 -128
- data/lib/robust_excel_ole/book_store.rb +23 -23
- data/lib/robust_excel_ole/excel.rb +12 -14
- data/lib/robust_excel_ole/version.rb +1 -1
- data/spec/book_spec.rb +462 -289
- data/spec/book_store_spec.rb +36 -55
- data/spec/data/book_with_blank.xls +0 -0
- data/spec/data/{different_simple.xls → different_workbook.xls} +0 -0
- data/spec/data/merge_cells.xls +0 -0
- data/spec/data/{more_simple.xls → more_workbook.xls} +0 -0
- data/spec/data/protected_sheet.xls +0 -0
- data/spec/data/{simple.xls → workbook.xls} +0 -0
- data/spec/data/{simple.xlsm → workbook.xlsm} +0 -0
- data/spec/data/{simple.xlsx → workbook.xlsx} +0 -0
- data/spec/excel_spec.rb +40 -0
- metadata +9 -9
data/spec/book_spec.rb
CHANGED
@@ -19,11 +19,11 @@ describe Book do
|
|
19
19
|
|
20
20
|
before do
|
21
21
|
@dir = create_tmpdir
|
22
|
-
@simple_file = @dir + '/
|
23
|
-
@simple_save_file = @dir + '/
|
24
|
-
@different_file = @dir + '/
|
25
|
-
@simple_file_other_path = @dir + '/more_data/
|
26
|
-
@more_simple_file = @dir + '/
|
22
|
+
@simple_file = @dir + '/workbook.xls'
|
23
|
+
@simple_save_file = @dir + '/workbook_save.xls'
|
24
|
+
@different_file = @dir + '/different_workbook.xls'
|
25
|
+
@simple_file_other_path = @dir + '/more_data/workbook.xls'
|
26
|
+
@more_simple_file = @dir + '/more_workbook.xls'
|
27
27
|
end
|
28
28
|
|
29
29
|
after do
|
@@ -34,17 +34,25 @@ describe Book do
|
|
34
34
|
|
35
35
|
describe "create file" do
|
36
36
|
context "with standard" do
|
37
|
-
it "
|
37
|
+
it "open an existing file" do
|
38
38
|
expect {
|
39
39
|
@book = Book.new(@simple_file)
|
40
40
|
}.to_not raise_error
|
41
41
|
@book.should be_a Book
|
42
42
|
@book.close
|
43
43
|
end
|
44
|
+
|
45
|
+
it "create a new file" do
|
46
|
+
File.delete @simple_save_file rescue nil
|
47
|
+
Book.create(@simple_save_file)
|
48
|
+
book = Book.open(@simple_save_file, :if_absent => :raise)
|
49
|
+
book.should be_a Book
|
50
|
+
book.close
|
51
|
+
File.exist?(@simple_save_file).should be_true
|
52
|
+
end
|
44
53
|
end
|
45
54
|
end
|
46
55
|
|
47
|
-
|
48
56
|
describe "open" do
|
49
57
|
|
50
58
|
context "standard use cases" do
|
@@ -116,7 +124,7 @@ describe Book do
|
|
116
124
|
end
|
117
125
|
end
|
118
126
|
|
119
|
-
context "with
|
127
|
+
context "with identity transperence" do
|
120
128
|
|
121
129
|
before do
|
122
130
|
@book = Book.open(@simple_file)
|
@@ -128,19 +136,19 @@ describe Book do
|
|
128
136
|
|
129
137
|
it "should yield identical Book objects for identical Excel books" do
|
130
138
|
book2 = Book.open(@simple_file)
|
131
|
-
book2.should
|
139
|
+
book2.should === @book
|
132
140
|
book2.close
|
133
141
|
end
|
134
142
|
|
135
143
|
it "should yield different Book objects for different Excel books" do
|
136
144
|
book2 = Book.open(@different_file)
|
137
|
-
book2.should_not
|
145
|
+
book2.should_not === @book
|
138
146
|
book2.close
|
139
147
|
end
|
140
148
|
|
141
149
|
it "should yield different Book objects when opened the same file in different Excel instances" do
|
142
150
|
book2 = Book.open(@simple_file, :force_excel => :new)
|
143
|
-
book2.should_not
|
151
|
+
book2.should_not === @book
|
144
152
|
book2.close
|
145
153
|
end
|
146
154
|
|
@@ -148,7 +156,7 @@ describe Book do
|
|
148
156
|
@book.should be_alive
|
149
157
|
@book.close
|
150
158
|
book2 = Book.open(@simple_file)
|
151
|
-
book2.should
|
159
|
+
book2.should === @book
|
152
160
|
book2.should be_alive
|
153
161
|
book2.close
|
154
162
|
end
|
@@ -159,7 +167,7 @@ describe Book do
|
|
159
167
|
Excel.close_all
|
160
168
|
book2 = Book.open(@simple_file)
|
161
169
|
book2.should be_alive
|
162
|
-
book2.should
|
170
|
+
book2.should === @book
|
163
171
|
book2.close
|
164
172
|
end
|
165
173
|
|
@@ -169,7 +177,7 @@ describe Book do
|
|
169
177
|
@book.close
|
170
178
|
@book.should_not be_alive
|
171
179
|
book2 = Book.open(@simple_file, :force_excel => :new)
|
172
|
-
book2.should_not
|
180
|
+
book2.should_not === @book
|
173
181
|
book2.should be_alive
|
174
182
|
book2.excel.should_not == old_excel
|
175
183
|
book2.close
|
@@ -181,7 +189,7 @@ describe Book do
|
|
181
189
|
@book.close
|
182
190
|
@book.should_not be_alive
|
183
191
|
book2 = Book.open(@simple_file, :force_excel => new_excel)
|
184
|
-
book2.should_not
|
192
|
+
book2.should_not === @book
|
185
193
|
book2.should be_alive
|
186
194
|
book2.excel.should == new_excel
|
187
195
|
book2.excel.should_not == old_excel
|
@@ -194,7 +202,7 @@ describe Book do
|
|
194
202
|
@book.close
|
195
203
|
@book.should_not be_alive
|
196
204
|
book2 = Book.open(@simple_file, :force_excel => old_excel)
|
197
|
-
book2.should
|
205
|
+
book2.should === @book
|
198
206
|
book2.should be_alive
|
199
207
|
book2.excel.should == old_excel
|
200
208
|
@book.should be_alive
|
@@ -270,6 +278,14 @@ describe Book do
|
|
270
278
|
end
|
271
279
|
end
|
272
280
|
|
281
|
+
context "with another :force_excel" do
|
282
|
+
it "should do force_excel even if both force_ and default_excel is given" do
|
283
|
+
book2 = Book.open(@simple_file, :force_excel => nil)
|
284
|
+
book2.should be_alive
|
285
|
+
book2.should be_a Book
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
273
289
|
context "with :default_excel" do
|
274
290
|
|
275
291
|
before do
|
@@ -327,9 +343,9 @@ describe Book do
|
|
327
343
|
book2 = Book.open(@simple_file, :default_excel => :reuse)
|
328
344
|
book2.should be_alive
|
329
345
|
book2.should be_a Book
|
330
|
-
|
331
|
-
|
332
|
-
|
346
|
+
book2.excel.should_not == excel
|
347
|
+
book2.excel.should_not == new_excel2
|
348
|
+
book2.excel.should == new_excel
|
333
349
|
@book.should be_alive
|
334
350
|
book2.should == @book
|
335
351
|
book2.close
|
@@ -388,152 +404,6 @@ describe Book do
|
|
388
404
|
book2.excel.should == @book.excel
|
389
405
|
book2.should == @book
|
390
406
|
end
|
391
|
-
|
392
|
-
end
|
393
|
-
|
394
|
-
context "with :if_locked" do
|
395
|
-
|
396
|
-
context "with an writable book first" do
|
397
|
-
|
398
|
-
before do
|
399
|
-
@book = Book.open(@simple_file)
|
400
|
-
end
|
401
|
-
|
402
|
-
after do
|
403
|
-
@book.close
|
404
|
-
end
|
405
|
-
|
406
|
-
it "should use the already open Excel and book" do
|
407
|
-
@book.ReadOnly.should be_false
|
408
|
-
new_book1 = Book.open(@simple_file, :if_locked => :readonly)
|
409
|
-
new_book1.ReadOnly.should be_true
|
410
|
-
new_book1.excel.should_not == @book.excel
|
411
|
-
new_book1.should_not == @book
|
412
|
-
new_book1.close
|
413
|
-
new_book2 = Book.open(@simple_file, :if_locked => :take_writable)
|
414
|
-
new_book2.ReadOnly.should be_false
|
415
|
-
new_book2.excel == @book.excel
|
416
|
-
new_book2.should == @book
|
417
|
-
new_book2.close
|
418
|
-
new_book3 = Book.open(@simple_file)
|
419
|
-
new_book3.ReadOnly.should be_false
|
420
|
-
new_book3.excel == @book.excel
|
421
|
-
new_book3.should == @book
|
422
|
-
new_book3.close
|
423
|
-
end
|
424
|
-
|
425
|
-
it "should open in a new Excel as read_only" do
|
426
|
-
new_book = Book.open(@simple_file, :force_excel => :new, :if_locked => :readonly)
|
427
|
-
@book.ReadOnly.should be_false
|
428
|
-
new_book.ReadOnly.should be_true
|
429
|
-
new_book.excel.should_not == @book.excel
|
430
|
-
new_book.close
|
431
|
-
new_excel = Excel.new(:reuse => false)
|
432
|
-
new_book2 = Book.open(@simple_file, :force_excel => new_excel, :if_locked => :readonly)
|
433
|
-
new_book2.ReadOnly.should be_true
|
434
|
-
new_book2.excel.should_not == @book.excel
|
435
|
-
new_book2.close
|
436
|
-
end
|
437
|
-
|
438
|
-
it "should open in the Excel where the book is writable" do
|
439
|
-
new_book = Book.open(@simple_file, :force_excel => :new, :if_locked => :take_writable)
|
440
|
-
@book.ReadOnly.should be_false
|
441
|
-
new_book.ReadOnly.should be_false
|
442
|
-
new_book.excel.should == @book.excel
|
443
|
-
new_book.should == @book
|
444
|
-
new_book.close
|
445
|
-
new_excel = Excel.new(:reuse => false)
|
446
|
-
new_book2 = Book.open(@simple_file, :force_excel => new_excel, :if_locked => :take_writable)
|
447
|
-
new_book2.ReadOnly.should be_false
|
448
|
-
new_book2.excel.should == @book.excel
|
449
|
-
new_book2.close
|
450
|
-
end
|
451
|
-
|
452
|
-
it "should open in a new Excel as writable" do
|
453
|
-
new_book = Book.open(@simple_file, :force_excel => :new, :if_locked => :force_writability)
|
454
|
-
@book.ReadOnly.should be_false
|
455
|
-
new_book.ReadOnly.should be_false
|
456
|
-
new_book.excel.should_not == @book.excel
|
457
|
-
new_book.close
|
458
|
-
new_excel = Excel.new(:reuse => false)
|
459
|
-
new_book2 = Book.open(@simple_file, :force_excel => new_excel, :if_locked => :force_writability)
|
460
|
-
new_book2.ReadOnly.should be_false
|
461
|
-
new_book2.excel.should_not == @book.excel
|
462
|
-
new_book2.close
|
463
|
-
end
|
464
|
-
|
465
|
-
it "should open in a new Excel as read_only by default" do
|
466
|
-
new_book = Book.open(@simple_file, :force_excel => :new)
|
467
|
-
@book.ReadOnly.should be_false
|
468
|
-
new_book.ReadOnly.should be_true
|
469
|
-
new_book.excel.should_not == @book.excel
|
470
|
-
new_book.close
|
471
|
-
new_excel = Excel.new(:reuse => false)
|
472
|
-
new_book2 = Book.open(@simple_file, :force_excel => new_excel)
|
473
|
-
new_book2.ReadOnly.should be_true
|
474
|
-
new_book2.excel.should_not == @book.excel
|
475
|
-
new_book2.close
|
476
|
-
end
|
477
|
-
end
|
478
|
-
|
479
|
-
context "with read_only book first" do
|
480
|
-
|
481
|
-
before do
|
482
|
-
@book = Book.open(@simple_file, :read_only => true)
|
483
|
-
end
|
484
|
-
|
485
|
-
after do
|
486
|
-
@book.close
|
487
|
-
end
|
488
|
-
|
489
|
-
it "should use the already open Excel and book" do
|
490
|
-
@book.ReadOnly.should be_true
|
491
|
-
new_book1 = Book.open(@simple_file, :if_locked => :readonly)
|
492
|
-
new_book1.ReadOnly.should be_true
|
493
|
-
new_book1.excel.should == @book.excel
|
494
|
-
new_book1.should == @book
|
495
|
-
new_book1.close
|
496
|
-
new_book2 = Book.open(@simple_file, :if_locked => :take_writable)
|
497
|
-
new_book2.ReadOnly.should be_true
|
498
|
-
new_book2.excel.should == @book.excel
|
499
|
-
new_book2.should == @book
|
500
|
-
new_book2.close
|
501
|
-
new_book3 = Book.open(@simple_file)
|
502
|
-
new_book3.ReadOnly.should be_true
|
503
|
-
new_book3.excel.should == @book.excel
|
504
|
-
new_book3.should == @book
|
505
|
-
new_book3.close
|
506
|
-
end
|
507
|
-
|
508
|
-
it "should open in the already open Excel" do
|
509
|
-
new_book = Book.open(@simple_file, :if_locked => :force_writability)
|
510
|
-
@book.ReadOnly.should be_true
|
511
|
-
new_book.ReadOnly.should be_false
|
512
|
-
new_book.excel.should_not == @book.excel
|
513
|
-
new_book.should_not == @book
|
514
|
-
new_book.close
|
515
|
-
end
|
516
|
-
|
517
|
-
it "should open in a new Excel as writable" do
|
518
|
-
@book.ReadOnly.should be_true
|
519
|
-
new_book1 = Book.open(@simple_file, :force_excel => :new, :if_locked => :readonly)
|
520
|
-
new_book1.ReadOnly.should be_false
|
521
|
-
new_book1.excel.should_not == @book.excel
|
522
|
-
new_book1.close
|
523
|
-
new_book2 = Book.open(@simple_file, :force_excel => :new, :if_locked => :take_writable)
|
524
|
-
new_book2.ReadOnly.should be_false
|
525
|
-
new_book2.excel.should_not == @book.excel
|
526
|
-
new_book2.close
|
527
|
-
new_book3 = Book.open(@simple_file, :force_excel => :new, :if_locked => :force_writability)
|
528
|
-
new_book3.ReadOnly.should be_false
|
529
|
-
new_book3.excel.should_not == @book.excel
|
530
|
-
new_book3.close
|
531
|
-
new_book4 = Book.open(@simple_file, :force_excel => :new)
|
532
|
-
new_book4.ReadOnly.should be_false
|
533
|
-
new_book4.excel.should_not == @book.excel
|
534
|
-
new_book4.close
|
535
|
-
end
|
536
|
-
end
|
537
407
|
end
|
538
408
|
|
539
409
|
context "with :if_unsaved" do
|
@@ -612,13 +482,10 @@ describe Book do
|
|
612
482
|
@new_book.close
|
613
483
|
end
|
614
484
|
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
@new_book.filename.should == @book.filename
|
620
|
-
@new_book.excel.should_not == @book.excel
|
621
|
-
@new_book.close
|
485
|
+
it "should raise an error, if :if_unsaved is default" do
|
486
|
+
expect {
|
487
|
+
@new_book = Book.open(@simple_file, :if_unsaved => :raise)
|
488
|
+
}.to raise_error(ExcelErrorOpen, "book is already open but not saved (#{File.basename(@simple_file)})")
|
622
489
|
end
|
623
490
|
|
624
491
|
it "should raise an error, if :if_unsaved is invalid option" do
|
@@ -696,14 +563,11 @@ describe Book do
|
|
696
563
|
@new_book.excel.should_not == @book.excel
|
697
564
|
end
|
698
565
|
|
699
|
-
it "should
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
@new_book.excel.should_not == @book.excel
|
705
|
-
end
|
706
|
-
|
566
|
+
it "should raise an error, if :if_obstructed is default" do
|
567
|
+
expect {
|
568
|
+
@new_book = Book.open(@simple_file)
|
569
|
+
}.to raise_error(ExcelErrorOpen, "blocked by a book with the same name in a different path")
|
570
|
+
end
|
707
571
|
|
708
572
|
it "should raise an error, if :if_obstructed is invalid option" do
|
709
573
|
expect {
|
@@ -746,17 +610,35 @@ describe Book do
|
|
746
610
|
end
|
747
611
|
end
|
748
612
|
|
749
|
-
|
750
613
|
context "with non-existing file" do
|
614
|
+
|
751
615
|
it "should raise an exception" do
|
752
616
|
File.delete @simple_save_file rescue nil
|
753
617
|
expect {
|
754
|
-
Book.open(@simple_save_file)
|
618
|
+
Book.open(@simple_save_file, :if_absent => :raise)
|
755
619
|
}.to raise_error(ExcelErrorOpen, "file #{@simple_save_file} not found")
|
756
620
|
end
|
621
|
+
|
622
|
+
it "should create a workbook" do
|
623
|
+
File.delete @simple_save_file rescue nil
|
624
|
+
book = Book.open(@simple_save_file, :if_absent => :create)
|
625
|
+
book.should be_a Book
|
626
|
+
book.close
|
627
|
+
File.exist?(@simple_save_file).should be_true
|
628
|
+
end
|
629
|
+
|
630
|
+
it "should create a workbook by default" do
|
631
|
+
File.delete @simple_save_file rescue nil
|
632
|
+
book = Book.open(@simple_save_file, :if_absent => :create)
|
633
|
+
book.should be_a Book
|
634
|
+
book.close
|
635
|
+
File.exist?(@simple_save_file).should be_true
|
636
|
+
end
|
637
|
+
|
757
638
|
end
|
758
639
|
|
759
640
|
context "with attr_reader excel" do
|
641
|
+
|
760
642
|
before do
|
761
643
|
@new_book = Book.open(@simple_file)
|
762
644
|
end
|
@@ -772,7 +654,7 @@ describe Book do
|
|
772
654
|
|
773
655
|
context "with :read_only" do
|
774
656
|
|
775
|
-
it "should reopen the book with writable (unsaved changes from readonly
|
657
|
+
it "should reopen the book with writable (unsaved changes from readonly will not be saved)" do
|
776
658
|
book = Book.open(@simple_file, :read_only => true)
|
777
659
|
book.ReadOnly.should be_true
|
778
660
|
book.should be_alive
|
@@ -790,7 +672,7 @@ describe Book do
|
|
790
672
|
new_cell_value.should == old_cell_value
|
791
673
|
end
|
792
674
|
|
793
|
-
it "should reopen the book
|
675
|
+
it "should not raise an error when trying to reopen the book as read_only while the writable book had unsaved changes" do
|
794
676
|
book = Book.open(@simple_file, :read_only => false)
|
795
677
|
book.ReadOnly.should be_false
|
796
678
|
book.should be_alive
|
@@ -799,24 +681,20 @@ describe Book do
|
|
799
681
|
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
800
682
|
book.Saved.should be_false
|
801
683
|
new_book = Book.open(@simple_file, :read_only => true, :if_unsaved => :accept)
|
802
|
-
new_book.ReadOnly.should
|
803
|
-
new_book.should
|
804
|
-
|
805
|
-
new_book.should == book
|
806
|
-
new_sheet = new_book[0]
|
807
|
-
new_cell_value = new_sheet[0,0].value
|
808
|
-
new_cell_value.should_not == old_cell_value
|
684
|
+
new_book.ReadOnly.should be_false
|
685
|
+
new_book.Saved.should be_false
|
686
|
+
new_book.should == book
|
809
687
|
end
|
810
688
|
|
811
|
-
it "should reopen the book with writable (unsaved changes from readonly
|
812
|
-
book = Book.open(@simple_file, :
|
689
|
+
it "should reopen the book with writable in the same Excel instance (unsaved changes from readonly will not be saved)" do
|
690
|
+
book = Book.open(@simple_file, :read_only => true)
|
813
691
|
book.ReadOnly.should be_true
|
814
692
|
book.should be_alive
|
815
693
|
sheet = book[0]
|
816
694
|
old_cell_value = sheet[0,0].value
|
817
695
|
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
818
696
|
book.Saved.should be_false
|
819
|
-
new_book = Book.open(@simple_file, :force_excel => book.excel, :read_only => false
|
697
|
+
new_book = Book.open(@simple_file, :if_unsaved => :accept, :force_excel => book.excel, :read_only => false)
|
820
698
|
new_book.ReadOnly.should be_false
|
821
699
|
new_book.should be_alive
|
822
700
|
book.should be_alive
|
@@ -835,16 +713,11 @@ describe Book do
|
|
835
713
|
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
836
714
|
book.Saved.should be_false
|
837
715
|
new_book = Book.open(@simple_file, :force_excel => book.excel, :read_only => true, :if_unsaved => :accept)
|
838
|
-
new_book.ReadOnly.should
|
839
|
-
new_book.should
|
840
|
-
|
841
|
-
new_book.should == book
|
842
|
-
new_sheet = new_book[0]
|
843
|
-
new_cell_value = new_sheet[0,0].value
|
844
|
-
new_cell_value.should_not == old_cell_value
|
716
|
+
new_book.ReadOnly.should be_false
|
717
|
+
new_book.Saved.should be_false
|
718
|
+
new_book.should == book
|
845
719
|
end
|
846
720
|
|
847
|
-
|
848
721
|
it "should open the second book in another Excel as writable" do
|
849
722
|
book = Book.open(@simple_file, :read_only => true)
|
850
723
|
book.ReadOnly.should be_true
|
@@ -895,7 +768,7 @@ describe Book do
|
|
895
768
|
path = '~/Abrakadabra.xlsx'
|
896
769
|
expected_path = Regexp.new(File.expand_path(path).gsub(/\//, "."))
|
897
770
|
expect {
|
898
|
-
Book.open(path)
|
771
|
+
Book.open(path, :if_absent => :raise)
|
899
772
|
}.to raise_error(ExcelErrorOpen, "file #{path} not found")
|
900
773
|
end
|
901
774
|
end
|
@@ -922,6 +795,28 @@ describe Book do
|
|
922
795
|
end
|
923
796
|
end
|
924
797
|
|
798
|
+
describe "hidden_excel" do
|
799
|
+
|
800
|
+
context "with some open book" do
|
801
|
+
|
802
|
+
before do
|
803
|
+
@book = Book.open(@simple_file)
|
804
|
+
end
|
805
|
+
|
806
|
+
after do
|
807
|
+
@book.close
|
808
|
+
end
|
809
|
+
|
810
|
+
it "should create and use a hidden Excel instance" do
|
811
|
+
book2 = Book.open(@simple_file, :force_excel => @book.book_store.ensure_hidden_excel)
|
812
|
+
book2.excel.should_not == @book.excel
|
813
|
+
book2.excel.Visible.should be_false
|
814
|
+
book2.excel.DisplayAlerts.should be_false
|
815
|
+
book2.close
|
816
|
+
end
|
817
|
+
end
|
818
|
+
end
|
819
|
+
|
925
820
|
describe "unobtrusively" do
|
926
821
|
|
927
822
|
def unobtrusively_ok? # :nodoc: #
|
@@ -943,13 +838,24 @@ describe Book do
|
|
943
838
|
it "should open unobtrusively in the first opened Excel" do
|
944
839
|
excel = Excel.new(:reuse => false)
|
945
840
|
new_excel = Excel.new(:reuse => false)
|
946
|
-
Book.unobtrusively(@simple_file) do |book|
|
841
|
+
Book.unobtrusively(@simple_file, :if_closed => :reuse) do |book|
|
947
842
|
book.should be_a Book
|
948
843
|
book.should be_alive
|
949
844
|
book.excel.should == excel
|
950
845
|
book.excel.should_not == new_excel
|
951
846
|
end
|
952
847
|
end
|
848
|
+
|
849
|
+
it "should open unobtrusively in a new Excel" do
|
850
|
+
excel = Excel.new(:reuse => false)
|
851
|
+
new_excel = Excel.new(:reuse => false)
|
852
|
+
Book.unobtrusively(@simple_file, :if_closed => :hidden) do |book|
|
853
|
+
book.should be_a Book
|
854
|
+
book.should be_alive
|
855
|
+
book.excel.should_not == excel
|
856
|
+
book.excel.should_not == new_excel
|
857
|
+
end
|
858
|
+
end
|
953
859
|
end
|
954
860
|
|
955
861
|
context "with an open book" do
|
@@ -1030,13 +936,16 @@ describe Book do
|
|
1030
936
|
end
|
1031
937
|
|
1032
938
|
# The bold reanimation of the @book
|
1033
|
-
it "should keep open the book" do
|
939
|
+
it "should use the excel of the book and keep open the book" do
|
940
|
+
excel = Excel.new(:reuse => false)
|
1034
941
|
sheet = @book[0]
|
1035
942
|
old_cell_value = sheet[0,0].value
|
1036
943
|
@book.close
|
1037
944
|
@book.should_not be_alive
|
1038
|
-
Book.unobtrusively(@simple_file, :keep_open => true) do |book|
|
945
|
+
Book.unobtrusively(@simple_file, :if_closed => :reuse, :keep_open => true) do |book|
|
1039
946
|
book.should be_a Book
|
947
|
+
book.excel.should == @book.excel
|
948
|
+
book.excel.should_not == excel
|
1040
949
|
sheet = book[0]
|
1041
950
|
cell = sheet[0,0]
|
1042
951
|
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
@@ -1048,8 +957,77 @@ describe Book do
|
|
1048
957
|
sheet = new_book[0]
|
1049
958
|
sheet[0,0].value.should_not == old_cell_value
|
1050
959
|
end
|
960
|
+
|
961
|
+
# book shall be reanimated even with if_closed => hidden
|
962
|
+
it "should use the excel of the book and keep open the book" do
|
963
|
+
excel = Excel.new(:reuse => false)
|
964
|
+
sheet = @book[0]
|
965
|
+
old_cell_value = sheet[0,0].value
|
966
|
+
@book.close
|
967
|
+
@book.should_not be_alive
|
968
|
+
Book.unobtrusively(@simple_file) do |book|
|
969
|
+
book.should be_a Book
|
970
|
+
book.should be_alive
|
971
|
+
book.excel.should_not == @book.excel
|
972
|
+
book.excel.should_not == excel
|
973
|
+
sheet = book[0]
|
974
|
+
cell = sheet[0,0]
|
975
|
+
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
976
|
+
book.Saved.should be_false
|
977
|
+
end
|
978
|
+
@book.should_not be_alive
|
979
|
+
new_book = Book.open(@simple_file)
|
980
|
+
sheet = new_book[0]
|
981
|
+
sheet[0,0].value.should_not == old_cell_value
|
982
|
+
end
|
983
|
+
|
984
|
+
it "should use another excel if the Excels are closed" do
|
985
|
+
excel = Excel.new(:reuse => false)
|
986
|
+
sheet = @book[0]
|
987
|
+
old_cell_value = sheet[0,0].value
|
988
|
+
@book.close
|
989
|
+
@book.should_not be_alive
|
990
|
+
Excel.close_all
|
991
|
+
Book.unobtrusively(@simple_file, :keep_open => true, :if_closed => :reuse) do |book|
|
992
|
+
book.should be_a Book
|
993
|
+
book.excel.should == @book.excel
|
994
|
+
book.excel.should_not == excel
|
995
|
+
sheet = book[0]
|
996
|
+
cell = sheet[0,0]
|
997
|
+
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
998
|
+
book.Saved.should be_false
|
999
|
+
end
|
1000
|
+
@book.should be_alive
|
1001
|
+
@book.close
|
1002
|
+
new_book = Book.open(@simple_file)
|
1003
|
+
sheet = new_book[0]
|
1004
|
+
sheet[0,0].value.should_not == old_cell_value
|
1005
|
+
end
|
1006
|
+
|
1007
|
+
it "should use another excel if the Excels are closed" do
|
1008
|
+
excel = Excel.new(:reuse => false)
|
1009
|
+
sheet = @book[0]
|
1010
|
+
old_cell_value = sheet[0,0].value
|
1011
|
+
@book.close
|
1012
|
+
@book.should_not be_alive
|
1013
|
+
Excel.close_all
|
1014
|
+
Book.unobtrusively(@simple_file, :keep_open => true) do |book|
|
1015
|
+
book.should be_a Book
|
1016
|
+
book.excel.should_not == @book.excel
|
1017
|
+
book.excel.should_not == excel
|
1018
|
+
sheet = book[0]
|
1019
|
+
cell = sheet[0,0]
|
1020
|
+
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1021
|
+
book.Saved.should be_false
|
1022
|
+
end
|
1023
|
+
@book.should_not be_alive
|
1024
|
+
new_book = Book.open(@simple_file)
|
1025
|
+
sheet = new_book[0]
|
1026
|
+
sheet[0,0].value.should_not == old_cell_value
|
1027
|
+
end
|
1051
1028
|
end
|
1052
1029
|
|
1030
|
+
|
1053
1031
|
context "with a read_only book" do
|
1054
1032
|
|
1055
1033
|
before do
|
@@ -1093,7 +1071,32 @@ describe Book do
|
|
1093
1071
|
sheet2[0,0].value.should == cell_value
|
1094
1072
|
end
|
1095
1073
|
|
1096
|
-
it "should
|
1074
|
+
it "should open unobtrusively by default the writable book" do
|
1075
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => false)
|
1076
|
+
@book.ReadOnly.should be_true
|
1077
|
+
book2.Readonly.should be_false
|
1078
|
+
sheet = @book[0]
|
1079
|
+
cell_value = sheet[0,0].value
|
1080
|
+
Book.unobtrusively(@simple_file) do |book|
|
1081
|
+
book.should be_a Book
|
1082
|
+
book.excel.should == book2.excel
|
1083
|
+
book.excel.should_not == @book.excel
|
1084
|
+
sheet = book[0]
|
1085
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
1086
|
+
book.should be_alive
|
1087
|
+
book.Saved.should be_false
|
1088
|
+
end
|
1089
|
+
@book.Saved.should be_true
|
1090
|
+
@book.ReadOnly.should be_true
|
1091
|
+
@book.close
|
1092
|
+
book2.close
|
1093
|
+
book3 = Book.open(@simple_file)
|
1094
|
+
new_sheet = book3[0]
|
1095
|
+
new_sheet[0,0].value.should_not == cell_value
|
1096
|
+
book3.close
|
1097
|
+
end
|
1098
|
+
|
1099
|
+
it "should open unobtrusively by default the book in a new Excel such that the book is writable" do
|
1097
1100
|
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
1098
1101
|
@book.ReadOnly.should be_true
|
1099
1102
|
book2.Readonly.should be_true
|
@@ -1101,6 +1104,63 @@ describe Book do
|
|
1101
1104
|
cell_value = sheet[0,0].value
|
1102
1105
|
Book.unobtrusively(@simple_file) do |book|
|
1103
1106
|
book.should be_a Book
|
1107
|
+
book.excel.should_not == book2.excel
|
1108
|
+
book.excel.should_not == @book.excel
|
1109
|
+
sheet = book[0]
|
1110
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
1111
|
+
book.should be_alive
|
1112
|
+
book.Saved.should be_false
|
1113
|
+
end
|
1114
|
+
@book.Saved.should be_true
|
1115
|
+
@book.ReadOnly.should be_true
|
1116
|
+
@book.close
|
1117
|
+
book2.close
|
1118
|
+
book3 = Book.open(@simple_file)
|
1119
|
+
new_sheet = book3[0]
|
1120
|
+
new_sheet[0,0].value.should_not == cell_value
|
1121
|
+
book3.close
|
1122
|
+
end
|
1123
|
+
|
1124
|
+
it "should open unobtrusively the book in a new Excel such that the book is writable" do
|
1125
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
1126
|
+
@book.ReadOnly.should be_true
|
1127
|
+
book2.Readonly.should be_true
|
1128
|
+
sheet = @book[0]
|
1129
|
+
cell_value = sheet[0,0].value
|
1130
|
+
Book.unobtrusively(@simple_file, :use_this => false) do |book|
|
1131
|
+
book.should be_a Book
|
1132
|
+
book.excel.should_not == book2.excel
|
1133
|
+
book.excel.should_not == @book.excel
|
1134
|
+
sheet = book[0]
|
1135
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
1136
|
+
book.should be_alive
|
1137
|
+
book.Saved.should be_false
|
1138
|
+
end
|
1139
|
+
@book.Saved.should be_true
|
1140
|
+
@book.ReadOnly.should be_true
|
1141
|
+
@book.close
|
1142
|
+
book2.close
|
1143
|
+
book3 = Book.open(@simple_file)
|
1144
|
+
new_sheet = book3[0]
|
1145
|
+
new_sheet[0,0].value.should_not == cell_value
|
1146
|
+
book3.close
|
1147
|
+
end
|
1148
|
+
|
1149
|
+
it "should open unobtrusively the book in a new Excel to open the book writable" do
|
1150
|
+
excel1 = Excel.new(:reuse => false)
|
1151
|
+
excel2 = Excel.new(:reuse => false)
|
1152
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
1153
|
+
@book.ReadOnly.should be_true
|
1154
|
+
book2.Readonly.should be_true
|
1155
|
+
sheet = @book[0]
|
1156
|
+
cell_value = sheet[0,0].value
|
1157
|
+
Book.unobtrusively(@simple_file, :use_readonly_excel => false) do |book|
|
1158
|
+
book.should be_a Book
|
1159
|
+
book.ReadOnly.should be_false
|
1160
|
+
book.excel.should_not == book2.excel
|
1161
|
+
book.excel.should_not == @book.excel
|
1162
|
+
book.excel.should_not == excel1
|
1163
|
+
book.excel.should_not == excel2
|
1104
1164
|
sheet = book[0]
|
1105
1165
|
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
1106
1166
|
book.should be_alive
|
@@ -1115,6 +1175,53 @@ describe Book do
|
|
1115
1175
|
new_sheet[0,0].value.should_not == cell_value
|
1116
1176
|
book3.close
|
1117
1177
|
end
|
1178
|
+
|
1179
|
+
it "should open unobtrusively the book in the same Excel to open the book writable" do
|
1180
|
+
excel1 = Excel.new(:reuse => false)
|
1181
|
+
excel2 = Excel.new(:reuse => false)
|
1182
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
1183
|
+
@book.ReadOnly.should be_true
|
1184
|
+
book2.Readonly.should be_true
|
1185
|
+
sheet = @book[0]
|
1186
|
+
cell_value = sheet[0,0].value
|
1187
|
+
Book.unobtrusively(@simple_file, :use_readonly_excel => true) do |book|
|
1188
|
+
book.should be_a Book
|
1189
|
+
book.excel.should == book2.excel
|
1190
|
+
book.ReadOnly.should be_false
|
1191
|
+
sheet = book[0]
|
1192
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
|
1193
|
+
book.should be_alive
|
1194
|
+
book.Saved.should be_false
|
1195
|
+
end
|
1196
|
+
book2.Saved.should be_true
|
1197
|
+
book2.ReadOnly.should be_false
|
1198
|
+
@book.close
|
1199
|
+
book2.close
|
1200
|
+
book3 = Book.open(@simple_file)
|
1201
|
+
new_sheet = book3[0]
|
1202
|
+
new_sheet[0,0].value.should_not == cell_value
|
1203
|
+
book3.close
|
1204
|
+
end
|
1205
|
+
|
1206
|
+
it "should open unobtrusively the book in the Excel where it was opened most recently" do
|
1207
|
+
book2 = Book.open(@simple_file, :force_excel => :new, :read_only => true)
|
1208
|
+
@book.ReadOnly.should be_true
|
1209
|
+
book2.Readonly.should be_true
|
1210
|
+
sheet = @book[0]
|
1211
|
+
cell_value = sheet[0,0].value
|
1212
|
+
Book.unobtrusively(@simple_file, :read_only => true) do |book|
|
1213
|
+
book.should be_a Book
|
1214
|
+
book.excel.should == book2.excel
|
1215
|
+
book.excel.should_not == @book.excel
|
1216
|
+
book.should be_alive
|
1217
|
+
book.Saved.should be_true
|
1218
|
+
end
|
1219
|
+
@book.Saved.should be_true
|
1220
|
+
@book.ReadOnly.should be_true
|
1221
|
+
@book.close
|
1222
|
+
book2.close
|
1223
|
+
end
|
1224
|
+
|
1118
1225
|
end
|
1119
1226
|
|
1120
1227
|
context "with a virgin Book class" do
|
@@ -1162,6 +1269,7 @@ describe Book do
|
|
1162
1269
|
book.Saved.should be_false
|
1163
1270
|
sleep 1
|
1164
1271
|
end
|
1272
|
+
@book1.Saved.should be_true
|
1165
1273
|
m_time2 = File.mtime(@book1.stored_filename)
|
1166
1274
|
m_time2.should_not == m_time
|
1167
1275
|
end
|
@@ -1229,83 +1337,76 @@ describe Book do
|
|
1229
1337
|
end
|
1230
1338
|
|
1231
1339
|
context "with visible" do
|
1232
|
-
before do
|
1233
|
-
@book1 = Book.open(@simple_file)
|
1234
|
-
end
|
1235
1340
|
|
1236
1341
|
after do
|
1237
|
-
@book1.close
|
1342
|
+
@book1.close
|
1238
1343
|
end
|
1239
1344
|
|
1240
|
-
it "should
|
1345
|
+
it "should let the book invisible" do
|
1346
|
+
@book1 = Book.open(@simple_file)
|
1347
|
+
@book1.excel.Visible.should be_false
|
1348
|
+
Book.unobtrusively(@simple_file) do |book|
|
1349
|
+
book.excel.Visible.should be_false
|
1350
|
+
end
|
1241
1351
|
@book1.excel.Visible.should be_false
|
1242
1352
|
Book.unobtrusively(@simple_file, :visible => false) do |book|
|
1243
|
-
@book1.excel.Visible.should be_false
|
1244
1353
|
book.excel.Visible.should be_false
|
1245
|
-
sheet = book[0]
|
1246
|
-
cell = sheet[0,0]
|
1247
|
-
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1248
|
-
sheet = book[0]
|
1249
1354
|
end
|
1250
1355
|
@book1.excel.Visible.should be_false
|
1251
1356
|
end
|
1252
1357
|
|
1253
|
-
it "should
|
1358
|
+
it "should let the book visible" do
|
1359
|
+
@book1 = Book.open(@simple_file, :visible => true)
|
1360
|
+
@book1.excel.Visible.should be_true
|
1361
|
+
Book.unobtrusively(@simple_file) do |book|
|
1362
|
+
book.excel.Visible.should be_true
|
1363
|
+
end
|
1364
|
+
@book1.excel.Visible.should be_true
|
1365
|
+
Book.unobtrusively(@simple_file, :visible => true) do |book|
|
1366
|
+
book.excel.Visible.should be_true
|
1367
|
+
end
|
1368
|
+
@book1.excel.Visible.should be_true
|
1369
|
+
end
|
1370
|
+
|
1371
|
+
it "should open the book unobtrusively visible" do
|
1372
|
+
@book1 = Book.open(@simple_file)
|
1254
1373
|
@book1.excel.Visible.should be_false
|
1255
1374
|
Book.unobtrusively(@simple_file, :visible => true) do |book|
|
1256
|
-
@book1.excel.Visible.should be_true
|
1257
1375
|
book.excel.Visible.should be_true
|
1258
|
-
sheet = book[0]
|
1259
|
-
cell = sheet[0,0]
|
1260
|
-
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1261
|
-
sheet = book[0]
|
1262
1376
|
end
|
1263
1377
|
@book1.excel.Visible.should be_false
|
1264
1378
|
end
|
1265
1379
|
|
1266
|
-
it "should
|
1267
|
-
@book1.
|
1268
|
-
|
1269
|
-
|
1380
|
+
it "should open the book unobtrusively invisible" do
|
1381
|
+
@book1 = Book.open(@simple_file, :visible => true)
|
1382
|
+
@book1.excel.Visible.should be_true
|
1383
|
+
Book.unobtrusively(@simple_file, :visible => false) do |book|
|
1270
1384
|
book.excel.Visible.should be_false
|
1271
|
-
sheet = book[0]
|
1272
|
-
cell = sheet[0,0]
|
1273
|
-
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
1274
|
-
sheet = book[0]
|
1275
1385
|
end
|
1276
|
-
@book1.excel.Visible.should
|
1386
|
+
@book1.excel.Visible.should be_true
|
1277
1387
|
end
|
1388
|
+
|
1278
1389
|
end
|
1279
1390
|
|
1280
1391
|
context "with several Excel instances" do
|
1281
1392
|
|
1282
|
-
|
1283
|
-
book1 = Book.open(@simple_file)
|
1284
|
-
book2 = Book.open(@simple_file, :force_excel => :new)
|
1285
|
-
book1.Readonly.should == false
|
1286
|
-
book2.Readonly.should == true
|
1287
|
-
book1
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
end
|
1393
|
+
before do
|
1394
|
+
@book1 = Book.open(@simple_file)
|
1395
|
+
@book2 = Book.open(@simple_file, :force_excel => :new)
|
1396
|
+
@book1.Readonly.should == false
|
1397
|
+
@book2.Readonly.should == true
|
1398
|
+
old_sheet = @book1[0]
|
1399
|
+
@old_cell_value = old_sheet[0,0].value
|
1400
|
+
@book1.close
|
1401
|
+
@book2.close
|
1402
|
+
@book1.should_not be_alive
|
1403
|
+
@book2.should_not be_alive
|
1294
1404
|
end
|
1295
1405
|
|
1296
|
-
it "should open unobtrusively the closed book in the most recent Excel where it was open before" do
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
-
old_sheet = book1[0]
|
1301
|
-
old_cell_value = old_sheet[0,0].value
|
1302
|
-
book1.close
|
1303
|
-
book2.close
|
1304
|
-
book1.should_not be_alive
|
1305
|
-
book2.should_not be_alive
|
1306
|
-
Book.unobtrusively(@simple_file) do |book|
|
1307
|
-
book.excel.should == book2.excel
|
1308
|
-
book.excel.should_not == book1.excel
|
1406
|
+
it "should open unobtrusively the closed book in the most recent Excel where it was open before" do
|
1407
|
+
Book.unobtrusively(@simple_file, :if_closed => :reuse) do |book|
|
1408
|
+
book.excel.should == @book2.excel
|
1409
|
+
book.excel.should_not == @book1.excel
|
1309
1410
|
book.ReadOnly.should == false
|
1310
1411
|
sheet = book[0]
|
1311
1412
|
cell = sheet[0,0]
|
@@ -1314,24 +1415,14 @@ describe Book do
|
|
1314
1415
|
end
|
1315
1416
|
new_book = Book.open(@simple_file)
|
1316
1417
|
sheet = new_book[0]
|
1317
|
-
sheet[0,0].value.should_not == old_cell_value
|
1418
|
+
sheet[0,0].value.should_not == @old_cell_value
|
1318
1419
|
end
|
1319
1420
|
|
1320
|
-
it "should open unobtrusively the closed book in
|
1321
|
-
book1 = Book.open(@simple_file)
|
1322
|
-
book2 = Book.open(@simple_file, :force_excel => :new)
|
1323
|
-
book2.Readonly.should == true
|
1324
|
-
old_sheet = book1[0]
|
1325
|
-
old_cell_value = old_sheet[0,0].value
|
1326
|
-
book1.close
|
1327
|
-
book2.close
|
1328
|
-
book1.should_not be_alive
|
1329
|
-
book2.should_not be_alive
|
1330
|
-
Excel.close_all
|
1421
|
+
it "should open unobtrusively the closed book in the new hidden Excel" do
|
1331
1422
|
Book.unobtrusively(@simple_file) do |book|
|
1423
|
+
book.excel.should_not == @book2.excel
|
1424
|
+
book.excel.should_not == @book1.excel
|
1332
1425
|
book.ReadOnly.should == false
|
1333
|
-
#book.excel.should_not == book1.excel
|
1334
|
-
#book.excel.should_not == book2.excel
|
1335
1426
|
sheet = book[0]
|
1336
1427
|
cell = sheet[0,0]
|
1337
1428
|
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
@@ -1339,22 +1430,15 @@ describe Book do
|
|
1339
1430
|
end
|
1340
1431
|
new_book = Book.open(@simple_file)
|
1341
1432
|
sheet = new_book[0]
|
1342
|
-
sheet[0,0].value.should_not == old_cell_value
|
1433
|
+
sheet[0,0].value.should_not == @old_cell_value
|
1343
1434
|
end
|
1344
1435
|
|
1345
|
-
it "should open unobtrusively the
|
1346
|
-
book1 = Book.open(@simple_file)
|
1347
|
-
book2 = Book.open(@simple_file, :force_excel => :new)
|
1348
|
-
book2.Readonly.should == true
|
1349
|
-
old_sheet = book1[0]
|
1350
|
-
old_cell_value = old_sheet[0,0].value
|
1351
|
-
book1.should be_alive
|
1352
|
-
book2.should be_alive
|
1436
|
+
it "should open unobtrusively the closed book in a new Excel if the Excel is not alive anymore" do
|
1353
1437
|
Excel.close_all
|
1354
1438
|
Book.unobtrusively(@simple_file) do |book|
|
1355
1439
|
book.ReadOnly.should == false
|
1356
|
-
|
1357
|
-
|
1440
|
+
book.excel.should_not == @book1.excel
|
1441
|
+
book.excel.should_not == @book2.excel
|
1358
1442
|
sheet = book[0]
|
1359
1443
|
cell = sheet[0,0]
|
1360
1444
|
sheet[0,0] = cell.value == "simple" ? "complex" : "simple"
|
@@ -1362,9 +1446,96 @@ describe Book do
|
|
1362
1446
|
end
|
1363
1447
|
new_book = Book.open(@simple_file)
|
1364
1448
|
sheet = new_book[0]
|
1365
|
-
sheet[0,0].value.should_not == old_cell_value
|
1449
|
+
sheet[0,0].value.should_not == @old_cell_value
|
1450
|
+
end
|
1451
|
+
end
|
1452
|
+
|
1453
|
+
context "with :hidden" do
|
1454
|
+
|
1455
|
+
before do
|
1456
|
+
@book1 = Book.open(@simple_file)
|
1457
|
+
@book1.close
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
it "should create a new hidden Excel instance" do
|
1461
|
+
Book.unobtrusively(@simple_file, :if_closed => :hidden) do |book|
|
1462
|
+
book.should be_a Book
|
1463
|
+
book.should be_alive
|
1464
|
+
book.excel.Visible.should be_false
|
1465
|
+
book.excel.DisplayAlerts.should be_false
|
1466
|
+
end
|
1467
|
+
end
|
1468
|
+
|
1469
|
+
it "should create a new hidden Excel instance and use this afterwards" do
|
1470
|
+
hidden_excel = nil
|
1471
|
+
Book.unobtrusively(@simple_file, :if_closed => :hidden) do |book|
|
1472
|
+
book.should be_a Book
|
1473
|
+
book.should be_alive
|
1474
|
+
book.excel.Visible.should be_false
|
1475
|
+
book.excel.DisplayAlerts.should be_false
|
1476
|
+
hidden_excel = book.excel
|
1477
|
+
end
|
1478
|
+
Book.unobtrusively(@different_file, :if_closed => :hidden) do |book|
|
1479
|
+
book.should be_a Book
|
1480
|
+
book.should be_alive
|
1481
|
+
book.excel.Visible.should be_false
|
1482
|
+
book.excel.DisplayAlerts.should be_false
|
1483
|
+
book.excel.should == hidden_excel
|
1484
|
+
end
|
1366
1485
|
end
|
1367
1486
|
|
1487
|
+
it "should create a new hidden Excel instance if the Excel is closed" do
|
1488
|
+
Excel.close_all
|
1489
|
+
Book.unobtrusively(@simple_file, :if_closed => :hidden) do |book|
|
1490
|
+
book.should be_a Book
|
1491
|
+
book.should be_alive
|
1492
|
+
book.excel.Visible.should be_false
|
1493
|
+
book.excel.DisplayAlerts.should be_false
|
1494
|
+
book.excel.should_not == @book1.excel
|
1495
|
+
end
|
1496
|
+
end
|
1497
|
+
|
1498
|
+
it "should exclude hidden Excel when reuse in unobtrusively" do
|
1499
|
+
hidden_excel = nil
|
1500
|
+
Book.unobtrusively(@simple_file, :if_closed => :hidden) do |book|
|
1501
|
+
book.should be_a Book
|
1502
|
+
book.should be_alive
|
1503
|
+
book.excel.Visible.should be_false
|
1504
|
+
book.excel.DisplayAlerts.should be_false
|
1505
|
+
book.excel.should_not == @book1.excel
|
1506
|
+
hidden_excel = book.excel
|
1507
|
+
end
|
1508
|
+
Book.unobtrusively(@simple_file, :if_closed => :reuse) do |book|
|
1509
|
+
book.should be_a Book
|
1510
|
+
book.should be_alive
|
1511
|
+
book.excel.Visible.should be_false
|
1512
|
+
book.excel.DisplayAlerts.should be_false
|
1513
|
+
book.excel.should_not == hidden_excel
|
1514
|
+
end
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
it "should exclude hidden Excel when reuse in open" do
|
1518
|
+
hidden_excel = nil
|
1519
|
+
Book.unobtrusively(@simple_file, :if_closed => :hidden) do |book|
|
1520
|
+
book.should be_a Book
|
1521
|
+
book.should be_alive
|
1522
|
+
book.excel.Visible.should be_false
|
1523
|
+
book.excel.DisplayAlerts.should be_false
|
1524
|
+
book.excel.should_not == @book1.excel
|
1525
|
+
hidden_excel = book.excel
|
1526
|
+
end
|
1527
|
+
book2 = Book.open(@simple_file, :default_excel => :reuse)
|
1528
|
+
book2.excel.should_not == hidden_excel
|
1529
|
+
end
|
1530
|
+
|
1531
|
+
it "should exclude hidden Excel when reuse in open" do
|
1532
|
+
book1 = Book.open(@simple_file)
|
1533
|
+
book1.close
|
1534
|
+
book2 = Book.open(@simple_file, :default_excel => :reuse)
|
1535
|
+
book2.excel.should == book1.excel
|
1536
|
+
book1.should be_alive
|
1537
|
+
book2.close
|
1538
|
+
end
|
1368
1539
|
end
|
1369
1540
|
end
|
1370
1541
|
|
@@ -1389,16 +1560,14 @@ describe Book do
|
|
1389
1560
|
it "should raise an error if name not defined" do
|
1390
1561
|
expect {
|
1391
1562
|
value = @book1.nvalue("foo")
|
1392
|
-
}.to raise_error(ExcelErrorNValue, "name foo not in
|
1563
|
+
}.to raise_error(ExcelErrorNValue, "name foo not in more_workbook.xls")
|
1393
1564
|
end
|
1394
1565
|
|
1395
1566
|
it "should raise an error if name was defined but contents is calcuated" do
|
1396
1567
|
expect {
|
1397
1568
|
value = @book1.nvalue("named_formula")
|
1398
|
-
}.to raise_error(ExcelErrorNValue, "range error in
|
1569
|
+
}.to raise_error(ExcelErrorNValue, "range error in more_workbook.xls")
|
1399
1570
|
end
|
1400
|
-
|
1401
|
-
|
1402
1571
|
end
|
1403
1572
|
end
|
1404
1573
|
|
@@ -1453,6 +1622,12 @@ describe Book do
|
|
1453
1622
|
}.to raise_error(ExcelErrorClose, "book is unsaved (#{File.basename(@simple_file)})")
|
1454
1623
|
end
|
1455
1624
|
|
1625
|
+
it "should raise error by default" do
|
1626
|
+
expect{
|
1627
|
+
@book.close(:if_unsaved => :raise)
|
1628
|
+
}.to raise_error(ExcelErrorClose, "book is unsaved (#{File.basename(@simple_file)})")
|
1629
|
+
end
|
1630
|
+
|
1456
1631
|
it "should close the book and leave its file untouched with option :forget" do
|
1457
1632
|
ole_workbook = @book.workbook
|
1458
1633
|
excel = @book.excel
|
@@ -1952,8 +2127,6 @@ describe Book do
|
|
1952
2127
|
}.to raise_error(ExcelErrorSheet, "sheet name already exists")
|
1953
2128
|
end
|
1954
2129
|
end
|
1955
|
-
|
1956
|
-
|
1957
2130
|
end
|
1958
2131
|
|
1959
2132
|
describe 'access sheet' do
|