robust_excel_ole 1.11 → 1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog +11 -0
- data/README.rdoc +20 -8
- data/docs/README_open.rdoc +1 -0
- data/docs/README_ranges.rdoc +5 -11
- data/examples/{introducing_examples/example_introducing.rb → introductory_examples/example_introductory.rb} +10 -2
- data/examples/{introducing_examples → introductory_examples}/example_open.rb +18 -17
- data/examples/{introducing_examples → introductory_examples}/example_range.rb +29 -16
- data/examples/modifying_sheets/example_access_sheets_and_cells.rb +8 -7
- data/examples/modifying_sheets/example_add_names.rb +4 -8
- data/examples/modifying_sheets/example_adding_sheets.rb +7 -6
- data/examples/modifying_sheets/example_concating.rb +2 -2
- data/examples/modifying_sheets/example_copying.rb +3 -3
- data/examples/modifying_sheets/example_expanding.rb +2 -2
- data/examples/modifying_sheets/example_naming.rb +2 -2
- data/examples/modifying_sheets/example_ranges.rb +4 -4
- data/examples/modifying_sheets/example_saving.rb +3 -3
- data/examples/open_save_close/example_control_to_excel.rb +10 -11
- data/examples/open_save_close/example_default_excel.rb +13 -14
- data/examples/open_save_close/example_force_excel.rb +9 -10
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +7 -7
- data/examples/open_save_close/example_if_obstructed_forget.rb +5 -5
- data/examples/open_save_close/example_if_obstructed_save.rb +7 -7
- data/examples/open_save_close/example_if_unsaved_accept.rb +13 -13
- data/examples/open_save_close/example_if_unsaved_forget.rb +9 -10
- data/examples/open_save_close/example_if_unsaved_forget_more.rb +9 -10
- data/examples/open_save_close/example_read_only.rb +6 -6
- data/examples/open_save_close/example_rename_cells.rb +4 -5
- data/examples/open_save_close/example_reuse.rb +6 -6
- data/examples/open_save_close/example_simple.rb +5 -5
- data/examples/open_save_close/example_unobtrusively.rb +4 -4
- data/lib/robust_excel_ole/address.rb +0 -4
- data/lib/robust_excel_ole/bookstore.rb +4 -28
- data/lib/robust_excel_ole/excel.rb +17 -22
- data/lib/robust_excel_ole/general.rb +11 -18
- data/lib/robust_excel_ole/range_owners.rb +17 -27
- data/lib/robust_excel_ole/reo_common.rb +7 -3
- data/lib/robust_excel_ole/version.rb +1 -1
- data/lib/robust_excel_ole/workbook.rb +178 -180
- data/lib/robust_excel_ole/worksheet.rb +7 -4
- data/robust_excel_ole.gemspec +6 -4
- data/spec/bookstore_spec.rb +38 -34
- data/spec/data/more_data/workbook.xls +0 -0
- data/spec/excel_spec.rb +89 -44
- data/spec/general_spec.rb +1 -0
- data/spec/range_spec.rb +7 -4
- data/spec/workbook_specs/workbook_close_spec.rb +2 -1
- data/spec/workbook_specs/workbook_misc_spec.rb +34 -18
- data/spec/workbook_specs/workbook_open_spec.rb +112 -71
- data/spec/workbook_specs/workbook_save_spec.rb +173 -5
- data/spec/workbook_specs/workbook_sheet_spec.rb +6 -42
- data/spec/workbook_specs/workbook_unobtr_spec.rb +9 -246
- data/spec/worksheet_spec.rb +21 -5
- metadata +12 -11
@@ -154,6 +154,23 @@ describe Workbook do
|
|
154
154
|
|
155
155
|
end
|
156
156
|
|
157
|
+
context "with saving with the same name in another directory" do
|
158
|
+
|
159
|
+
before do
|
160
|
+
@book = Workbook.open(@simple_file1)
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should save with the same name in another directory" do
|
164
|
+
File.delete @simple_file_other_path1 rescue nil
|
165
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
166
|
+
file.puts "garbage"
|
167
|
+
end
|
168
|
+
File.exist?(@simple_file_other_path1).should be true
|
169
|
+
@book.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :forget)
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
157
174
|
context "with blocked by another file" do
|
158
175
|
|
159
176
|
before do
|
@@ -166,6 +183,156 @@ describe Workbook do
|
|
166
183
|
@book2.close(:if_unsaved => :forget)
|
167
184
|
end
|
168
185
|
|
186
|
+
it "should raise an error with :obstructed => :raise" do
|
187
|
+
File.delete @simple_file_other_path1 rescue nil
|
188
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
189
|
+
file.puts "garbage"
|
190
|
+
end
|
191
|
+
File.exist?(@simple_file_other_path1).should be true
|
192
|
+
expect{
|
193
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :raise)
|
194
|
+
}.to raise_error(WorkbookBlocked, /blocked by another workbook/)
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should close the blocking workbook without saving, and save the current workbook with :if_blocked => :forget" do
|
198
|
+
File.delete @simple_file_other_path1 rescue nil
|
199
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
200
|
+
file.puts "garbage"
|
201
|
+
end
|
202
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :forget)
|
203
|
+
@book.should_not be_alive
|
204
|
+
File.exist?(@simple_file_other_path1).should be true
|
205
|
+
new_book = Workbook.open(@simple_file_other_path1)
|
206
|
+
new_book.should be_a Workbook
|
207
|
+
new_book.close
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should close the blocking workbook without saving even if it is unsaved with :if_blocked => :forget" do
|
211
|
+
File.delete @simple_file_other_path1 rescue nil
|
212
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
213
|
+
file.puts "garbage"
|
214
|
+
end
|
215
|
+
sheet = @book.sheet(1)
|
216
|
+
cell_value = sheet[1,1].Value
|
217
|
+
sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
|
218
|
+
@book.Saved.should be false
|
219
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :forget)
|
220
|
+
@book.should_not be_alive
|
221
|
+
@book2.should be_alive
|
222
|
+
File.exist?(@simple_file_other_path1).should be true
|
223
|
+
new_book = Workbook.open(@simple_file_other_path1)
|
224
|
+
new_book.should be_a Workbook
|
225
|
+
new_book.close
|
226
|
+
old_book = Workbook.open(@simple_file1)
|
227
|
+
old_sheet = old_book.sheet(1)
|
228
|
+
old_sheet[1,1].Value.should == cell_value
|
229
|
+
old_book.close
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should save and close the blocking workbook, and save the current workbook with :if_obstructed => :save" do
|
233
|
+
File.delete @simple_file_other_path1 rescue nil
|
234
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
235
|
+
file.puts "garbage"
|
236
|
+
end
|
237
|
+
sheet = @book.sheet(1)
|
238
|
+
cell_value = sheet[1,1].Value
|
239
|
+
sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
|
240
|
+
@book.Saved.should be false
|
241
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :save)
|
242
|
+
@book.should_not be_alive
|
243
|
+
@book2.should be_alive
|
244
|
+
File.exist?(@simple_file_other_path1).should be true
|
245
|
+
new_book = Workbook.open(@simple_file_other_path1)
|
246
|
+
new_book.should be_a Workbook
|
247
|
+
new_book.close
|
248
|
+
old_book = Workbook.open(@simple_file1)
|
249
|
+
old_sheet = old_book.sheet(1)
|
250
|
+
old_sheet[1,1].Value.should_not == cell_value
|
251
|
+
old_book.close
|
252
|
+
end
|
253
|
+
|
254
|
+
it "should close the blocking workbook if it was saved, and save the current workbook with :if_obstructed => :close_if_saved" do
|
255
|
+
File.delete @simple_file_other_path1 rescue nil
|
256
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
257
|
+
file.puts "garbage"
|
258
|
+
end
|
259
|
+
@book.Saved.should be true
|
260
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :close_if_saved)
|
261
|
+
@book.should_not be_alive
|
262
|
+
@book2.should be_alive
|
263
|
+
File.exist?(@simple_file_other_path1).should be true
|
264
|
+
new_book = Workbook.open(@simple_file_other_path1)
|
265
|
+
new_book.should be_a Workbook
|
266
|
+
new_book.close
|
267
|
+
end
|
268
|
+
|
269
|
+
it "should raise an error if the blocking workbook was unsaved with :if_blocked => :close_if_saved" do
|
270
|
+
sheet = @book.sheet(1)
|
271
|
+
cell_value = sheet[1,1].Value
|
272
|
+
sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
|
273
|
+
@book.Saved.should be false
|
274
|
+
expect{
|
275
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :close_if_saved)
|
276
|
+
}.to raise_error(WorkbookBlocked, /blocking workbook is unsaved: "workbook.xls"/)
|
277
|
+
end
|
278
|
+
|
279
|
+
it "should raise an error with an invalid option" do
|
280
|
+
File.delete @simple_file_other_path1 rescue nil
|
281
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
282
|
+
file.puts "garbage"
|
283
|
+
end
|
284
|
+
File.exist?(@simple_file_other_path1).should be true
|
285
|
+
expect{
|
286
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :invalid)
|
287
|
+
}.to raise_error(OptionInvalid, /invalid option/)
|
288
|
+
# }.to raise_error(OptionInvalid, ":if_blocked: invalid option: :invalid" +
|
289
|
+
# "\nHint: Valid values are :raise, :forget, :save, :if_closed_saveo")
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should raise an error by default" do
|
293
|
+
File.delete @simple_file_other_path1 rescue nil
|
294
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
295
|
+
file.puts "garbage"
|
296
|
+
end
|
297
|
+
File.exist?(@simple_file_other_path1).should be true
|
298
|
+
expect{
|
299
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite)
|
300
|
+
}.to raise_error(WorkbookBlocked, /blocked by another workbook/)
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should raise an error if the file does not exist and an workbook with the same name and other path exists" do
|
304
|
+
File.delete @simple_file_other_path1 rescue nil
|
305
|
+
File.exist?(@simple_file_other_path1).should be false
|
306
|
+
expect{
|
307
|
+
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_blocked => :raise)
|
308
|
+
}.to raise_error(WorkbookBlocked, /blocked by another workbook/)
|
309
|
+
end
|
310
|
+
|
311
|
+
it "should raise an error if the file exists and an workbook with the same name and other path exists" do
|
312
|
+
File.delete @simple_file_other_path1 rescue nil
|
313
|
+
File.open(@simple_file_other_path1,"w") do | file |
|
314
|
+
file.puts "garbage"
|
315
|
+
end
|
316
|
+
File.exist?(@simple_file_other_path1).should be true
|
317
|
+
expect{
|
318
|
+
@book.save_as(@simple_file_other_path1, :if_exists => :raise, :if_blocked => :raise)
|
319
|
+
}.to raise_error(FileAlreadyExists, /file already exists: "workbook.xls"/)
|
320
|
+
end
|
321
|
+
|
322
|
+
end
|
323
|
+
|
324
|
+
context "with obstructed by another file" do
|
325
|
+
|
326
|
+
before do
|
327
|
+
@book = Workbook.open(@simple_file1)
|
328
|
+
@book2 = Workbook.open(@another_simple_file)
|
329
|
+
end
|
330
|
+
|
331
|
+
after do
|
332
|
+
@book.close(:if_unsaved => :forget)
|
333
|
+
@book2.close(:if_unsaved => :forget)
|
334
|
+
end
|
335
|
+
|
169
336
|
it "should raise an error with :obstructed => :raise" do
|
170
337
|
File.delete @simple_file_other_path1 rescue nil
|
171
338
|
File.open(@simple_file_other_path1,"w") do | file |
|
@@ -177,7 +344,7 @@ describe Workbook do
|
|
177
344
|
}.to raise_error(WorkbookBlocked, /blocked by another workbook/)
|
178
345
|
end
|
179
346
|
|
180
|
-
it "should close the blocking workbook without saving, and save the current workbook with :
|
347
|
+
it "should close the blocking workbook without saving, and save the current workbook with :if_blocked => :forget" do
|
181
348
|
File.delete @simple_file_other_path1 rescue nil
|
182
349
|
File.open(@simple_file_other_path1,"w") do | file |
|
183
350
|
file.puts "garbage"
|
@@ -234,7 +401,7 @@ describe Workbook do
|
|
234
401
|
old_book.close
|
235
402
|
end
|
236
403
|
|
237
|
-
it "should close the blocking workbook if it was saved, and save the current workbook with :
|
404
|
+
it "should close the blocking workbook if it was saved, and save the current workbook with :if_blokced => :close_if_saved" do
|
238
405
|
File.delete @simple_file_other_path1 rescue nil
|
239
406
|
File.open(@simple_file_other_path1,"w") do | file |
|
240
407
|
file.puts "garbage"
|
@@ -249,7 +416,7 @@ describe Workbook do
|
|
249
416
|
new_book.close
|
250
417
|
end
|
251
418
|
|
252
|
-
it "should raise an error if the blocking workbook was unsaved with :
|
419
|
+
it "should raise an error if the blocking workbook was unsaved with :if_blocked => :close_if_saved" do
|
253
420
|
sheet = @book.sheet(1)
|
254
421
|
cell_value = sheet[1,1].Value
|
255
422
|
sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
|
@@ -267,8 +434,9 @@ describe Workbook do
|
|
267
434
|
File.exist?(@simple_file_other_path1).should be true
|
268
435
|
expect{
|
269
436
|
@book2.save_as(@simple_file_other_path1, :if_exists => :overwrite, :if_obstructed => :invalid)
|
270
|
-
}.to raise_error(OptionInvalid,
|
271
|
-
|
437
|
+
}.to raise_error(OptionInvalid, /invalid option/)
|
438
|
+
#}.to raise_error(OptionInvalid, ":if_blocked: invalid option: :invalid" +
|
439
|
+
# "\nHint: Valid values are :raise, :forget, :save, :save_if_closed")
|
272
440
|
end
|
273
441
|
|
274
442
|
it "should raise an error by default" do
|
@@ -191,47 +191,11 @@ describe Workbook do
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
describe "add_empty_sheet" do
|
195
|
-
|
196
|
-
before do
|
197
|
-
@book = Workbook.open(@simple_file)
|
198
|
-
@sheet = @book.sheet(1)
|
199
|
-
end
|
200
|
-
|
201
|
-
after do
|
202
|
-
@book.close(:if_unsaved => :forget)
|
203
|
-
end
|
204
|
-
|
205
|
-
it "should add empty sheet" do
|
206
|
-
@book.ole_workbook.Worksheets.Count.should == 3
|
207
|
-
@book.add_empty_sheet
|
208
|
-
@book.ole_workbook.Worksheets.Count.should == 4
|
209
|
-
end
|
210
|
-
|
211
|
-
it "should add an empty sheet and return this added sheet" do
|
212
|
-
sheet = @book.add_empty_sheet
|
213
|
-
copyed_sheet = @book.ole_workbook.Worksheets.Item(@book.ole_workbook.Worksheets.Count)
|
214
|
-
sheet.name.should eq copyed_sheet.name
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should return new sheet" do
|
218
|
-
@book.add_empty_sheet(:as => 'new sheet').name.should eq 'new sheet'
|
219
|
-
end
|
220
|
-
|
221
|
-
it "should add the first sheet" do
|
222
|
-
@book.add_empty_sheet(:before => @sheet).name.should eq @book.sheet(1).name
|
223
|
-
end
|
224
|
-
|
225
|
-
it "should add the second sheet" do
|
226
|
-
@book.add_empty_sheet(:after => @sheet).name.should eq @book.sheet(2).name
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
194
|
describe "copy_sheet" do
|
231
195
|
|
232
196
|
before do
|
233
|
-
|
234
|
-
@
|
197
|
+
@book = Workbook.open(@simple_file)
|
198
|
+
@book2 = Workbook.open(@file_with_references)
|
235
199
|
@sheet = @book.sheet(1)
|
236
200
|
@another_book = Workbook.open(@another_simple_file)
|
237
201
|
end
|
@@ -242,10 +206,10 @@ describe Workbook do
|
|
242
206
|
end
|
243
207
|
|
244
208
|
it "should copy the second sheet, append it and leave the references so far" do
|
245
|
-
@
|
246
|
-
@
|
247
|
-
@
|
248
|
-
@
|
209
|
+
@book2.add_sheet(@book2.sheet(2), :after => @book2.sheet(3))
|
210
|
+
@book2.sheet(1)[2,1].Value.should == "x"
|
211
|
+
@book2.sheet(1)[2,2].Value.should == "y"
|
212
|
+
@book2.sheet(1)[2,3].Value.should == "z"
|
249
213
|
end
|
250
214
|
|
251
215
|
it "should copy and append a given sheet" do
|
@@ -53,222 +53,6 @@ describe Workbook do
|
|
53
53
|
expect{unobtrusively_ok?}.to_not raise_error
|
54
54
|
end
|
55
55
|
|
56
|
-
=begin
|
57
|
-
describe "with already open Excel instances and workbooks" do
|
58
|
-
|
59
|
-
before do
|
60
|
-
@ole_excel1 = WIN32OLE.new('Excel.Application')
|
61
|
-
@ole_excel2 = WIN32OLE.new('Excel.Application')
|
62
|
-
end
|
63
|
-
|
64
|
-
context "with open unsaved workbook" do
|
65
|
-
|
66
|
-
before do
|
67
|
-
@book1 = Workbook.open(@simple_file1)
|
68
|
-
@book1.sheet(1)[1,1] = "foo"
|
69
|
-
#@ole_workbook1 = @ole_excel1.Workbooks.Open(@simple_file1, { 'ReadOnly' => false })
|
70
|
-
#@old_value = @ole_workbook1.Worksheets.Item(1).Cells.Item(1, 1).Value
|
71
|
-
#@ole_workbook1.Worksheets.Item(1).Cells.Item(1, 1).Value =
|
72
|
-
# @old_value == "foo" ? "bar" : "foo"
|
73
|
-
end
|
74
|
-
|
75
|
-
context "with writability" do
|
76
|
-
|
77
|
-
it "should open as read-write by default" do
|
78
|
-
Workbook.unobtrusively(@simple_file1) do |book|
|
79
|
-
book.Readonly.should be false
|
80
|
-
#book.filename.should == @ole_workbook1.Fullname.tr('\\','/')
|
81
|
-
#book.excel.ole_excel.Hwnd.should == @ole_excel1.Hwnd
|
82
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1].Value == "foo" ? "bar" : "foo"
|
83
|
-
end
|
84
|
-
#@ole_workbook1.Saved.should be false
|
85
|
-
Excel.kill_all
|
86
|
-
sleep 1
|
87
|
-
book2 = Workbook.open(@simple_file1)
|
88
|
-
#book2.sheet(1)[1,1].Value.should == @old_value
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should open not writable" do
|
92
|
-
Workbook.unobtrusively(@simple_file1, :writable => false) do |book|
|
93
|
-
book.ReadOnly.should be false
|
94
|
-
book.filename.should == @ole_workbook1.Fullname.tr('\\','/')
|
95
|
-
book.excel.ole_excel.Hwnd.should == @ole_excel1.Hwnd
|
96
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1].Value == "foo" ? "bar" : "foo"
|
97
|
-
end
|
98
|
-
@book.Saved.should be false
|
99
|
-
@book.sheet(1)[1,1].Value.should_not == @old_value
|
100
|
-
Excel.kill_all
|
101
|
-
sleep 1
|
102
|
-
book2 = Workbook.open(@simple_file1)
|
103
|
-
book2.sheet(1)[1,1].Value.should_not == @old_value
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context "further tests" do
|
108
|
-
|
109
|
-
it "should write in the outer and not in the inner block" do
|
110
|
-
Workbook.unobtrusively(@simple_file1) do |book|
|
111
|
-
@old_value = book.sheet(1)[1,1].Value
|
112
|
-
book.ReadOnly.should be false
|
113
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1].Value == "foo" ? "bar" : "foo"
|
114
|
-
book.Saved.should be false
|
115
|
-
book.sheet(1)[1,1].Value.should_not == @old_value
|
116
|
-
Workbook.unobtrusively(@simple_file1, :writable => false) do |book2|
|
117
|
-
book2.should == book
|
118
|
-
book2.ReadOnly.should be false
|
119
|
-
book2.Saved.should be false
|
120
|
-
book2.sheet(1)[1,1].Value.should_not == @old_value
|
121
|
-
book2.sheet(1)[1,1] = book2.sheet(1)[1,1].Value == "foo" ? "bar" : "foo"
|
122
|
-
book2.sheet(1)[1,1].Value.should == @old_value
|
123
|
-
end
|
124
|
-
book.should be_alive
|
125
|
-
book.Saved.should be false
|
126
|
-
book.sheet(1)[1,1].Value.should == @old_value
|
127
|
-
end
|
128
|
-
book = Workbook.open(@simple_file1)
|
129
|
-
book.sheet(1)[1,1].Value.should == @old_value
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should use the excel of the book and keep open the book" do
|
133
|
-
@book = Workbook.open(@simple_file1)
|
134
|
-
excel = Excel.new(:reuse => false)
|
135
|
-
sheet = @book.sheet(1)
|
136
|
-
old_cell_value = sheet[1,1].Value
|
137
|
-
@book.close
|
138
|
-
@book.should_not be_alive
|
139
|
-
Workbook.unobtrusively(@simple_file, :keep_open => true) do |book|
|
140
|
-
book.should be_a Workbook
|
141
|
-
book.excel.should == @book.excel
|
142
|
-
book.excel.should_not == excel
|
143
|
-
sheet = book.sheet(1)
|
144
|
-
cell = sheet[1,1]
|
145
|
-
sheet[1,1] = cell.Value == "foo" ? "bar" : "foo"
|
146
|
-
book.Saved.should be false
|
147
|
-
end
|
148
|
-
@book.should be_alive
|
149
|
-
@book.close
|
150
|
-
new_book = Workbook.open(@simple_file1)
|
151
|
-
sheet = new_book.sheet(1)
|
152
|
-
sheet[1,1].Value.should_not == old_cell_value
|
153
|
-
end
|
154
|
-
|
155
|
-
it "should use the excel of the book and keep open the book" do
|
156
|
-
@book = Workbook.open(@simple_file1)
|
157
|
-
excel = Excel.new(:reuse => false)
|
158
|
-
sheet = @book.sheet(1)
|
159
|
-
old_cell_value = sheet[1,1].Value
|
160
|
-
@book.close
|
161
|
-
@book.should_not be_alive
|
162
|
-
Workbook.unobtrusively(@simple_file, :if_closed => :new) do |book|
|
163
|
-
book.should be_a Workbook
|
164
|
-
book.should be_alive
|
165
|
-
book.excel.should_not == @book.excel
|
166
|
-
book.excel.should_not == excel
|
167
|
-
sheet = book.sheet(1)
|
168
|
-
cell = sheet[1,1]
|
169
|
-
sheet[1,1] = cell.Value == "foo" ? "bar" : "foo"
|
170
|
-
book.Saved.should be false
|
171
|
-
end
|
172
|
-
@book.should_not be_alive
|
173
|
-
new_book = Workbook.open(@simple_file1)
|
174
|
-
sheet = new_book.sheet(1)
|
175
|
-
sheet[1,1].Value.should_not == old_cell_value
|
176
|
-
end
|
177
|
-
|
178
|
-
it "should use a given Excel" do
|
179
|
-
@book = Workbook.open(@simple_file1)
|
180
|
-
@book.close
|
181
|
-
new_excel = Excel.new(:reuse => false)
|
182
|
-
another_excel = Excel.new(:reuse => false)
|
183
|
-
Workbook.unobtrusively(@simple_file1, :if_closed => another_excel) do |book|
|
184
|
-
book.excel.should_not == @book.excel
|
185
|
-
book.excel.should_not == new_excel
|
186
|
-
book.excel.should == another_excel
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
it "should reuse Excel" do
|
191
|
-
new_excel = Excel.new(:reuse => false)
|
192
|
-
Workbook.unobtrusively(@simple_file1, :if_closed => :reuse) do |book|
|
193
|
-
book.excel.should == @book.excel
|
194
|
-
book.excel.should_not == new_excel
|
195
|
-
end
|
196
|
-
|
197
|
-
it "should open unobtrusively the closed book in the most recent Excel where it was open before" do
|
198
|
-
@book1 = Workbook.open(@simple_file1)
|
199
|
-
@book2 = Workbook.open(@simple_file1, :force_excel => :new)
|
200
|
-
@book1.Readonly.should == false
|
201
|
-
@book2.Readonly.should == true
|
202
|
-
old_sheet = @book1.sheet(1)
|
203
|
-
@old_cell_value = old_sheet[1,1].Value
|
204
|
-
@book1.close
|
205
|
-
@book2.close
|
206
|
-
@book1.should_not be_alive
|
207
|
-
@book2.should_not be_alive
|
208
|
-
Workbook.unobtrusively(@simple_file1) do |book|
|
209
|
-
book.excel.should_not == @book2.excel
|
210
|
-
book.excel.should == @book1.excel
|
211
|
-
book.ReadOnly.should == false
|
212
|
-
sheet = book.sheet(1)
|
213
|
-
cell = sheet[1,1]
|
214
|
-
sheet[1,1] = cell.Value == "foo" ? "bar" : "foo"
|
215
|
-
book.Saved.should be false
|
216
|
-
end
|
217
|
-
new_book = Workbook.open(@simple_file1)
|
218
|
-
sheet = new_book.sheet(1)
|
219
|
-
sheet[1,1].Value.should_not == @old_cell_value
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
context "with open unsaved read-only workbook" do
|
225
|
-
|
226
|
-
before do
|
227
|
-
@ole_workbook1 = @ole_excel1.Workbooks.Open(@simple_file1, { 'ReadOnly' => true })
|
228
|
-
@old_value = @ole_workbook1.Worksheets.Item(1).Cells.Item(1, 1).Value
|
229
|
-
@ole_workbook1.Worksheets.Item(1).Cells.Item(1, 1).Value =
|
230
|
-
@old_value == "foo" ? "bar" : "foo"
|
231
|
-
end
|
232
|
-
|
233
|
-
context "with writability" do
|
234
|
-
|
235
|
-
it "should open as read-only by default" do
|
236
|
-
Workbook.unobtrusively(@simple_file1) do |book|
|
237
|
-
book.Readonly.should be true
|
238
|
-
book.filename.should == @ole_workbook1.Fullname.tr('\\','/')
|
239
|
-
book.excel.ole_excel.Hwnd.should == @ole_excel1.Hwnd
|
240
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1].Value == "foo" ? "bar" : "foo"
|
241
|
-
end
|
242
|
-
@ole_workbook1.Saved.should be false
|
243
|
-
@ole_workbook1.ReadOnly.should be true
|
244
|
-
@ole_workbook1.Worksheets.Item(1).Cells.Item(1, 1).Value.should_not == @old_value
|
245
|
-
Excel.kill_all
|
246
|
-
sleep 1
|
247
|
-
book2 = Workbook.open(@simple_file1)
|
248
|
-
book2.sheet(1)[1,1].Value.should_not == @old_value
|
249
|
-
end
|
250
|
-
|
251
|
-
it "should open not writable" do
|
252
|
-
Workbook.unobtrusively(@simple_file1, :writable => false) do |book|
|
253
|
-
book.ReadOnly.should be true
|
254
|
-
book.filename.should == @ole_workbook1.Fullname.tr('\\','/')
|
255
|
-
book.excel.ole_excel.Hwnd.should == @ole_excel1.Hwnd
|
256
|
-
book.sheet(1)[1,1] = book.sheet(1)[1,1].Value == "foo" ? "bar" : "foo"
|
257
|
-
end
|
258
|
-
@ole_workbook1.Saved.should be false
|
259
|
-
@ole_workbook1.ReadOnly.should be true
|
260
|
-
@ole_workbook1.Worksheets.Item(1).Cells.Item(1, 1).Value.should_not == @old_value
|
261
|
-
Excel.kill_all
|
262
|
-
sleep 1
|
263
|
-
book2 = Workbook.open(@simple_file1)
|
264
|
-
book2.sheet(1)[1,1].Value.should == @old_value
|
265
|
-
end
|
266
|
-
end
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
=end
|
271
|
-
|
272
56
|
describe "block transparency" do
|
273
57
|
|
274
58
|
it "should return correct value of the block" do
|
@@ -314,28 +98,6 @@ describe Workbook do
|
|
314
98
|
|
315
99
|
end
|
316
100
|
|
317
|
-
describe "connecting to unknown workbooks" do
|
318
|
-
|
319
|
-
context "with one unknown workbook" do
|
320
|
-
|
321
|
-
before do
|
322
|
-
ole_e1 = WIN32OLE.new('Excel.Application')
|
323
|
-
ws = ole_e1.Workbooks
|
324
|
-
abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
|
325
|
-
@ole_wb = ws.Open(abs_filename)
|
326
|
-
end
|
327
|
-
|
328
|
-
it "should connect to an unknown workbook" do
|
329
|
-
Workbook.unobtrusively(@simple_file1) do |book|
|
330
|
-
book.filename.should == @simple_file1
|
331
|
-
book.excel.ole_excel.Hwnd.should == @ole_wb.Application.Hwnd
|
332
|
-
end
|
333
|
-
end
|
334
|
-
|
335
|
-
end
|
336
|
-
|
337
|
-
end
|
338
|
-
|
339
101
|
describe "writability" do
|
340
102
|
|
341
103
|
context "with no book" do
|
@@ -618,7 +380,7 @@ describe Workbook do
|
|
618
380
|
|
619
381
|
it "should force to read-write" do
|
620
382
|
Workbook.unobtrusively(@simple_file1, :writable => true) do |book|
|
621
|
-
book.
|
383
|
+
book.ReadOnly.should be false
|
622
384
|
book.should == @book
|
623
385
|
book.filename.should == @book.filename
|
624
386
|
book.excel.should == @book.excel
|
@@ -1263,11 +1025,12 @@ describe Workbook do
|
|
1263
1025
|
end
|
1264
1026
|
|
1265
1027
|
it "should open in another Excel instance if the given Excel instance is not alive" do
|
1266
|
-
|
1028
|
+
@excel1.close
|
1267
1029
|
sleep 2
|
1268
1030
|
expect{
|
1269
1031
|
Workbook.unobtrusively(@simple_file, :if_closed => @excel2) do |book|
|
1270
1032
|
book.should be_alive
|
1033
|
+
book.excel.should == @excel2
|
1271
1034
|
end
|
1272
1035
|
}.to_not raise_error
|
1273
1036
|
end
|
@@ -1555,18 +1318,18 @@ describe Workbook do
|
|
1555
1318
|
book.excel.displayalerts.should == :if_visible
|
1556
1319
|
@another_excel = book.excel
|
1557
1320
|
end
|
1558
|
-
Workbook.unobtrusively(@simple_file1, :if_closed => :
|
1559
|
-
book.excel.
|
1321
|
+
Workbook.unobtrusively(@simple_file1, :if_closed => :current) do |book|
|
1322
|
+
book.excel.should_not == @book.excel
|
1560
1323
|
book.excel.should_not == new_excel
|
1324
|
+
book.excel.should == @another_excel
|
1561
1325
|
book.excel.visible.should be false
|
1562
1326
|
book.excel.displayalerts.should == :if_visible
|
1563
|
-
book.excel.should_not == @another_excel
|
1564
1327
|
end
|
1565
1328
|
end
|
1566
1329
|
|
1567
1330
|
it "should reuse Excel" do
|
1568
1331
|
new_excel = Excel.new(:reuse => false)
|
1569
|
-
Workbook.unobtrusively(@simple_file1, :if_closed => :
|
1332
|
+
Workbook.unobtrusively(@simple_file1, :if_closed => :current) do |book|
|
1570
1333
|
book.excel.should == @book.excel
|
1571
1334
|
book.excel.should_not == new_excel
|
1572
1335
|
end
|
@@ -1863,8 +1626,8 @@ describe Workbook do
|
|
1863
1626
|
|
1864
1627
|
it "should open unobtrusively the closed book in the most recent Excel where it was open before" do
|
1865
1628
|
Workbook.unobtrusively(@simple_file1) do |book|
|
1866
|
-
book.excel.
|
1867
|
-
book.excel.
|
1629
|
+
book.excel.should == @book2.excel
|
1630
|
+
book.excel.should_not == @book1.excel
|
1868
1631
|
book.ReadOnly.should == false
|
1869
1632
|
sheet = book.sheet(1)
|
1870
1633
|
cell = sheet[1,1]
|