robust_excel_ole 1.35 → 1.36
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Changelog +20 -2
- data/README.rdoc +31 -95
- data/docs/README_excel.rdoc +5 -6
- data/docs/README_listobjects.rdoc +8 -15
- data/docs/README_open.rdoc +48 -25
- data/docs/README_ranges.rdoc +7 -10
- data/docs/README_save_close.rdoc +4 -5
- data/docs/README_sheet.rdoc +4 -8
- data/examples/introductory_examples/example_introductory.rb +1 -1
- data/examples/introductory_examples/example_open.rb +1 -1
- data/lib/robust_excel_ole/excel.rb +98 -16
- data/lib/robust_excel_ole/general.rb +18 -6
- data/lib/robust_excel_ole/list_object.rb +11 -19
- data/lib/robust_excel_ole/list_row.rb +74 -19
- data/lib/robust_excel_ole/range.rb +6 -1
- data/lib/robust_excel_ole/range_owners.rb +24 -17
- data/lib/robust_excel_ole/version.rb +1 -1
- data/lib/robust_excel_ole/workbook.rb +107 -42
- data/lib/robust_excel_ole/worksheet.rb +1 -1
- data/robust_excel_ole.gemspec +0 -1
- data/spec/bookstore_spec.rb +1 -2
- data/spec/data/more_data/workbook.xls +0 -0
- data/spec/data/workbook_linked3.xlsm +0 -0
- data/spec/data/workbook_listobjects.xlsx +0 -0
- data/spec/data/workbook_unsaved.xlsm +0 -0
- data/spec/excel_spec.rb +4 -4
- data/spec/general_spec.rb +1 -2
- data/spec/list_object_spec.rb +26 -9
- data/spec/list_row_spec.rb +34 -20
- data/spec/range_spec.rb +9 -0
- data/spec/workbook_spec.rb +2 -2
- data/spec/workbook_specs/workbook_misc_spec.rb +249 -2
- data/spec/workbook_specs/workbook_open_spec.rb +307 -16
- data/spec/workbook_specs/workbook_unobtr_spec.rb +196 -42
- metadata +4 -16
@@ -5,6 +5,8 @@ require_relative '../spec_helper'
|
|
5
5
|
|
6
6
|
$VERBOSE = nil
|
7
7
|
|
8
|
+
using ToReoRefinement
|
9
|
+
|
8
10
|
include RobustExcelOle
|
9
11
|
include General
|
10
12
|
|
@@ -30,6 +32,7 @@ describe Workbook do
|
|
30
32
|
@sub_file = @dir + '/workbook_linked_sub.xlsm'
|
31
33
|
@simple_file_xlsm = @dir + '/workbook.xlsm'
|
32
34
|
@simple_file_xlsx = @dir + '/workbook.xlsx'
|
35
|
+
@unsaved_file = @dir + '/workbook_unsaved.xlsm'
|
33
36
|
@simple_file1 = @simple_file
|
34
37
|
end
|
35
38
|
|
@@ -457,6 +460,10 @@ describe Workbook do
|
|
457
460
|
it "should unobtrusively open, modify, and not save the changes" do
|
458
461
|
@book.unobtrusively(:writable => false) do |book|
|
459
462
|
book.sheet(1)[1,1] = "bla"
|
463
|
+
book.ReadOnly.should be false
|
464
|
+
book.visible.should be true
|
465
|
+
book.writable.should be true
|
466
|
+
book.saved.should be false
|
460
467
|
end
|
461
468
|
@book.saved.should be false
|
462
469
|
@book.visible.should be true
|
@@ -482,6 +489,76 @@ describe Workbook do
|
|
482
489
|
|
483
490
|
end
|
484
491
|
|
492
|
+
context "with an writable and from the very beginning on unsaved workbook" do
|
493
|
+
|
494
|
+
before do
|
495
|
+
@ole_e1 = WIN32OLE.new('Excel.Application')
|
496
|
+
ws = @ole_e1.Workbooks
|
497
|
+
@abs_filename = General.absolute_path(@unsaved_file)
|
498
|
+
@ole_wb = ws.Open(@abs_filename)
|
499
|
+
@ole_e1.Visible = true
|
500
|
+
@ole_wb.Windows(@ole_wb.Name).Visible = true
|
501
|
+
@ole_wb.Saved.should be false
|
502
|
+
@old_value = @ole_wb.Worksheets.Item(1).Cells.Item(1,1).Value
|
503
|
+
#@ole_wb.Worksheets.Item(1).Cells.Item(1,1).Value = @old_value = "foo" #== "foo" ? "bar" : "foo"
|
504
|
+
#@new_value = @ole_wb.Worksheets.Item(1).Cells.Item(1,1)
|
505
|
+
@ole_wb.Saved.should be false
|
506
|
+
@book = @ole_wb.to_reo
|
507
|
+
end
|
508
|
+
|
509
|
+
after do
|
510
|
+
@book.close(:if_unsaved => :forget) if @book && @book.alive?
|
511
|
+
end
|
512
|
+
|
513
|
+
it "should unobtrusively open, modify, and retain the status" do
|
514
|
+
@book.unobtrusively do |book|
|
515
|
+
book.saved.should be false
|
516
|
+
book.visible.should be true
|
517
|
+
book.writable.should be true
|
518
|
+
book.sheet(1)[1,1] = book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
519
|
+
end
|
520
|
+
@book.saved.should be false
|
521
|
+
@book.visible.should be true
|
522
|
+
@book.writable.should be true
|
523
|
+
@book.sheet(1)[1,1].should_not == @old_value
|
524
|
+
@book.close(:if_unsaved => :forget)
|
525
|
+
@new_book = Workbook.open(@unsaved_file)
|
526
|
+
@new_book.sheet(1)[1,1].should_not == @old_value
|
527
|
+
end
|
528
|
+
|
529
|
+
it "should unobtrusively open, modify, and not save the changes" do
|
530
|
+
@book.unobtrusively(:writable => false) do |book|
|
531
|
+
book.sheet(1)[1,1] = "bla"
|
532
|
+
book.ReadOnly.should be false
|
533
|
+
book.visible.should be true
|
534
|
+
book.writable.should be true
|
535
|
+
book.saved.should be false
|
536
|
+
end
|
537
|
+
@book.saved.should be false
|
538
|
+
@book.visible.should be true
|
539
|
+
@book.writable.should be true
|
540
|
+
@book.sheet(1)[1,1].should == "bla"
|
541
|
+
@book.close(:if_unsaved => :forget)
|
542
|
+
new_book = Workbook.open(@unsaved_file)
|
543
|
+
new_book.sheet(1)[1,1].should == @old_value
|
544
|
+
end
|
545
|
+
|
546
|
+
it "should unobtrusively open, modify, and save the changes" do
|
547
|
+
@book.unobtrusively(:writable => true) do |book|
|
548
|
+
book.sheet(1)[1,1] = book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
549
|
+
end
|
550
|
+
@book.saved.should be false
|
551
|
+
@book.visible.should be true
|
552
|
+
@book.writable.should be true
|
553
|
+
@book.sheet(1)[1,1].should_not == @old_value
|
554
|
+
@book.close(:if_unsaved => :forget)
|
555
|
+
new_book = Workbook.open(@unsaved_file)
|
556
|
+
new_book.sheet(1)[1,1].should_not == @old_value
|
557
|
+
end
|
558
|
+
|
559
|
+
end
|
560
|
+
|
561
|
+
|
485
562
|
context "with a closed workbook" do
|
486
563
|
|
487
564
|
before do
|
@@ -732,6 +809,18 @@ describe Workbook do
|
|
732
809
|
@ole_wb.Saved.should be false
|
733
810
|
end
|
734
811
|
|
812
|
+
it "should keep the read-only status" do
|
813
|
+
Workbook.unobtrusively(@simple_file1, :writable => false) do |book|
|
814
|
+
book.saved.should be false
|
815
|
+
book.visible.should be true
|
816
|
+
book.writable.should be true
|
817
|
+
end
|
818
|
+
ole_wb = WIN32OLE.connect(@abs_filename)
|
819
|
+
ole_wb.Saved.should be false
|
820
|
+
@ole_e1.Visible.should be true
|
821
|
+
ole_wb.ReadOnly.should be false
|
822
|
+
end
|
823
|
+
|
735
824
|
it "should connect and remain unsaved" do
|
736
825
|
Workbook.unobtrusively(@simple_file1) do |book|
|
737
826
|
book.saved.should be false
|
@@ -807,6 +896,111 @@ describe Workbook do
|
|
807
896
|
|
808
897
|
end
|
809
898
|
|
899
|
+
context "with one from beginning on unsaved writable workbook" do
|
900
|
+
|
901
|
+
before do
|
902
|
+
@ole_e1 = WIN32OLE.new('Excel.Application')
|
903
|
+
ws = @ole_e1.Workbooks
|
904
|
+
@abs_filename = General.absolute_path(@unsaved_file)
|
905
|
+
@ole_wb = ws.Open(@abs_filename)
|
906
|
+
@ole_e1.Visible = true
|
907
|
+
@ole_wb.Windows(@ole_wb.Name).Visible = true
|
908
|
+
@ole_wb.Saved.should be false
|
909
|
+
@old_value = @ole_wb.Worksheets.Item(1).Cells.Item(1,1)
|
910
|
+
@ole_wb.Worksheets.Item(1).Cells.Item(1,1).Value = @old_value = "foo" #== "foo" ? "bar" : "foo"
|
911
|
+
@new_value = @ole_wb.Worksheets.Item(1).Cells.Item(1,1)
|
912
|
+
@ole_wb.Saved.should be false
|
913
|
+
end
|
914
|
+
|
915
|
+
it "should keep the read-only status" do
|
916
|
+
Workbook.unobtrusively(@unsaved_file, :writable => false) do |book|
|
917
|
+
book.saved.should be false
|
918
|
+
book.visible.should be true
|
919
|
+
book.writable.should be true
|
920
|
+
end
|
921
|
+
ole_wb = WIN32OLE.connect(@abs_filename)
|
922
|
+
ole_wb.Saved.should be false
|
923
|
+
@ole_e1.Visible.should be true
|
924
|
+
ole_wb.ReadOnly.should be false
|
925
|
+
end
|
926
|
+
|
927
|
+
it "should connect and remain unsaved" do
|
928
|
+
Workbook.unobtrusively(@unsaved_file) do |book|
|
929
|
+
book.saved.should be false
|
930
|
+
book.visible.should be true
|
931
|
+
book.writable.should be true
|
932
|
+
end
|
933
|
+
ole_wb = WIN32OLE.connect(@abs_filename)
|
934
|
+
ole_wb.Saved.should be false
|
935
|
+
@ole_e1.Visible.should be true
|
936
|
+
ole_wb.ReadOnly.should be false
|
937
|
+
end
|
938
|
+
|
939
|
+
it "should raise error" do
|
940
|
+
expect{
|
941
|
+
Workbook.unobtrusively(@unsaved_file, :read_only => true) do |book|
|
942
|
+
book.saved.should be false
|
943
|
+
book.visible.should be true
|
944
|
+
book.writable.should be false
|
945
|
+
end
|
946
|
+
}.to raise_error(WorkbookNotSaved)
|
947
|
+
end
|
948
|
+
|
949
|
+
=begin
|
950
|
+
it "should remain writable" do
|
951
|
+
Workbook.unobtrusively(@unsaved_file, :read_only => true, :if_unsaved => :save) do |book|
|
952
|
+
book.saved.should be true
|
953
|
+
book.visible.should be true
|
954
|
+
book.writable.should be false
|
955
|
+
end
|
956
|
+
ole_wb = WIN32OLE.connect(@abs_filename)
|
957
|
+
ole_wb.Saved.should be false
|
958
|
+
@ole_e1.Visible.should be true
|
959
|
+
ole_wb.ReadOnly.should be false
|
960
|
+
end
|
961
|
+
=end
|
962
|
+
|
963
|
+
it "should remain unsaved when modifying" do
|
964
|
+
Workbook.unobtrusively(@unsaved_file) do |book|
|
965
|
+
book.sheet(1)[1,1] = "bar" #book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
966
|
+
@new_value = book.sheet(1)[1,1]
|
967
|
+
book.saved.should be false
|
968
|
+
book.visible.should be true
|
969
|
+
book.writable.should be true
|
970
|
+
end
|
971
|
+
ole_wb = WIN32OLE.connect(@abs_filename)
|
972
|
+
ole_wb.Saved.should be false
|
973
|
+
@ole_e1.Visible.should be true
|
974
|
+
ole_wb.ReadOnly.should be false
|
975
|
+
Excel.kill_all
|
976
|
+
book2 = Workbook.open(@unsaved_file)
|
977
|
+
book2.sheet(1)[1,1].should_not == @old_value
|
978
|
+
book2.sheet(1)[1,1].should == @new_value
|
979
|
+
end
|
980
|
+
|
981
|
+
it "should not write with :writable => false" do
|
982
|
+
@ole_wb.Worksheets.Item(1).Cells.Item(1,1).Value = @old_value = "foo"
|
983
|
+
@ole_wb.Save
|
984
|
+
@ole_wb.Worksheets.Item(1).Cells.Item(1,1).Value = @old_value = "foo"
|
985
|
+
Workbook.unobtrusively(@unsaved_file, :writable => false) do |book|
|
986
|
+
book.sheet(1)[1,1] = "bar" #book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
987
|
+
@new_value = book.sheet(1)[1,1]
|
988
|
+
book.saved.should be false
|
989
|
+
book.visible.should be true
|
990
|
+
book.writable.should be true
|
991
|
+
end
|
992
|
+
ole_wb = WIN32OLE.connect(@abs_filename)
|
993
|
+
ole_wb.Saved.should be false
|
994
|
+
@ole_e1.Visible.should be true
|
995
|
+
ole_wb.ReadOnly.should be false
|
996
|
+
Excel.kill_all
|
997
|
+
book2 = Workbook.open(@simple_file1)
|
998
|
+
book2.sheet(1)[1,1].should == @old_value
|
999
|
+
book2.sheet(1)[1,1].should_not == @new_value
|
1000
|
+
end
|
1001
|
+
|
1002
|
+
end
|
1003
|
+
|
810
1004
|
context "with one read-only workbook" do
|
811
1005
|
|
812
1006
|
before do
|
@@ -1322,46 +1516,6 @@ describe Workbook do
|
|
1322
1516
|
book2.sheet(1)[1,1].should_not == @old_value
|
1323
1517
|
end
|
1324
1518
|
|
1325
|
-
=begin
|
1326
|
-
it "should force to read-write" do
|
1327
|
-
e1 = Excel.create
|
1328
|
-
Workbook.unobtrusively(@simple_file1, :writable => true, :rw_change_excel => e1) do |book|
|
1329
|
-
book.Readonly.should be false
|
1330
|
-
book.filename.should == @book.filename
|
1331
|
-
book.excel.should == e1
|
1332
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
1333
|
-
end
|
1334
|
-
@book.close
|
1335
|
-
book2 = Workbook.open(@simple_file1)
|
1336
|
-
book2.sheet(1)[1,1].should_not == @old_value
|
1337
|
-
end
|
1338
|
-
|
1339
|
-
it "should force to read-write" do
|
1340
|
-
Workbook.unobtrusively(@simple_file1, :writable => true, :rw_change_excel => :current) do |book|
|
1341
|
-
book.Readonly.should be false
|
1342
|
-
book.should == @book
|
1343
|
-
book.filename.should == @book.filename
|
1344
|
-
book.excel.should == @book.excel
|
1345
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
1346
|
-
end
|
1347
|
-
@book.close
|
1348
|
-
book2 = Workbook.open(@simple_file1)
|
1349
|
-
book2.sheet(1)[1,1].should_not == @old_value
|
1350
|
-
end
|
1351
|
-
|
1352
|
-
it "should force to read-write" do
|
1353
|
-
Workbook.unobtrusively(@simple_file1, :writable => true, :rw_change_excel => :new) do |book|
|
1354
|
-
book.Readonly.should be false
|
1355
|
-
book.filename.should == @book.filename
|
1356
|
-
book.excel.should_not == @book.excel
|
1357
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1] == "foo" ? "bar" : "foo"
|
1358
|
-
end
|
1359
|
-
@book.close
|
1360
|
-
book2 = Workbook.open(@simple_file1)
|
1361
|
-
book2.sheet(1)[1,1].should_not == @old_value
|
1362
|
-
end
|
1363
|
-
=end
|
1364
|
-
|
1365
1519
|
it "should force to read-write" do
|
1366
1520
|
Workbook.unobtrusively(@simple_file1, :writable => true, :read_only => false) do |book|
|
1367
1521
|
book.Readonly.should be false
|
@@ -1957,7 +2111,7 @@ describe Workbook do
|
|
1957
2111
|
|
1958
2112
|
it "should let an open Workbook open if it has been closed and opened again" do
|
1959
2113
|
@book.close
|
1960
|
-
@book.
|
2114
|
+
@book.open
|
1961
2115
|
Workbook.unobtrusively(@simple_file1) do |book|
|
1962
2116
|
book.should be_a Workbook
|
1963
2117
|
book.should be_alive
|
@@ -1971,7 +2125,7 @@ describe Workbook do
|
|
1971
2125
|
book2 = Workbook.open(@different_file, :force_excel => :new)
|
1972
2126
|
@book.close
|
1973
2127
|
book2.close
|
1974
|
-
@book.
|
2128
|
+
@book.open
|
1975
2129
|
Workbook.unobtrusively(@simple_file1) do |book|
|
1976
2130
|
book.should be_a Workbook
|
1977
2131
|
book.should be_alive
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: robust_excel_ole
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.36'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- traths
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: win32api
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.1'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.1'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: pry
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -202,8 +188,10 @@ files:
|
|
202
188
|
- spec/data/workbook.xlsx
|
203
189
|
- spec/data/workbook_connected.xlsm
|
204
190
|
- spec/data/workbook_linked.xlsm
|
191
|
+
- spec/data/workbook_linked3.xlsm
|
205
192
|
- spec/data/workbook_linked_sub.xlsm
|
206
193
|
- spec/data/workbook_listobjects.xlsx
|
194
|
+
- spec/data/workbook_unsaved.xlsm
|
207
195
|
- spec/excel_spec.rb
|
208
196
|
- spec/general_spec.rb
|
209
197
|
- spec/helpers/create_temporary_dir.rb
|