robust_excel_ole 1.10 → 1.11

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.
@@ -180,6 +180,12 @@ module RobustExcelOle
180
180
  RobustExcelOle::Range.new(@ole_worksheet.Range(@ole_worksheet.Cells(integer_range.min, col), @ole_worksheet.Cells(integer_range.max, col)))
181
181
  end
182
182
 
183
+ def == other_worksheet
184
+ other_worksheet.is_a?(Worksheet) &&
185
+ self.workbook == other_worksheet.workbook &&
186
+ self.Name == other_worksheet.Name
187
+ end
188
+
183
189
  # @private
184
190
  def self.workbook_class
185
191
  @workbook_class ||= begin
@@ -54,6 +54,11 @@ describe Bookstore do
54
54
  @simple_file_other_path = @dir + '/more_data/workbook.xls'
55
55
  @simple_file1 = @simple_file
56
56
  @different_file1 = @different_file
57
+
58
+ @file_path = "spec/data/workbook.xls"
59
+ @absolute_file_path = "C:/gim/ats/aSrc/gems/robust_excel_ole/spec/data/workbook.xls"
60
+ @network_path = "N:/data/workbook.xls"
61
+ @hostname_share_path = "DESKTOP-A3C5CJ6/spec/workbook.xls"
57
62
  end
58
63
 
59
64
  after do
@@ -125,11 +130,96 @@ describe Bookstore do
125
130
  end
126
131
  end
127
132
 
128
-
129
133
  end
130
134
 
131
-
132
135
  describe "fetch" do
136
+
137
+ before do
138
+ @file_path = "spec/data/workbook.xls"
139
+ @absolute_file_path = "C:/gim/ats/aSrc/gems/robust_excel_ole/spec/data/workbook.xls"
140
+ @network_path = "N:/data/workbook.xls"
141
+ @hostname_share_path = "//DESKTOP-A3C5CJ6/spec/data/workbook.xls"
142
+ @network_path_not_existing = "M:/data/workbook.xls"
143
+ @hostname_not_existing_share_path = "//DESKTOP_not_existing/spec/data/workbook.xls"
144
+ @hostname_share_not_existing_path = "//DESKTOP-A3C5CJ6/spec_not_existing/data/workbook.xls"
145
+ end
146
+
147
+ context "with stored network and hostname share path" do
148
+
149
+ it "should fetch to a given network path file the stored hostname_share_path file" do
150
+ @book1 = Workbook.open(@hostname_share_path)
151
+ @bookstore.store(@book1)
152
+ new_book = @bookstore.fetch(@network_path)
153
+ new_book.should be_a Workbook
154
+ new_book.should be_alive
155
+ new_book.should == @book1
156
+ end
157
+
158
+ it "should not fetch anything to a not existing network path file" do
159
+ @book1 = Workbook.open(@hostname_share_path)
160
+ @bookstore.store(@book1)
161
+ @bookstore.fetch(@network_path_not_existing).should == nil
162
+ end
163
+
164
+ it "should fetch to a given network path file the stored absolute path file" do
165
+ @book1 = Workbook.open(@absolute_file_path)
166
+ @bookstore.store(@book1)
167
+ new_book = @bookstore.fetch(@network_path)
168
+ new_book.should be_a Workbook
169
+ new_book.should be_alive
170
+ new_book.should == @book1
171
+ end
172
+
173
+ it "should not fetch anything to a not existing network path file the stored absolute path file" do
174
+ @book1 = Workbook.open(@absolute_file_path)
175
+ @bookstore.store(@book1)
176
+ @bookstore.fetch(@network_path_not_existing).should == nil
177
+ end
178
+
179
+ it "should fetch to a given hostname share path file the stored network path file" do
180
+ @book1 = Workbook.open(@network_path)
181
+ @bookstore.store(@book1)
182
+ new_book = @bookstore.fetch(@hostname_share_path)
183
+ new_book.should be_a Workbook
184
+ new_book.should be_alive
185
+ new_book.should == @book1
186
+ end
187
+
188
+ it "should fetch to a given hostname_share_path the stored absolute path file" do
189
+ @book1 = Workbook.open(@absolute_file_path)
190
+ @bookstore.store(@book1)
191
+ new_book = @bookstore.fetch(@hostname_share_path)
192
+ new_book.should be_a Workbook
193
+ new_book.should be_alive
194
+ new_book.should == @book1
195
+ end
196
+
197
+ it "should not fetch anything to a given hostname share path file" do
198
+ @book1 = Workbook.open(@absolute_file_path)
199
+ @bookstore.store(@book1)
200
+ @bookstore.fetch(@hostname_not_existing_share_path).should == nil
201
+ @bookstore.fetch(@hostname_share_not_existing_path).should == nil
202
+ end
203
+
204
+ it "should fetch to a given absolute path file the stored network path file" do
205
+ @book1 = Workbook.open(@network_path)
206
+ @bookstore.store(@book1)
207
+ new_book = @bookstore.fetch(@absolute_file_path)
208
+ new_book.should be_a Workbook
209
+ new_book.should be_alive
210
+ new_book.should == @book1
211
+ end
212
+
213
+ it "should fetch to a given absolute path file the stored hostname share file" do
214
+ @book1 = Workbook.open(@hostname_share_path)
215
+ @bookstore.store(@book1)
216
+ new_book = @bookstore.fetch(@absolute_file_path)
217
+ new_book.should be_a Workbook
218
+ new_book.should be_alive
219
+ new_book.should == @book1
220
+ end
221
+
222
+ end
133
223
 
134
224
  context "with one open book" do
135
225
 
Binary file
data/spec/excel_spec.rb CHANGED
@@ -30,6 +30,80 @@ module RobustExcelOle
30
30
  rm_tmp(@dir)
31
31
  end
32
32
 
33
+ context "with connect and preserving options" do
34
+
35
+ before do
36
+ @ole_excel = WIN32OLE.new('Excel.Application')
37
+ end
38
+
39
+ it "should preserve visible false" do
40
+ @ole_excel.Visible.should be false
41
+ excel = Excel.current
42
+ excel.Hwnd.should == @ole_excel.Hwnd
43
+ excel.Visible.should be false
44
+ end
45
+
46
+ it "should preserve visible true" do
47
+ @ole_excel.Visible = true
48
+ @ole_excel.Visible.should be true
49
+ excel = Excel.current
50
+ excel.Hwnd.should == @ole_excel.Hwnd
51
+ excel.Visible.should be true
52
+ end
53
+
54
+ it "should set visible true" do
55
+ @ole_excel.Visible.should be false
56
+ excel = Excel.current(:visible => true)
57
+ excel.Visible.should be true
58
+ end
59
+
60
+ it "should set visible false" do
61
+ excel = Excel.current(:visible => false)
62
+ excel.Visible.should be false
63
+ end
64
+
65
+ it "should set visible false, even if it was true before" do
66
+ @ole_excel.Visible = true
67
+ @ole_excel.Visible.should be true
68
+ excel = Excel.current(:visible => false)
69
+ excel.Visible.should be false
70
+ end
71
+
72
+ it "should preserve displayalerts true" do
73
+ @ole_excel.DisplayAlerts.should be true
74
+ excel = Excel.current
75
+ excel.Hwnd.should == @ole_excel.Hwnd
76
+ excel.DisplayAlerts.should be true
77
+ end
78
+
79
+ it "should preserve displayalerts false" do
80
+ @ole_excel.DisplayAlerts = false
81
+ @ole_excel.DisplayAlerts.should be false
82
+ excel = Excel.current
83
+ excel.DisplayAlerts.should be false
84
+ end
85
+
86
+ it "should set displayalerts true" do
87
+ @ole_excel.DisplayAlerts.should be true
88
+ excel = Excel.current(:displayalerts => true)
89
+ excel.DisplayAlerts.should be true
90
+ end
91
+
92
+ it "should set displayalerts true, even if false before" do
93
+ @ole_excel.DisplayAlerts = false
94
+ @ole_excel.DisplayAlerts.should be false
95
+ excel = Excel.current(:displayalerts => true)
96
+ excel.DisplayAlerts.should be true
97
+ end
98
+
99
+ it "should set displayalerts false" do
100
+ @ole_excel.DisplayAlerts.should be true
101
+ excel = Excel.current(:displayalerts => false)
102
+ excel.DisplayAlerts.should be false
103
+ end
104
+
105
+ end
106
+
33
107
  context "with already open Excel instances and an open unsaved workbook" do
34
108
 
35
109
  before do
@@ -196,6 +270,13 @@ module RobustExcelOle
196
270
  @excel = @book.excel
197
271
  end
198
272
 
273
+ it "lifts an Excel instance given as WIN32OLE object and has same Hwnd" do
274
+ app = WIN32OLE.new('Excel.Application')
275
+ ole_excel = WIN32OLE.connect("Excel.Application")
276
+ reo_excel = Excel.new(ole_excel)
277
+ ole_excel.Hwnd.should == reo_excel.Hwnd
278
+ end
279
+
199
280
  it "lifts an Excel instance given as WIN32Ole object" do
200
281
  win32ole_excel = WIN32OLE.connect(@book.ole_workbook.Fullname).Application
201
282
  excel = Excel.new(win32ole_excel)
@@ -1726,6 +1807,8 @@ module RobustExcelOle
1726
1807
  @excel.Visible.should be true
1727
1808
  @excel.ScreenUpdating.should be true
1728
1809
  book = Workbook.open(@simple_file)
1810
+ book.excel.calculation = :manual
1811
+ book.save
1729
1812
  @excel.Calculation.should == XlCalculationManual
1730
1813
  book.close
1731
1814
  end
@@ -2043,10 +2126,10 @@ module RobustExcelOle
2043
2126
  it "should raise an error if name cannot be evaluated" do
2044
2127
  expect{
2045
2128
  @excel1.set_namevalue_glob("foo", 1)
2046
- }.to raise_error(NameNotFound, /name "foo"/)
2129
+ }.to raise_error(RangeNotEvaluatable, /cannot assign value to range named "foo"/)
2047
2130
  expect{
2048
2131
  @excel1["foo"] = 1
2049
- }.to raise_error(NameNotFound, /name "foo"/)
2132
+ }.to raise_error(RangeNotEvaluatable, /cannot assign value to range named "foo"/)
2050
2133
  end
2051
2134
 
2052
2135
  it "should color the cell" do
@@ -2110,7 +2193,7 @@ module RobustExcelOle
2110
2193
  it "should raise an error if name cannot be evaluated" do
2111
2194
  expect{
2112
2195
  @excel1.set_namevalue_glob("foo", 1)
2113
- }.to raise_error(NameNotFound, /name "foo" not in/)
2196
+ }.to raise_error(RangeNotEvaluatable, /cannot assign value to range named "foo" in/)
2114
2197
  end
2115
2198
 
2116
2199
  it "should color the cell" do
data/spec/range_spec.rb CHANGED
@@ -313,6 +313,18 @@ describe RobustExcelOle::Range do
313
313
 
314
314
  end
315
315
 
316
+ describe "==" do
317
+
318
+ it "should return true for identical ranges" do
319
+ @sheet.range([1..2,3..4]).should == @sheet.range([1..2,3..4])
320
+ end
321
+
322
+ it "should return false for non-identical ranges" do
323
+ @sheet.range([3..4,1..2]).should_not == @sheet.range([1..2,3..4])
324
+ end
325
+
326
+ end
327
+
316
328
  describe "#method_missing" do
317
329
  it "can access COM method" do
318
330
  @range.Range(@range.Cells.Item(1), @range.Cells.Item(3)).v.should eq [@range.values(0..2)]
@@ -71,6 +71,7 @@ describe Workbook do
71
71
 
72
72
  it "should save a file, if it is open" do
73
73
  @book = Workbook.open(@simple_file)
74
+ @sheet = @book.sheet(1)
74
75
  @book.add_sheet(@sheet, :as => 'a_name')
75
76
  @new_sheet_count = @book.ole_workbook.Worksheets.Count
76
77
  expect {
@@ -82,6 +83,7 @@ describe Workbook do
82
83
 
83
84
  it "should not save a file, if it is not open" do
84
85
  @book = Workbook.open(@simple_file)
86
+ @sheet = @book.sheet(1)
85
87
  @book.add_sheet(@sheet, :as => 'a_name')
86
88
  @new_sheet_count = @book.ole_workbook.Worksheets.Count
87
89
  @book.close(:if_unsaved => :forget)
@@ -446,6 +448,56 @@ describe Workbook do
446
448
  end
447
449
  end
448
450
 
451
+ context "with :if_blocked" do
452
+
453
+ for i in 1..2 do
454
+
455
+ context "with and without reopen" do
456
+
457
+ before do
458
+ if i == 1 then
459
+ book_before = Workbook.open(@simple_file)
460
+ book_before.close
461
+ end
462
+ @book = Workbook.open(@simple_file_other_path1)
463
+ @sheet_count = @book.ole_workbook.Worksheets.Count
464
+ @sheet = @book.sheet(1)
465
+ @book.add_sheet(@sheet, :as => 'a_name')
466
+ end
467
+
468
+ after do
469
+ @book.close(:if_unsaved => :forget)
470
+ @new_book.close rescue nil
471
+ end
472
+
473
+ it "should save the old book, close it, and open the new book, if :if_blocked is :save" do
474
+ @new_book = Workbook.open(@simple_file1, :if_blocked => :save)
475
+ @book.should_not be_alive
476
+ @new_book.should be_alive
477
+ @new_book.filename.downcase.should == @simple_file1.downcase
478
+ old_book = Workbook.open(@simple_file_other_path1, :if_blocked => :forget)
479
+ old_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
480
+ old_book.close
481
+ end
482
+
483
+ it "should raise an error, if the old book is unsaved, and close the old book and open the new book,
484
+ if :if_blocked is :close_if_saved" do
485
+ expect{
486
+ @new_book = Workbook.open(@simple_file1, :if_blocked => :close_if_saved)
487
+ }.to raise_error(WorkbookBlocked, /workbook with the same name in a different path is unsaved/)
488
+ @book.save
489
+ @new_book = Workbook.open(@simple_file1, :if_blocked => :close_if_saved)
490
+ @book.should_not be_alive
491
+ @new_book.should be_alive
492
+ @new_book.filename.downcase.should == @simple_file1.downcase
493
+ old_book = Workbook.open(@simple_file_other_path1, :if_blocked => :forget)
494
+ old_book.ole_workbook.Worksheets.Count.should == @sheet_count + 1
495
+ old_book.close
496
+ end
497
+ end
498
+ end
499
+ end
500
+
449
501
  context "with :if_obstructed" do
450
502
 
451
503
  for i in 1..2 do
@@ -520,8 +572,8 @@ describe Workbook do
520
572
  File.delete @simple_save_file rescue nil
521
573
  expect {
522
574
  Workbook.open(@simple_save_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")
575
+ }.to raise_error(FileNotFound, /not found/ )
576
+ # "\nHint: If you want to create a new file, use option :if_absent => :create or Workbook::create")
525
577
  end
526
578
  end
527
579
 
@@ -618,7 +670,8 @@ describe Workbook do
618
670
 
619
671
  it "should preserve :visible if they are not set" do
620
672
  excel1 = Excel.create(:visible => true)
621
- book1 = Workbook.open(@different_file, :default => {:excel => :new})
673
+ book1 = Workbook.open(@simple_file, :default => {:excel => :new})
674
+ book1.excel.should_not == excel1
622
675
  book1.excel.Visible.should be false
623
676
  end
624
677
 
@@ -25,12 +25,15 @@ describe Workbook do
25
25
  @simple_file_other_path = @dir + '/more_data/workbook.xls'
26
26
  @another_simple_file = @dir + '/another_workbook.xls'
27
27
  @linked_file = @dir + '/workbook_linked.xlsm'
28
- @simple_file_xlsm = @dir + '/workbook.xls'
28
+ @simple_file_xlsm = @dir + '/workbook.xlsm'
29
29
  @simple_file_xlsx = @dir + '/workbook.xlsx'
30
30
  @simple_file1 = @simple_file
31
31
  @different_file1 = @different_file
32
32
  @simple_file_other_path1 = @simple_file_other_path
33
33
  @another_simple_file1 = @another_simple_file
34
+ @simple_file_direct = File.join(File.dirname(__FILE__), 'data') + '/workbook.xls'
35
+ @simple_file_via_network = File.join('N:/', 'data') + '/workbook.xls'
36
+
34
37
  end
35
38
 
36
39
  after do
@@ -38,13 +41,176 @@ describe Workbook do
38
41
  rm_tmp(@dir)
39
42
  end
40
43
 
44
+ describe "connecting to unknown workbooks" do
45
+
46
+ context "with none workbook" do
47
+
48
+ it "should open one new Excel with the worbook" do
49
+ book1 = Workbook.open(@simple_file1)
50
+ book1.should be_alive
51
+ book1.should be_a Workbook
52
+ Excel.excels_number.should == 1
53
+ book1.ReadOnly.should be false
54
+ book1.excel.Visible.should be false
55
+ book1.CheckCompatibility.should be false
56
+ book1.Saved.should be true
57
+ end
58
+
59
+ it "should set the options" do
60
+ book1 = Workbook.open(@simple_file1, :force => {:visible => true}, :check_compatibility => true)
61
+ book1.visible.should be true
62
+ book1.CheckCompatibility.should be true
63
+ end
64
+
65
+ it "should open in the given known Excel" do
66
+ excel1 = Excel.create
67
+ book1 = Workbook.open(@simple_file1)
68
+ book1.should be_alive
69
+ book1.should be_a Workbook
70
+ book1.excel.should == excel1
71
+ Excel.excels_number.should == 1
72
+ book1.excel.Visible.should be false
73
+ end
74
+
75
+ it "should open in the given known visible Excel" do
76
+ excel1 = Excel.create(:visible => true)
77
+ book1 = Workbook.open(@simple_file1)
78
+ book1.should be_alive
79
+ book1.should be_a Workbook
80
+ book1.excel.should == excel1
81
+ Excel.excels_number.should == 1
82
+ book1.excel.Visible.should be true
83
+ end
84
+
85
+ it "should open in the given known Excel" do
86
+ excel1 = Excel.create
87
+ book1 = Workbook.open(@simple_file1, :force => {:excel => :new})
88
+ book1.should be_alive
89
+ book1.should be_a Workbook
90
+ book1.excel.should_not == excel1
91
+ Excel.excels_number.should == 2
92
+ end
93
+
94
+ it "should set the options in a given known Excel" do
95
+ excel1 = Excel.create
96
+ book1 = Workbook.open(@simple_file1, :force => {:visible => true}, :check_compatibility => true)
97
+ book1.visible.should be true
98
+ book1.CheckCompatibility.should be true
99
+ end
100
+
101
+ it "should open the workbook in the given Excel if there are only unknown Excels" do
102
+ ole_excel1 = WIN32OLE.new('Excel.Application')
103
+ book1 = Workbook.open(@simple_file1)
104
+ book1.should be_alive
105
+ book1.should be_a Workbook
106
+ Excel.excels_number.should == 1
107
+ book1.excel.ole_excel.Hwnd.should == ole_excel1.Hwnd
108
+ end
109
+
110
+ end
111
+
112
+ context "with one unknown workbook" do
113
+
114
+ before do
115
+ ole_e1 = WIN32OLE.new('Excel.Application')
116
+ ws = ole_e1.Workbooks
117
+ abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
118
+ @ole_wb = ws.Open(abs_filename)
119
+ end
120
+
121
+ it "should connect to an unknown workbook" do
122
+ Workbook.open(@simple_file1) do |book|
123
+ book.filename.should == @simple_file1
124
+ book.should be_alive
125
+ book.should be_a Workbook
126
+ book.excel.ole_excel.Hwnd.should == @ole_wb.Application.Hwnd
127
+ end
128
+ end
129
+
130
+ it "should raise error when connecting to a blocking workbook with :if_blocked => :raise" do
131
+ expect{
132
+ Workbook.open(@simple_file_other_path1)
133
+ }.to raise_error(WorkbookBlocked, /blocked by/)
134
+ end
135
+
136
+ it "should close the blocking workbook and open the new workbook with :if_blocked => :forget" do
137
+ new_book = Workbook.open(@simple_file_other_path1, :if_blocked => :forget)
138
+ expect{
139
+ @ole_wb.Name
140
+ }.to raise_error
141
+ new_book.should be_alive
142
+ new_book.should be_a Workbook
143
+ new_book.Fullname.should == General.absolute_path(@simple_file_other_path1)
144
+ end
145
+
146
+ it "should let the workbook open, if :if_unsaved is :raise" do
147
+ @ole_wb.Worksheets.Add
148
+ expect{
149
+ new_book = Workbook.open(@simple_file1, :if_unsaved => :raise)
150
+ }.to raise_error(WorkbookNotSaved, /workbook is already open but not saved: "workbook.xls"/)
151
+ end
152
+
153
+ it "should let the workbook open, if :if_unsaved is :accept" do
154
+ @ole_wb.Worksheets.Add
155
+ sheet_num = @ole_wb.Worksheets.Count
156
+ new_book = Workbook.open(@simple_file1, :if_unsaved => :accept)
157
+ new_book.should be_alive
158
+ new_book.should be_a Workbook
159
+ new_book.Worksheets.Count.should == sheet_num
160
+ end
161
+
162
+ it "should close the workbook, if :if_unsaved is :forget" do
163
+ @ole_wb.Worksheets.Add
164
+ sheet_num = @ole_wb.Worksheets.Count
165
+ new_book = Workbook.open(@simple_file1, :if_unsaved => :forget)
166
+ new_book.should be_alive
167
+ new_book.should be_a Workbook
168
+ new_book.Worksheets.Count.should == sheet_num - 1
169
+ end
170
+
171
+ end
172
+
173
+ context "with several unknown workbooks" do
174
+
175
+ before do
176
+ ole_e1 = WIN32OLE.new('Excel.Application')
177
+ ws1 = ole_e1.Workbooks
178
+ abs_filename1 = General.absolute_path(@simple_file1).tr('/','\\')
179
+ @ole_wb1 = ws1.Open(abs_filename1)
180
+ ole_e2 = WIN32OLE.new('Excel.Application')
181
+ ws2 = ole_e2.Workbooks
182
+ abs_filename2 = General.absolute_path(@different_file1).tr('/','\\')
183
+ @ole_wb2 = ws2.Open(abs_filename2)
184
+ end
185
+
186
+ it "should connect to the 1st unknown workbook in the 1st Excel instance" do
187
+ Workbook.open(@simple_file1) do |book|
188
+ book.filename.should == @simple_file1
189
+ book.excel.ole_excel.Hwnd.should == @ole_wb1.Application.Hwnd
190
+ end
191
+ end
192
+
193
+ it "should connect to the 2nd unknown workbook in the 2nd Excel instance" do
194
+ Workbook.open(@different_file1) do |book|
195
+ book.filename.should == @different_file1
196
+ book.excel.ole_excel.Hwnd.should == @ole_wb2.Application.Hwnd
197
+ end
198
+ end
199
+
200
+ end
201
+
202
+
203
+
204
+ end
205
+
41
206
  describe "with already open Excel instances and an open unsaved workbook" do
42
207
 
43
208
  before do
44
209
  @ole_excel1 = WIN32OLE.new('Excel.Application')
45
210
  @ole_excel2 = WIN32OLE.new('Excel.Application')
46
211
  #@ole_workbook1 = @ole_excel1.Workbooks.Open(@simple_file1, { 'ReadOnly' => false })
47
- @ole_workbook1 = @ole_excel1.Workbooks.Open(@simple_file1, nil, false)
212
+ abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
213
+ @ole_workbook1 = @ole_excel1.Workbooks.Open(abs_filename, nil, false)
48
214
  @ole_workbook1.Worksheets.Add
49
215
  end
50
216
 
@@ -65,7 +231,7 @@ describe Workbook do
65
231
  end
66
232
 
67
233
  it "should fetch the workbook" do
68
- new_book = Workbook.new(@ole_workbook1)
234
+ new_book = Workbook.new(@ole_workbook1, :if_unsaved => :forget)
69
235
  new_book.should be_a Workbook
70
236
  new_book.should be_alive
71
237
  new_book.ole_workbook.should == @ole_workbook1
@@ -146,16 +312,16 @@ describe Workbook do
146
312
  end
147
313
  end
148
314
 
149
- context "with :if_obstructed" do
315
+ context "with :if_blocked" do
150
316
 
151
- it "should raise an error, if :if_obstructed is :raise" do
317
+ it "should raise an error, if :if_blocked is :raise" do
152
318
  expect {
153
319
  new_book = Workbook.open(@simple_file_other_path1)
154
- }.to raise_error(WorkbookBlocked, /blocked by a workbook with the same name in a different path/)
320
+ }.to raise_error(WorkbookBlocked, /blocked by/)
155
321
  end
156
322
 
157
- it "should close the other book and open the new book, if :if_obstructed is :forget" do
158
- new_book = Workbook.open(@simple_file_other_path1, :if_obstructed => :forget)
323
+ it "should close the other book and open the new book, if :if_blocked is :forget" do
324
+ new_book = Workbook.open(@simple_file_other_path1, :if_blocked => :forget)
159
325
  expect{
160
326
  @ole_workbook1.Name
161
327
  }.to raise_error
@@ -186,20 +352,81 @@ describe Workbook do
186
352
 
187
353
  end
188
354
 
355
+ describe "network paths" do
356
+
357
+ it "should open the workbokk via network path" do
358
+ book1 = Workbook.open(@simple_file)
359
+ expect{
360
+ book2 = Workbook.open(@simple_file_via_network)
361
+ }.to_not raise_error
362
+ book1.should === book2
363
+ book1.Fullname.should == book2.Fullname
364
+ end
365
+
366
+ end
367
+
189
368
  describe "new" do
190
369
 
191
- it "should simply create a new one" do
370
+ context "with transparency identity" do
371
+
372
+ before do
373
+ @book = Workbook.open(@simple_file1)
374
+ abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
375
+ @ole_book = WIN32OLE.connect(abs_filename)
376
+ end
377
+
378
+ after do
379
+ @book.close
380
+ end
381
+
382
+ it "should yield identical Workbook objects for identical Excel books after uplifting" do
383
+ book2 = Workbook.new(@ole_book)
384
+ book2.should === @book
385
+ book2.close
386
+ end
387
+
388
+ it "should yield different Workbook objects for different Excel books" do
389
+ book3 = Workbook.open(@different_file1)
390
+ abs_filename2 = General.absolute_path(@different_file1).tr('/','\\')
391
+ ole_book2 = WIN32OLE.connect(abs_filename2)
392
+ book2 = Workbook.new(ole_book2)
393
+ book2.should_not === @book
394
+ book2.close
395
+ book3.close
396
+ end
397
+
398
+ end
399
+
400
+ it "should simply create a new workbook given a file" do
192
401
  book = Workbook.new(@simple_file)
193
402
  book.should be_alive
194
403
  book.should be_a Workbook
195
404
  end
196
405
 
197
- it "should set options" do
198
- book = Workbook.new(@simple_file, :visible => true, :read_only => true, :force => {:excel => :new})
406
+ it "should create a new workbook given a file and set it visible" do
407
+ book = Workbook.new(@simple_file, :visible => true)
199
408
  book.should be_alive
200
409
  book.should be_a Workbook
201
410
  book.excel.Visible.should be true
202
411
  book.Windows(book.Name).Visible.should be true
412
+ end
413
+
414
+ it "should create a new workbook given a file and set it visible and readonly" do
415
+ book = Workbook.new(@simple_file, :visible => true, :read_only => true)
416
+ book.should be_alive
417
+ book.should be_a Workbook
418
+ book.excel.Visible.should be true
419
+ book.Windows(book.Name).Visible.should be true
420
+ book.ReadOnly.should be true
421
+ end
422
+
423
+ it "should create a new workbook given a file and set options" do
424
+ book = Workbook.new(@simple_file, :visible => true, :read_only => true, :force => {:excel => :new})
425
+ book.should be_alive
426
+ book.should be_a Workbook
427
+ book.excel.Visible.should be true
428
+ book.Windows(book.Name).
429
+ Visible.should be true
203
430
  book.ReadOnly.should be true
204
431
  book2 = Workbook.new(@different_file, :force => {:excel => :new}, :v => true)
205
432
  book2.should be_alive
@@ -210,6 +437,83 @@ describe Workbook do
210
437
  book2.excel.should_not == book.excel
211
438
  end
212
439
 
440
+ it "should uplift an open known workbook" do
441
+ book = Workbook.open(@simple_file)
442
+ ole_workbook = book.ole_workbook
443
+ new_book = Workbook.new(ole_workbook)
444
+ new_book.should == book
445
+ new_book.Fullname.should == book.Fullname
446
+ new_book.excel.should == book.excel
447
+ end
448
+
449
+ it "should uplift an open known workbook and let it be visible" do
450
+ book = Workbook.open(@simple_file, :visible => true)
451
+ ole_workbook = book.ole_workbook
452
+ new_book = Workbook.new(ole_workbook)
453
+ new_book.should == book
454
+ new_book.Fullname.should == book.Fullname
455
+ new_book.excel.should == book.excel
456
+ new_book.excel.Visible.should == true
457
+ new_book.Windows(new_book.ole_workbook.Name).Visible.should == true
458
+ end
459
+
460
+ it "should uplift an open known workbook and let it be visible and readonly" do
461
+ book = Workbook.open(@simple_file, :visible => true, :read_only => true)
462
+ ole_workbook = book.ole_workbook
463
+ new_book = Workbook.new(ole_workbook)
464
+ new_book.should == book
465
+ new_book.Fullname.should == book.Fullname
466
+ new_book.excel.should == book.excel
467
+ new_book.excel.Visible.should == true
468
+ new_book.Windows(new_book.ole_workbook.Name).Visible.should == true
469
+ new_book.ReadOnly.should == true
470
+ end
471
+
472
+ it "should uplift an open known workbook and make it visible" do
473
+ book = Workbook.open(@simple_file)
474
+ ole_workbook = book.ole_workbook
475
+ new_book = Workbook.new(ole_workbook, :visible => true)
476
+ new_book.should == book
477
+ new_book.Fullname.should == book.Fullname
478
+ new_book.excel.should == book.excel
479
+ new_book.excel.Visible.should == true
480
+ new_book.Windows(new_book.ole_workbook.Name).Visible.should == true
481
+ end
482
+
483
+ it "should uplift an open unknown workbook" do
484
+ ole_excel = WIN32OLE.new('Excel.Application')
485
+ ws = ole_excel.Workbooks
486
+ abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
487
+ ole_workbook = ws.Open(abs_filename)
488
+ new_book = Workbook.new(ole_workbook)
489
+ new_book.Fullname.should == ole_workbook.Fullname
490
+ new_book.excel.Hwnd.should == ole_excel.Hwnd
491
+ end
492
+
493
+ it "should uplift an open unknown workbook and make it visible" do
494
+ ole_excel = WIN32OLE.new('Excel.Application')
495
+ ws = ole_excel.Workbooks
496
+ abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
497
+ ole_workbook = ws.Open(abs_filename)
498
+ new_book = Workbook.new(ole_workbook, :visible => true)
499
+ new_book.Fullname.should == ole_workbook.Fullname
500
+ new_book.excel.Hwnd.should == ole_excel.Hwnd
501
+ new_book.excel.Visible.should == true
502
+ new_book.Windows(new_book.ole_workbook.Name).Visible.should == true
503
+ end
504
+
505
+ it "should uplift an open unknown workbook and make it visible and readonly" do
506
+ ole_excel = WIN32OLE.new('Excel.Application')
507
+ ws = ole_excel.Workbooks
508
+ abs_filename = General.absolute_path(@simple_file1).tr('/','\\')
509
+ ole_workbook = ws.Open(abs_filename)
510
+ new_book = Workbook.new(ole_workbook, :visible => true)
511
+ new_book.Fullname.should == ole_workbook.Fullname
512
+ new_book.excel.Hwnd.should == ole_excel.Hwnd
513
+ new_book.excel.Visible.should == true
514
+ new_book.Windows(new_book.ole_workbook.Name).Visible.should == true
515
+ end
516
+
213
517
  end
214
518
 
215
519
  describe "open" do
@@ -545,48 +849,6 @@ describe Workbook do
545
849
  @book.close rescue nil
546
850
  end
547
851
 
548
- it "should open not in the reserved Excel instance" do
549
- Excel.kill_all
550
- sleep 1
551
- book2 = Workbook.open(@simple_file1, :force => {:excel => :reserved_new})
552
- Excel.current.should_not == book2.excel
553
- book3 = Workbook.open(@different_file1, :default => {:excel => :current})
554
- book3.excel.should_not == book2.excel
555
- book4 = Workbook.open(@another_simple_file1, :default => {:excel => :new})
556
- book4.excel.should_not == book2.excel
557
- book4.close
558
- sleep 1
559
- book5 = Workbook.open(@another_simple_file1, :default => {:excel => :reserved_new})
560
- book5.excel.should_not == book2.excel
561
- end
562
-
563
- it "should open in the reserved Excel instance" do
564
- excel1 = @book.excel
565
- @book.close
566
- book2 = Workbook.open(@simple_file1, :force => {:excel => :reserved_new})
567
- book2.excel.should_not == excel1
568
- end
569
-
570
- it "should open in the reserved Excel instance" do
571
- book2 = Workbook.open(@simple_file1, :force => {:excel => :reserved_new})
572
- book3 = Workbook.open(@different_file1, :force => {:excel => :reserved_new})
573
- book4 = Workbook.open(@another_simple_file1, :force => {:excel => :new})
574
- book5 = Workbook.open(@another_simple_file1, :force => {:excel => :current})
575
- book2.excel.should_not == @book.excel
576
- book3.excel.should_not == book2.excel
577
- book4.excel.should_not == @book.excel
578
- book4.excel.should_not == book2.excel
579
- book5.excel.should == @book.excel
580
- end
581
-
582
- it "should open in the reserved Excel instance" do
583
- book2 = Workbook.open(@another_simple_file1, :force => {:excel => :new})
584
- book3 = Workbook.open(@different_file1, :force => {:excel => :reserved_new})
585
- book2.excel.should_not == @book.excel
586
- book3.excel.should_not == @book.excel
587
- book3.excel.should_not == book2.excel
588
- end
589
-
590
852
  it "should open in a given Excel provided as Excel, Workbook, or WIN32OLE representing an Excel or Workbook" do
591
853
  book2 = Workbook.open(@another_simple_file)
592
854
  book3 = Workbook.open(@different_file)
@@ -1057,112 +1319,6 @@ describe Workbook do
1057
1319
  @book.close rescue nil
1058
1320
  end
1059
1321
 
1060
- context "with :default => {:excel => :reserved_new}" do
1061
-
1062
- it "should open in the reserved Excel instance" do
1063
- book3 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1064
- book3.excel.should_not == @book.excel
1065
- end
1066
-
1067
- it "should open in separate Excel instances" do
1068
- Excel.kill_all
1069
- sleep 1
1070
- book2 = Workbook.open(@simple_file1, :default => {:excel => :reserved_new})
1071
- book3 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1072
- book2.excel.should_not == book3.excel
1073
- book4 = Workbook.open(@another_simple_file1, :default => {:excel => :current})
1074
- book4.excel.should_not == book2.excel
1075
- book4.excel.should_not == book3.excel
1076
- end
1077
-
1078
- it "should use the open book" do
1079
- book2 = Workbook.open(@simple_file1, :default => {:excel => :reserved_new})
1080
- book2.excel.should == @book.excel
1081
- book2.should be_alive
1082
- book2.should be_a Workbook
1083
- book2.should == @book
1084
- book2.close
1085
- end
1086
-
1087
- it "should open in the old Excel instance" do
1088
- @book.close
1089
- book2 = Workbook.open(@simple_file1, :default => {:excel => :reserved_new})
1090
- book2.should be_alive
1091
- book2.should be_a Workbook
1092
- book2.should == @book
1093
- book2.excel.should == @book.excel
1094
- end
1095
-
1096
- it "should open one book in the reserved Excel instance" do
1097
- book3 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1098
- @book.close
1099
- book2 = Workbook.open(@simple_file1, :default => {:excel => :reserved_new})
1100
- book2.excel.should_not == book3.excel
1101
- end
1102
-
1103
- it "should not use the reserved Excel instance" do
1104
- book3 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1105
- @book.close
1106
- book2 = Workbook.open(@simple_file1, :default => {:excel => :new})
1107
- book2.excel.should_not == book3.excel
1108
- end
1109
-
1110
- it "should not reopen in the reserved Excel instance" do
1111
- book3 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1112
- @book.close
1113
- @book.reopen
1114
- @book.excel.should_not == book3.excel
1115
- end
1116
-
1117
- it "should reopen in the reserved Excel instance" do
1118
- book3 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1119
- @book.close
1120
- book3.close
1121
- @book.reopen
1122
- book3.reopen
1123
- @book.excel.should_not == book3.excel
1124
- end
1125
-
1126
- it "should not reopen in the reserved Excel instance when opened the reserved Excel instance first" do
1127
- Excel.kill_all
1128
- sleep 1
1129
- book1 = Workbook.open(@simple_file1, :default => {:excel => :reserved_new})
1130
- book2 = Workbook.open(@different_file1, :default => {:excel => :new})
1131
- book2.excel.should_not == book1.excel
1132
- book3 = Workbook.open(@another_simple_file1, :default => {:excel => :current})
1133
- book3.excel.should_not == book1.excel
1134
- book2.close
1135
- book2.reopen
1136
- book2.excel.should_not == book1.excel
1137
- book3.close
1138
- book3.reopen
1139
- book3.excel.should_not == book1.excel
1140
- book1.close
1141
- book1.reopen
1142
- book1.excel.should_not == book2.excel
1143
- book1.excel.should_not == book3.excel
1144
- end
1145
-
1146
- it "should open several workbooks in the reserved Excel instance" do
1147
- book2 = Workbook.open(@different_file1, :default => {:excel => :reserved_new})
1148
- book3 = Workbook.open(@another_simple_file1, :default => {:excel => :reserved_new})
1149
- book2.excel.should_not == @book.excel
1150
- book3.excel.should_not == @book.excel
1151
- book2.excel.should_not == book3.excel
1152
- end
1153
-
1154
- it "should open several workbooks in the reserved Excel instance" do
1155
- Excel.kill_all
1156
- book1 = Workbook.open(@simple_file1, :default => {:excel => :reserved_new})
1157
- book2 = Workbook.open(@different_file1, :default => {:excel => :current})
1158
- book3 = Workbook.open(@another_simple_file1, :default => {:excel => :current})
1159
- book2.excel.should_not == book1.excel
1160
- book3.excel.should_not == book1.excel
1161
- book2.excel.should == book3.excel
1162
- end
1163
-
1164
- end
1165
-
1166
1322
  context "with :default => {:excel => :current}" do
1167
1323
 
1168
1324
  it "should use the open book" do
@@ -1753,7 +1909,7 @@ describe Workbook do
1753
1909
 
1754
1910
  it "should new_excel" do
1755
1911
  book = Workbook.open(@simple_file1)
1756
- book.sheet(1)[1,1].Value = "f"
1912
+ book.sheet(1)[1,1].Value = "foo"
1757
1913
  book.Saved.should be false
1758
1914
  book2 = Workbook.open(@simple_file1, :if_unsaved => :new_excel)
1759
1915
  end
@@ -1872,7 +2028,7 @@ describe Workbook do
1872
2028
  it "should raise an error, if :if_obstructed is :raise" do
1873
2029
  expect {
1874
2030
  new_book = Workbook.open(@simple_file1, :if_obstructed => :raise)
1875
- }.to raise_error(WorkbookBlocked, /blocked by a workbook with the same name in a different path/)
2031
+ }.to raise_error(WorkbookBlocked, /blocked by/)
1876
2032
  end
1877
2033
 
1878
2034
  it "should close the other book and open the new book, if :if_obstructed is :forget" do
@@ -1925,22 +2081,23 @@ describe Workbook do
1925
2081
  new_book.should be_alive
1926
2082
  new_book.filename.should_not == @book.filename
1927
2083
  new_book.excel.should_not == @book.excel
1928
- new_book.sheet(1)[1,1].Value.should == @old_value
2084
+ new_book.sheet(1)[1,1].Value.should == @book.sheet(1)[1,1].Value
1929
2085
  end
1930
2086
 
1931
2087
  it "should raise an error, if :if_obstructed is default" do
1932
2088
  expect {
1933
2089
  new_book = Workbook.open(@simple_file1)
1934
- }.to raise_error(WorkbookBlocked, /blocked by a workbook with the same name in a different path/)
2090
+ }.to raise_error(WorkbookBlocked, /blocked by/)
1935
2091
  end
1936
2092
 
1937
2093
  it "should raise an error, if :if_obstructed is invalid option" do
1938
2094
  expect {
1939
2095
  new_book = Workbook.open(@simple_file1, :if_obstructed => :invalid_option)
1940
- }.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid_option" +
1941
- "\nHint: Use the option :if_obstructed with values :forget or :save,
1942
- to close the old workbook, without or with saving before, respectively,
1943
- and to open the new workbook")
2096
+ }.to raise_error(OptionInvalid)
2097
+ #}.to raise_error(OptionInvalid, ":if_obstructed: invalid option: :invalid_option" +
2098
+ # "\nHint: Use the option :if_obstructed with values :forget or :save,
2099
+ # to close the old workbook, without or with saving before, respectively,
2100
+ # and to open the new workbook")
1944
2101
  end
1945
2102
  end
1946
2103
  end
@@ -2012,7 +2169,8 @@ describe Workbook do
2012
2169
  File.delete @simple_save_file rescue nil
2013
2170
  expect {
2014
2171
  Workbook.open(@simple_save_file)
2015
- }.to raise_error(FileNotFound, "file #{General::absolute_path(@simple_save_file).gsub("/","\\").inspect} not found")
2172
+ }.to raise_error(FileNotFound, "file #{General::absolute_path(@simple_save_file).gsub("/","\\").inspect} not found" +
2173
+ "\nHint: If you want to create a new file, use option :if_absent => :create or Workbook::create")
2016
2174
  end
2017
2175
 
2018
2176
  end
@@ -2175,15 +2333,16 @@ describe Workbook do
2175
2333
  book.close
2176
2334
  end
2177
2335
 
2178
- #it "should open xlsm file" do
2179
- # book = Workbook.open(@simple_file_xlsm, :visible => true)
2180
- # book.close
2181
- #end
2336
+ it "should open xlsm file" do
2337
+ book = Workbook.open(@simple_file_xlsm, :visible => true)
2338
+ book.close
2339
+ end
2182
2340
 
2183
2341
  it "should open xlsx file" do
2184
2342
  book = Workbook.open(@simple_file_xlsx, :visible => true)
2185
2343
  book.close
2186
2344
  end
2345
+
2187
2346
  end
2188
2347
 
2189
2348
 
@@ -2230,27 +2389,5 @@ describe Workbook do
2230
2389
  @book.should === book1
2231
2390
  end
2232
2391
  end
2233
- end
2234
-
2235
- describe "uplifting" do
2236
-
2237
- context "with standard" do
2238
-
2239
- before do
2240
- @book = Workbook.open(@simple_file)
2241
- end
2242
-
2243
- after do
2244
- @book.close
2245
- end
2246
-
2247
- it "should uplift a workbook to a book with an open book" do
2248
- workbook = @book.ole_workbook
2249
- book1 = Workbook.new(workbook)
2250
- book1.should be_a Workbook
2251
- book1.should be_alive
2252
- book1.should == @book
2253
- end
2254
- end
2255
- end
2392
+ end
2256
2393
  end