robust_excel_ole 1.8 → 1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Changelog +8 -0
- data/README.rdoc +17 -3
- data/docs/README_excel.rdoc +23 -0
- data/docs/README_ranges.rdoc +73 -5
- data/examples/modifying_sheets/example_add_names.rb +57 -0
- data/examples/modifying_sheets/example_adding_sheets.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget.rb +1 -1
- data/examples/open_save_close/example_reuse.rb +1 -1
- data/lib/robust_excel_ole.rb +2 -0
- data/lib/robust_excel_ole/address.rb +114 -0
- data/lib/robust_excel_ole/excel.rb +81 -53
- data/lib/robust_excel_ole/general.rb +37 -3
- data/lib/robust_excel_ole/range.rb +20 -20
- data/lib/robust_excel_ole/range_owners.rb +236 -0
- data/lib/robust_excel_ole/reo_common.rb +18 -276
- data/lib/robust_excel_ole/version.rb +1 -1
- data/lib/robust_excel_ole/workbook.rb +177 -91
- data/lib/robust_excel_ole/worksheet.rb +12 -4
- data/reo.bat +1 -1
- data/spec/address_spec.rb +174 -0
- data/spec/data/another_workbook.xls +0 -0
- data/spec/data/different_workbook.xls +0 -0
- data/spec/data/workbook.xls +0 -0
- data/spec/excel_spec.rb +168 -29
- data/spec/reo_common_spec.rb +0 -103
- data/spec/workbook_spec.rb +12 -2
- data/spec/workbook_specs/workbook_close_spec.rb +2 -1
- data/spec/workbook_specs/workbook_misc_spec.rb +41 -7
- data/spec/workbook_specs/workbook_open_spec.rb +8 -3
- data/spec/workbook_specs/workbook_save_spec.rb +5 -3
- data/spec/worksheet_spec.rb +83 -10
- metadata +7 -3
data/spec/reo_common_spec.rb
CHANGED
@@ -36,109 +36,6 @@ module RobustExcelOle
|
|
36
36
|
rm_tmp(@dir)
|
37
37
|
end
|
38
38
|
|
39
|
-
describe "Address" do
|
40
|
-
|
41
|
-
it "should read a1-format" do
|
42
|
-
address = Address.new("A1")
|
43
|
-
address.rows.should == (1..1)
|
44
|
-
address.columns.should == (1..1)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should read a1-format with brackets" do
|
48
|
-
address = Address.new(["A1"])
|
49
|
-
address.rows.should == (1..1)
|
50
|
-
address.columns.should == (1..1)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should read a1-format" do
|
54
|
-
address = Address.new("ABO15")
|
55
|
-
address.columns.should == (743..743)
|
56
|
-
address.rows.should == (15..15)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should read a1-format when row and column are given separated" do
|
60
|
-
address = Address.new([1,"A"])
|
61
|
-
address.rows.should == (1..1)
|
62
|
-
address.columns.should == (1..1)
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should read a1-format with rows as integer range" do
|
66
|
-
address = Address.new([2..4, "AB"])
|
67
|
-
address.rows.should == (2..4)
|
68
|
-
address.columns.should == (28..28)
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should read a1-format with columns as string range" do
|
72
|
-
address = Address.new([2, "A".."C"])
|
73
|
-
address.rows.should == (2..2)
|
74
|
-
address.columns.should == (1..3)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should read a1-format with rows and columns as string range" do
|
78
|
-
address = Address.new([2..6, "A" .. "C"])
|
79
|
-
address.rows.should == (2..6)
|
80
|
-
address.columns.should == (1..3)
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should read r1c1-format" do
|
84
|
-
address = Address.new([1,2])
|
85
|
-
address.rows.should == (1..1)
|
86
|
-
address.columns.should == (2..2)
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should read r1c1-format with rows as integer range" do
|
90
|
-
address = Address.new([1..2,3])
|
91
|
-
address.rows.should == (1..2)
|
92
|
-
address.columns.should == (3..3)
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should read r1c1-format with columns as integer range" do
|
96
|
-
address = Address.new([1,3..5])
|
97
|
-
address.rows.should == (1..1)
|
98
|
-
address.columns.should == (3..5)
|
99
|
-
end
|
100
|
-
|
101
|
-
it "should read r1c1-format with rows and columns as integer range" do
|
102
|
-
address = Address.new([1..4,3..5])
|
103
|
-
address.rows.should == (1..4)
|
104
|
-
address.columns.should == (3..5)
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should read a1-format for a rectangular range" do
|
108
|
-
address = Address.new(["A1:B3"])
|
109
|
-
address.rows.should == (1..3)
|
110
|
-
address.columns.should == (1..2)
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should read a1-format for a rectangular range without brackets" do
|
114
|
-
address = Address.new("A1:B3")
|
115
|
-
address.rows == (1..3)
|
116
|
-
address.columns == (1..2)
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should read a1-format for a rectangular range with several letters" do
|
120
|
-
address = Address.new(["S1:DP2"])
|
121
|
-
address.rows.should == (1..2)
|
122
|
-
address.columns.should == (19..120)
|
123
|
-
end
|
124
|
-
|
125
|
-
it "should raise an error" do
|
126
|
-
expect{
|
127
|
-
Address.new("1A")
|
128
|
-
}.to raise_error(AddressInvalid, /not in A1/)
|
129
|
-
expect{
|
130
|
-
Address.new("A1B")
|
131
|
-
}.to raise_error(AddressInvalid, /not in A1/)
|
132
|
-
expect{
|
133
|
-
Address.new(["A".."B","C".."D"])
|
134
|
-
}.to raise_error(AddressInvalid, /not in A1/)
|
135
|
-
expect{
|
136
|
-
Address.new(["A",1,2])
|
137
|
-
}.to raise_error(AddressInvalid, /more than two components/)
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
39
|
describe "trace" do
|
143
40
|
|
144
41
|
it "should put some number" do
|
data/spec/workbook_spec.rb
CHANGED
@@ -210,7 +210,6 @@ describe Workbook do
|
|
210
210
|
|
211
211
|
end
|
212
212
|
|
213
|
-
|
214
213
|
context "with standard options" do
|
215
214
|
before do
|
216
215
|
@book = Workbook.open(@simple_file)
|
@@ -499,10 +498,20 @@ describe Workbook do
|
|
499
498
|
|
500
499
|
context "with non-existing file" do
|
501
500
|
|
501
|
+
it "should create a workbook" do
|
502
|
+
File.delete @simple_save_file rescue nil
|
503
|
+
book = Workbook.create(@simple_save_file)
|
504
|
+
book.should be_a Workbook
|
505
|
+
book.ReadOnly.should be false
|
506
|
+
book.close
|
507
|
+
File.exist?(@simple_save_file).should be true
|
508
|
+
end
|
509
|
+
|
502
510
|
it "should create a workbook" do
|
503
511
|
File.delete @simple_save_file rescue nil
|
504
512
|
book = Workbook.open(@simple_save_file, :if_absent => :create)
|
505
513
|
book.should be_a Workbook
|
514
|
+
book.ReadOnly.should be false
|
506
515
|
book.close
|
507
516
|
File.exist?(@simple_save_file).should be true
|
508
517
|
end
|
@@ -511,7 +520,8 @@ describe Workbook do
|
|
511
520
|
File.delete @simple_save_file rescue nil
|
512
521
|
expect {
|
513
522
|
Workbook.open(@simple_save_file)
|
514
|
-
}.to raise_error(FileNotFound, "file
|
523
|
+
}.to raise_error(FileNotFound, "file nil not found" +
|
524
|
+
"\nHint: If you want to create a new file, use option :if_absent => :create or Workbook::create")
|
515
525
|
end
|
516
526
|
end
|
517
527
|
|
@@ -142,7 +142,8 @@ describe Workbook do
|
|
142
142
|
it "should raise an error for invalid option" do
|
143
143
|
expect {
|
144
144
|
@book.close(:if_unsaved => :invalid_option)
|
145
|
-
}.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option"
|
145
|
+
}.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option" +
|
146
|
+
"\nHint: Valid values are :raise, :save, :keep_open, :alert, :excel")
|
146
147
|
end
|
147
148
|
|
148
149
|
|
@@ -1081,12 +1081,12 @@ describe Workbook do
|
|
1081
1081
|
context "range" do
|
1082
1082
|
|
1083
1083
|
before do
|
1084
|
-
@book1 = Workbook.open(@dir + '/another_workbook.xls', :
|
1085
|
-
@book1.excel.displayalerts = false
|
1084
|
+
@book1 = Workbook.open(@dir + '/another_workbook.xls', :visible => true)
|
1086
1085
|
end
|
1087
1086
|
|
1088
1087
|
it "should create a range from the name" do
|
1089
1088
|
@book1.add_name("foo",[1..3,1..4])
|
1089
|
+
@book1.save
|
1090
1090
|
range = @book1.range("foo")
|
1091
1091
|
range.Address.should == "$A$1:$D$3"
|
1092
1092
|
end
|
@@ -1108,12 +1108,36 @@ describe Workbook do
|
|
1108
1108
|
@book1.add_name("foo",[1,2])
|
1109
1109
|
@book1.Names.Item("foo").Name.should == "foo"
|
1110
1110
|
@book1.Names.Item("foo").Value.should == "=Sheet1!$B$1:$B$1"
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
@book1.add_name("foo",
|
1111
|
+
@book1.add_name("foo",[1..2,2..4])
|
1112
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1113
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$B$1:$D$2"
|
1114
|
+
@book1.add_name("foo","B1")
|
1115
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1116
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$B$1:$B$1"
|
1117
|
+
@book1.add_name("foo","B1:D2")
|
1118
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1119
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$B$1:$D$2"
|
1120
|
+
@book1.add_name("foo","Z1S2")
|
1121
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1122
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$B$1"
|
1123
|
+
@book1.add_name("foo","Z1S2:Z2S4")
|
1115
1124
|
@book1.Names.Item("foo").Name.should == "foo"
|
1116
|
-
@book1.Names.Item("foo").Value.should == "=Sheet1!$
|
1125
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$B$1:$D$2"
|
1126
|
+
@book1.add_name("foo","A:B")
|
1127
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1128
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$A:$B"
|
1129
|
+
@book1.add_name("foo","1:2")
|
1130
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1131
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$1:$2"
|
1132
|
+
@book1.add_name("foo",[1..2,nil])
|
1133
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1134
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$1:$2"
|
1135
|
+
@book1.add_name("foo",[nil,1..2])
|
1136
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1137
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$A:$B"
|
1138
|
+
@book1.add_name("foo",[nil,"A".."B"])
|
1139
|
+
@book1.Names.Item("foo").Name.should == "foo"
|
1140
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$A:$B"
|
1117
1141
|
end
|
1118
1142
|
|
1119
1143
|
it "should raise an error" do
|
@@ -1140,6 +1164,16 @@ describe Workbook do
|
|
1140
1164
|
@book1["foo"].should == [["foo", "workbook", "sheet1", nil], ["foo", 1.0, 2.0, 4.0], ["matz", 3.0, 4.0, 4.0]]
|
1141
1165
|
end
|
1142
1166
|
|
1167
|
+
it "should add a name of an infinite row range" do
|
1168
|
+
@book1.add_name("foo",[1..3, nil])
|
1169
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$1:$3"
|
1170
|
+
end
|
1171
|
+
|
1172
|
+
it "should add a name of an infinite column range" do
|
1173
|
+
@book1.add_name("foo",[nil, "A".."C"])
|
1174
|
+
@book1.Names.Item("foo").Value.should == "=Sheet1!$A:$C"
|
1175
|
+
end
|
1176
|
+
|
1143
1177
|
end
|
1144
1178
|
|
1145
1179
|
context "with compatibility" do
|
@@ -1936,7 +1936,10 @@ describe Workbook do
|
|
1936
1936
|
it "should raise an error, if :if_obstructed is invalid option" do
|
1937
1937
|
expect {
|
1938
1938
|
new_book = Workbook.open(@simple_file1, :if_obstructed => :invalid_option)
|
1939
|
-
}.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid_option"
|
1939
|
+
}.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid_option" +
|
1940
|
+
"\nHint: Use the option :if_obstructed with values :forget or :save,
|
1941
|
+
to close the old workbook, without or with saving before, respectively,
|
1942
|
+
and to open the new workbook")
|
1940
1943
|
end
|
1941
1944
|
end
|
1942
1945
|
end
|
@@ -1992,7 +1995,8 @@ describe Workbook do
|
|
1992
1995
|
File.delete @simple_save_file rescue nil
|
1993
1996
|
expect {
|
1994
1997
|
Workbook.open(@simple_save_file, :if_absent => :raise)
|
1995
|
-
}.to raise_error(FileNotFound, "file #{General::absolute_path(@simple_save_file).gsub("/","\\").inspect} not found"
|
1998
|
+
}.to raise_error(FileNotFound, "file #{General::absolute_path(@simple_save_file).gsub("/","\\").inspect} not found" +
|
1999
|
+
"\nHint: If you want to create a new file, use option :if_absent => :create or Workbook::create")
|
1996
2000
|
end
|
1997
2001
|
|
1998
2002
|
it "should create a workbook" do
|
@@ -2196,7 +2200,8 @@ describe Workbook do
|
|
2196
2200
|
expected_path = Regexp.new(File.expand_path(path).gsub(/\//, "."))
|
2197
2201
|
expect {
|
2198
2202
|
Workbook.open(path)
|
2199
|
-
}.to raise_error(FileNotFound, "file #{General::absolute_path(path).gsub("/","\\").inspect} not found"
|
2203
|
+
}.to raise_error(FileNotFound, "file #{General::absolute_path(path).gsub("/","\\").inspect} not found" +
|
2204
|
+
"\nHint: If you want to create a new file, use option :if_absent => :create or Workbook::create")
|
2200
2205
|
end
|
2201
2206
|
end
|
2202
2207
|
end
|
@@ -267,7 +267,8 @@ describe Workbook do
|
|
267
267
|
File.exist?(@simple_file_other_path1).should be true
|
268
268
|
expect{
|
269
269
|
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_obstructed => :invalid)
|
270
|
-
}.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid"
|
270
|
+
}.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid" +
|
271
|
+
"\nHint: Valid values are :raise, :overwrite, :alert, :excel")
|
271
272
|
end
|
272
273
|
|
273
274
|
it "should raise an error by default" do
|
@@ -322,7 +323,7 @@ describe Workbook do
|
|
322
323
|
book_save = Workbook.open(@simple_save_file1, :excel => :new)
|
323
324
|
expect{
|
324
325
|
@book.save_as(@simple_save_file1, :if_exists => :overwrite)
|
325
|
-
}.to raise_error(WorkbookBeingUsed, "workbook is open and used in Excel")
|
326
|
+
}.to raise_error(WorkbookBeingUsed, "workbook is open and being used in an Excel instance")
|
326
327
|
book_save.close
|
327
328
|
end
|
328
329
|
|
@@ -506,7 +507,8 @@ describe Workbook do
|
|
506
507
|
@book.save_as(@simple_save_file1)
|
507
508
|
expect {
|
508
509
|
@book.save_as(@simple_save_file1, :if_exists => :invalid)
|
509
|
-
}.to raise_error(OptionInvalid, ':if_exists: invalid option: :invalid'
|
510
|
+
}.to raise_error(OptionInvalid, ':if_exists: invalid option: :invalid' +
|
511
|
+
"\nHint: Valid values are :raise, :overwrite, :alert, :excel")
|
510
512
|
end
|
511
513
|
end
|
512
514
|
end
|
data/spec/worksheet_spec.rb
CHANGED
@@ -192,10 +192,21 @@ describe Worksheet do
|
|
192
192
|
|
193
193
|
describe "range" do
|
194
194
|
|
195
|
+
it "should a range with relative r1c1-reference" do
|
196
|
+
@sheet.range(["Z1S[3]:Z[2]S8"]).Address.should == "$D$1:$H$3"
|
197
|
+
@sheet.range(["Z1S3:Z2S8"]).Address.should == "$C$1:$H$2"
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should a range with relative integer-range-reference" do
|
201
|
+
@sheet.range([1..[2],[3]..8]).Address.should == "$D$1:$H$3"
|
202
|
+
end
|
203
|
+
|
195
204
|
it "should create a range of one cell" do
|
196
205
|
@sheet.range([1,2]).values.should == ["workbook"]
|
197
206
|
@sheet.range(["B1"]).values.should == ["workbook"]
|
198
207
|
@sheet.range("B1").values.should == ["workbook"]
|
208
|
+
@sheet.range(["Z1S2"]).values.should == ["workbook"]
|
209
|
+
@sheet.range("Z1S2").values.should == ["workbook"]
|
199
210
|
end
|
200
211
|
|
201
212
|
it "should create a rectangular range" do
|
@@ -203,6 +214,8 @@ describe Worksheet do
|
|
203
214
|
@sheet.range([1..3, "B".."D"]).values.should == ["workbook", "sheet1", nil, nil, "foobaaa", nil, "is", "nice", nil]
|
204
215
|
@sheet.range(["B1:D3"]).values.should == ["workbook", "sheet1", nil, nil, "foobaaa", nil, "is", "nice", nil]
|
205
216
|
@sheet.range("B1:D3").values.should == ["workbook", "sheet1", nil, nil, "foobaaa", nil, "is", "nice", nil]
|
217
|
+
@sheet.range(["Z1S2:Z3S4"]).values.should == ["workbook", "sheet1", nil, nil, "foobaaa", nil, "is", "nice", nil]
|
218
|
+
@sheet.range("Z1S2:Z3S4").values.should == ["workbook", "sheet1", nil, nil, "foobaaa", nil, "is", "nice", nil]
|
206
219
|
end
|
207
220
|
|
208
221
|
it "should accept old interface" do
|
@@ -210,10 +223,17 @@ describe Worksheet do
|
|
210
223
|
@sheet.range(1..3, "B".."D").values.should == ["workbook", "sheet1", nil, nil, "foobaaa", nil, "is", "nice", nil]
|
211
224
|
end
|
212
225
|
|
226
|
+
it "should create infinite ranges" do
|
227
|
+
@sheet.range([1..3,nil]).Address.should == "$1:$3"
|
228
|
+
@sheet.range(nil,"B".."D").Address.should == "$B:$D"
|
229
|
+
@sheet.range("1:3").Address.should == "$1:$3"
|
230
|
+
@sheet.range("B:D").Address.should == "$B:$D"
|
231
|
+
end
|
232
|
+
|
213
233
|
it "should raise an error" do
|
214
234
|
expect{
|
215
235
|
@sheet.range([0,0])
|
216
|
-
}.to raise_error(
|
236
|
+
}.to raise_error(RangeNotCreated, /cannot create/)
|
217
237
|
end
|
218
238
|
|
219
239
|
end
|
@@ -659,10 +679,10 @@ describe Worksheet do
|
|
659
679
|
}.to_not raise_error
|
660
680
|
expect {
|
661
681
|
@sheet1.namevalue("foo", :default => :__not_provided)
|
662
|
-
}.to raise_error(NameNotFound, /name "foo" not in #<Worksheet: Sheet1
|
682
|
+
}.to raise_error(NameNotFound, /name "foo" not in #<Worksheet: Sheet1/)
|
663
683
|
expect {
|
664
684
|
@sheet1.namevalue("foo")
|
665
|
-
}.to raise_error(NameNotFound, /name "foo" not in #<Worksheet: Sheet1
|
685
|
+
}.to raise_error(NameNotFound, /name "foo" not in #<Worksheet: Sheet1/)
|
666
686
|
@sheet1.namevalue("foo", :default => nil).should be_nil
|
667
687
|
@sheet1.namevalue("foo", :default => 1).should == 1
|
668
688
|
@sheet1.namevalue_glob("empty", :default => 1).should be_nil
|
@@ -681,20 +701,28 @@ describe Worksheet do
|
|
681
701
|
|
682
702
|
context "adding, renaming, deleting the name of a range" do
|
683
703
|
|
684
|
-
|
685
|
-
@book1 = Workbook.open(@dir + '/another_workbook.xls', :
|
686
|
-
@book1.excel.displayalerts = false
|
704
|
+
before do
|
705
|
+
@book1 = Workbook.open(@dir + '/another_workbook.xls', :visible => true)
|
687
706
|
@sheet1 = @book1.sheet(1)
|
688
707
|
end
|
689
708
|
|
690
709
|
after do
|
691
|
-
@book1.close
|
710
|
+
@book1.close(:if_unsaved => :forget)
|
711
|
+
end
|
712
|
+
|
713
|
+
it "should add a name of a rectangular range using relative int-range-reference" do
|
714
|
+
@sheet1.add_name("foo",[[1]..3,1..[2]])
|
715
|
+
@sheet1.range("foo").Address.should == "$A$3:$D$5"
|
692
716
|
end
|
693
717
|
|
718
|
+
it "should add a name of a rectangular range using relative r1c1-reference" do
|
719
|
+
@sheet1.add_name("foo","Z[1]S3:Z1S[2]")
|
720
|
+
@sheet1.range("foo").Address.should == "$C$1:$D$5"
|
721
|
+
@sheet1.add_name("bar","Z[-3]S[-2]")
|
722
|
+
@sheet1.range("bar").Address.should == "$IV$1"
|
723
|
+
end
|
724
|
+
|
694
725
|
it "should name an unnamed range with a giving address" do
|
695
|
-
expect{
|
696
|
-
@sheet1[1,2].Name.Name
|
697
|
-
}.to raise_error
|
698
726
|
@sheet1.add_name("foo",[1,2])
|
699
727
|
@sheet1.Range("foo").Address.should == "$B$1"
|
700
728
|
end
|
@@ -750,6 +778,51 @@ describe Worksheet do
|
|
750
778
|
@sheet1["foo"].should == [["foo", "workbook", "sheet1", nil], ["foo", 1.0, 2.0, 4.0], ["matz", 3.0, 4.0, 4.0]]
|
751
779
|
end
|
752
780
|
|
781
|
+
it "should add a name of another rectangular range" do
|
782
|
+
@sheet1.add_name("foo",[1..3, "A"])
|
783
|
+
@sheet1["foo"].should == [["foo"], ["foo"],["matz"]]
|
784
|
+
@sheet1.Range("foo").Address.should == "$A$1:$A$3"
|
785
|
+
end
|
786
|
+
|
787
|
+
it "should add a name of an infinite row range" do
|
788
|
+
@sheet1.add_name("foo",[1..3, nil])
|
789
|
+
@sheet1.Range("foo").Address.should == "$1:$3"
|
790
|
+
end
|
791
|
+
|
792
|
+
it "should add a name of an infinite column range" do
|
793
|
+
@sheet1.add_name("foo",[nil, "A".."C"])
|
794
|
+
@sheet1.Range("foo").Address.should == "$A:$C"
|
795
|
+
end
|
796
|
+
|
797
|
+
it "should add a name of an infinite column range" do
|
798
|
+
@sheet1.add_name("foo",[nil, 1..3])
|
799
|
+
@sheet1.Range("foo").Address.should == "$A:$C"
|
800
|
+
end
|
801
|
+
|
802
|
+
it "should add a name of an infinite column range" do
|
803
|
+
@sheet1.add_name("foo","A:C")
|
804
|
+
@sheet1.Range("foo").Address.should == "$A:$C"
|
805
|
+
end
|
806
|
+
|
807
|
+
it "should add a name of an infinite column range" do
|
808
|
+
@sheet1.add_name("foo","1:2")
|
809
|
+
@sheet1.Range("foo").Address.should == "$1:$2"
|
810
|
+
end
|
811
|
+
|
812
|
+
it "should name an range with a relative columns" do
|
813
|
+
@sheet1.add_name("foo",[1,2])
|
814
|
+
@sheet1.Range("foo").Address.should == "$B$1"
|
815
|
+
@sheet1.add_name("bar","Z3S[4]")
|
816
|
+
@sheet1.Range("bar").Address.should == "$E$3"
|
817
|
+
end
|
818
|
+
|
819
|
+
it "should name an range with a relative row" do
|
820
|
+
@sheet1.add_name("foo",[1,2])
|
821
|
+
@sheet1.Range("foo").Address.should == "$B$1"
|
822
|
+
@sheet1.add_name("bar","Z[3]S4")
|
823
|
+
@sheet1.Range("bar").Address.should == "$D$4"
|
824
|
+
end
|
825
|
+
|
753
826
|
end
|
754
827
|
end
|
755
828
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.9'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- traths
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- examples/introducing_examples/example_open.rb
|
58
58
|
- examples/introducing_examples/example_range.rb
|
59
59
|
- examples/modifying_sheets/example_access_sheets_and_cells.rb
|
60
|
+
- examples/modifying_sheets/example_add_names.rb
|
60
61
|
- examples/modifying_sheets/example_adding_sheets.rb
|
61
62
|
- examples/modifying_sheets/example_concating.rb
|
62
63
|
- examples/modifying_sheets/example_copying.rb
|
@@ -80,12 +81,14 @@ files:
|
|
80
81
|
- examples/open_save_close/example_unobtrusively.rb
|
81
82
|
- lib/reo_console.rb
|
82
83
|
- lib/robust_excel_ole.rb
|
84
|
+
- lib/robust_excel_ole/address.rb
|
83
85
|
- lib/robust_excel_ole/bookstore.rb
|
84
86
|
- lib/robust_excel_ole/cell.rb
|
85
87
|
- lib/robust_excel_ole/cygwin.rb
|
86
88
|
- lib/robust_excel_ole/excel.rb
|
87
89
|
- lib/robust_excel_ole/general.rb
|
88
90
|
- lib/robust_excel_ole/range.rb
|
91
|
+
- lib/robust_excel_ole/range_owners.rb
|
89
92
|
- lib/robust_excel_ole/reo_common.rb
|
90
93
|
- lib/robust_excel_ole/robustexcelole.sublime-project
|
91
94
|
- lib/robust_excel_ole/robustexcelole.sublime-workspace
|
@@ -95,6 +98,7 @@ files:
|
|
95
98
|
- lib/spec_helper.rb
|
96
99
|
- reo.bat
|
97
100
|
- robust_excel_ole.gemspec
|
101
|
+
- spec/address_spec.rb
|
98
102
|
- spec/bookstore_spec.rb
|
99
103
|
- spec/cell_spec.rb
|
100
104
|
- spec/cygwin_spec.rb
|
@@ -154,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
158
|
version: '0'
|
155
159
|
requirements: []
|
156
160
|
rubyforge_project: robust_excel_ole
|
157
|
-
rubygems_version: 2.
|
161
|
+
rubygems_version: 2.7.6
|
158
162
|
signing_key:
|
159
163
|
specification_version: 4
|
160
164
|
summary: RobustExcelOle automates processing Excel workbooks in Windows by using the
|