robust_excel_ole 0.2.0.7 → 0.2.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -47,7 +47,7 @@ Options are the following:
47
47
  [:displayalerts] boolean (default: false). allow display alerts in Excel
48
48
  [:visible] boolean (default: false). make visibe in Excel
49
49
  [:if_unsaved] :raise (default), :accept, :forget, :new_app, :excel
50
- [:if_blocked_other_book] :raise (default), :save, :forget, :new_app
50
+ [:if_blocking_other] :raise (default), :forget, :save_and_close, :close_or_raise, :new_app
51
51
 
52
52
 
53
53
  The option :if_unsaved :
@@ -60,12 +60,13 @@ If an unsaved book with the same name is open, then
60
60
  [:new_app] Open the new book in a new Excel application
61
61
  [:excel] Give control to Excel.
62
62
 
63
- The option :if_blocked_other_book :
64
-
63
+ The option :if_blocking_other :
65
64
  If a book with same name in a different path is open, then
66
65
 
67
66
  [:raise] Raise an exception. Don't open the book.
68
67
  [:forget] Close the old book, open the new book.
68
+ [:save_and_close] Save the old book, close it, open the new book
69
+ [:close_or_raise] Close the old book and open the new book, if the old book is saved, raise an exception otherwise
69
70
  [:new_app] Open the new book in a new Excel application.
70
71
 
71
72
 
@@ -111,7 +112,8 @@ The option :if_exists :
111
112
  If a book with the file name already exists, then
112
113
 
113
114
  [:raise] Raise an exeption. Don't write the file.
114
- [:overwrite] Delete the existing file and write the file. If the book is open in an Excel application, then raise an exeption.
115
+ [:overwrite] Delete the existing file and write the file.
116
+ If the book is open in an Excel application, then raise an exeption.
115
117
  [:excel] Give the control to Excel.
116
118
 
117
119
 
data/examples/example1.rb CHANGED
@@ -6,8 +6,11 @@ module RobustExcelOle
6
6
 
7
7
  ExcelApp.close_all
8
8
  begin
9
- filename = '../spec/data/simple.xls'
10
- book = RobustExcelOle::Book.open(filename)
9
+ simple_file = '../spec/data/simple.xls'
10
+ simple_save_file = '../spec/data/simple_save.xls'
11
+ File.delete @simple_save_file rescue nil
12
+ #FileUtils.copy simple_file, simple_save_file
13
+ book = RobustExcelOle::Book.open(simple_save_file)
11
14
  sheet = book[0]
12
15
  cell = sheet[0,0]
13
16
  i = 0
@@ -0,0 +1,34 @@
1
+ # example 6: open with :if_unsaved => :forget, :new_app, close with :if_unsaved => :save
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
4
+
5
+ module RobustExcelOle
6
+
7
+ ExcelApp.close_all
8
+ begin
9
+ file_name = '../spec/data/simple.xls'
10
+ book = RobustExcelOle::Book.open(file_name) # open a book
11
+ ExcelApp.reuse_if_possible.Visible = true # make Excel visible
12
+ sleep 1
13
+ sheet = book[0] # access a sheet
14
+ first_cell = sheet[0,0].value
15
+ sheet[0,0] = first_cell == "simple" ? "complex" : "simple" # change a cell
16
+ sleep 1
17
+ new_book = RobustExcelOle::Book.open(file_name, :if_unsaved => :forget) # open another book with the same file name
18
+ # and close the unsaved book without saving it
19
+ sheet_new_book = new_book[0]
20
+ if (not book.alive?) && new_book.alive? && sheet_new_book[0,0].value == first_cell then # check whether the unsaved book
21
+ puts "open with :if_unsaved => :forget : the unsaved book is closed and not saved." # is closed and was not saved
22
+ end
23
+ sleep 1
24
+ sheet_new_book[0,0] = sheet_new_book[0,0].value == "simple" ? "complex" : "simple" # change a cell
25
+ # open another book in a new Excel application, and make Excel visible
26
+ another_book = RobustExcelOle::Book.open(file_name, :if_unsaved => :new_app, :visible => true)
27
+ sleep 3 # leaving the unsaved book open
28
+ new_book.close(:if_unsaved => :forget ) # close the unsaved book without saving it
29
+ another_book.close
30
+ ensure
31
+ ExcelApp.close_all # close workbooks, quit Excel application
32
+ end
33
+
34
+ end
@@ -0,0 +1,41 @@
1
+ # example 7: open, close, save with giving control to Excel
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
4
+
5
+ module RobustExcelOle
6
+
7
+ ExcelApp.close_all
8
+ begin
9
+ file_name = '../spec/data/simple.xls'
10
+ book = RobustExcelOle::Book.open(file_name, :visible => true) # open a book
11
+ ExcelApp.reuse_if_possible.Visible = true # make Excel visible
12
+ sleep 1
13
+ sheet = book[0] # access a sheet
14
+ sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
15
+ sleep 1
16
+ begin
17
+ new_book = RobustExcelOle::Book.open(file_name, :if_unsaved => :excel) # open another book with the same file name
18
+ rescue ExcelUserCanceled => msg # if the user chooses not open the book,
19
+ puts "#{msg.message}" # an exeptions is raised
20
+ end
21
+ puts "new book has opened" if new_book
22
+ ExcelApp.reuse_if_possible.Visible = true
23
+ begin
24
+ book.close(:if_unsaved => :excel) # close the unsaved book.
25
+ rescue ExcelUserCanceled => msg # user is asked whether the unsaved book shall be saved
26
+ puts "#{msg.message}" # if the user chooses to cancel, then an expeption is raised
27
+ end
28
+ if new_book then
29
+ begin
30
+ new_book.save_as(file_name, :if_exists => :excel) # save the new book, if it was opened
31
+ rescue ExcelErrorSave => msg # user is asked, whether the existing file shall be overwritten
32
+ puts "save_as: #{msg.message}" # if the user chooses "no" or "cancel", an exception is raised
33
+ end
34
+
35
+ new_book.close # close the new book, if the user chose to open it
36
+ end
37
+ ensure
38
+ ExcelApp.close_all # close workbooks, quit Excel application
39
+ end
40
+
41
+ end
@@ -0,0 +1,32 @@
1
+ # example 8: open with :if_blocking_other:
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
4
+
5
+ module RobustExcelOle
6
+
7
+ ExcelApp.close_all
8
+ begin
9
+ dir = '../spec/data/'
10
+ file_name = dir + 'simple.xls'
11
+ other_dir = '../spec/data/more_data/'
12
+ other_file_name = other_dir + 'simple.xls'
13
+ book = RobustExcelOle::Book.open(file_name, :visible => true) # open a book, make Excel application visible
14
+ sleep 3
15
+ begin
16
+ new_book = RobustExcelOle::Book.open(other_file_name) # open a book with the same file name in a different path
17
+ rescue ExcelErrorOpen => msg # by default: raises an exception
18
+ puts "open: #{msg.message}"
19
+ end
20
+ # open a new book with the same file name in a different path. close the old book before.
21
+ new_book = RobustExcelOle::Book.open(other_file_name, :if_blocking_other => :forget)
22
+ # open another book with the same file name in a different path. Use a new Excel application
23
+ sleep 3
24
+ another_book = RobustExcelOle::Book.open(file_name, :if_blocking_other => :new_app, :visible => true)
25
+ sleep 3
26
+ new_book.close # close the books
27
+ another_book.close
28
+ ensure
29
+ ExcelApp.close_all # close workbooks, quit Excel application
30
+ end
31
+
32
+ end
@@ -0,0 +1,13 @@
1
+ # example 9: save the sheets of a book as separate books
2
+
3
+ require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
4
+
5
+ module RobustExcelOle
6
+
7
+ ExcelApp.close_all
8
+ begin
9
+ ensure
10
+ ExcelApp.close_all # close workbooks, quit Excel application
11
+ end
12
+
13
+ end
@@ -17,14 +17,17 @@ module RobustExcelOle
17
17
  # :displayalerts (boolean) allow display alerts in Excel (default: false)
18
18
  # :visible (boolean) make visibe in Excel (default: false)
19
19
  # :if_unsaved if an unsaved book with the same name is open, then
20
- # :raise -> raise an exception (default)
20
+ # :raise -> raise an exception (default)
21
+ # :forget -> close the unsaved book, open the new book
21
22
  # :accept -> let the unsaved book open
22
- # :forget -> close the unsaved book, open the new book
23
23
  # :excel -> give control to excel
24
24
  # :new_app -> open the new book in a new excel application
25
- # :if_blocked_other_book if a book with the same name in a different path is open, then
25
+ # :if_blocking_other if a book with the same name in a different path is open, then
26
26
  # :raise -> raise an exception (default)
27
- # :forget -> close the unsaved book, open the new book
27
+ # :forget -> close the old book, open the new book
28
+ # :save_and_close -> save the old book, close it, open the new book
29
+ # :close_or_raise -> close the old book and open the new book, if the old book is saved
30
+ # raise an exception otherwise
28
31
  # :new_app -> open the new book in a new excel application
29
32
  def open(file, options={ :reuse => true}, &block)
30
33
  new(file, options, &block)
@@ -37,10 +40,10 @@ module RobustExcelOle
37
40
  :reuse => true,
38
41
  :read_only => false,
39
42
  :if_unsaved => :raise,
40
- :if_blocked_other_book => :raise
43
+ :if_blocking_other => :raise
41
44
  }.merge(opts)
42
45
  excel_app_options = {:reuse => true}.merge(opts).delete_if{|k,v|
43
- k== :read_only || k== :if_unsaved || k == :if_blocked_other_book}
46
+ k== :read_only || k== :if_unsaved || k == :if_blocking_other}
44
47
  if not File.exist?(file)
45
48
  raise ExcelErrorOpen, "file #{file} not found"
46
49
  end
@@ -51,17 +54,26 @@ module RobustExcelOle
51
54
  blocked_by_other_book = (File.basename(file) == File.basename(@workbook.Fullname)) &&
52
55
  (not (absolute_path(file) == @workbook.Fullname))
53
56
  if blocked_by_other_book then
54
- case @options[:if_blocked_other_book]
57
+ case @options[:if_blocking_other]
55
58
  when :raise
56
- raise ExcelErrorOpen, "blocked by an unsaved book with the same name in a different path"
59
+ raise ExcelErrorOpen, "blocked by a book with the same name in a different path"
57
60
  when :forget
58
61
  @workbook.Close
62
+ when :save_and_close
63
+ save unless @workbook.Saved
64
+ @workbook.Close
65
+ when :close_or_raise
66
+ if (not @workbook.Saved) then
67
+ raise ExcelErrorOpen, "book with the same name in a different path is unsaved"
68
+ else
69
+ @workbook.Close
70
+ end
59
71
  when :new_app
60
72
  excel_app_options[:reuse] = false
61
73
  @excel_app = ExcelApp.new(excel_app_options)
62
74
  @workbook = nil
63
75
  else
64
- raise ExcelErrorOpen, ":if_blocked_other_book: invalid option"
76
+ raise ExcelErrorOpen, ":if_blocking_other: invalid option"
65
77
  end
66
78
  else
67
79
  # book open, not saved, not blocked by other book
@@ -70,10 +82,10 @@ module RobustExcelOle
70
82
  case @options[:if_unsaved]
71
83
  when :raise
72
84
  raise ExcelErrorOpen, "book is already open but not saved (#{File.basename(file)})"
73
- when :accept
74
- #nothing
75
85
  when :forget
76
86
  @workbook.Close
87
+ when :accept
88
+ #nothing
77
89
  when :excel
78
90
  old_displayalerts = @excel_app.DisplayAlerts # :nodoc:
79
91
  @excel_app.DisplayAlerts = true # :nodoc:
@@ -1,3 +1,3 @@
1
1
  module RobustExcelOle
2
- VERSION = "0.2.0.7"
2
+ VERSION = "0.2.0.8"
3
3
  end
data/spec/book_spec.rb CHANGED
@@ -255,8 +255,11 @@ describe RobustExcelOle::Book do
255
255
  context "with a book in a different path" do
256
256
 
257
257
  before do
258
- simple_file_other_path = @dir + '/more_data/simple.xls'
259
- @book = RobustExcelOle::Book.open(simple_file_other_path)
258
+ @simple_file_other_path = @dir + '/more_data/simple.xls'
259
+ @book = RobustExcelOle::Book.open(@simple_file_other_path)
260
+ @sheet_count = @book.workbook.Worksheets.Count
261
+ @sheet = @book[0]
262
+ @book.add_sheet(@sheet, :as => 'a_name')
260
263
  end
261
264
 
262
265
  after do
@@ -264,38 +267,62 @@ describe RobustExcelOle::Book do
264
267
  @new_book.close rescue nil
265
268
  end
266
269
 
267
- it "should raise an error, if :if_blocked_other_book is :raise" do
270
+ it "should raise an error, if :if_blocking_other is :raise" do
268
271
  expect {
269
- @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocked_other_book => :raise)
270
- }.to raise_error(ExcelErrorOpen, "blocked by an unsaved book with the same name in a different path")
272
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :raise)
273
+ }.to raise_error(ExcelErrorOpen, "blocked by a book with the same name in a different path")
274
+ end
275
+
276
+ it "should close the other book and open the new book, if :if_blocking_other is :forget" do
277
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :forget)
278
+ @book.should_not be_alive
279
+ @new_book.should be_alive
280
+ @new_book.filename.downcase.should == @simple_file.downcase
281
+ end
282
+
283
+ it "should save the old book, close it, and open the new book, if :if_blocking_other is :save_and_close" do
284
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :save_and_close)
285
+ @book.should_not be_alive
286
+ @new_book.should be_alive
287
+ @new_book.filename.downcase.should == @simple_file.downcase
288
+ new_book = RobustExcelOle::Book.open(@simple_file)
289
+ new_book.workbook.Worksheets.Count.should == @sheet_count
290
+ new_book.close
271
291
  end
272
292
 
273
- it "should close the other book and open the new book, if :if_blocked_other_book is :forget" do
274
- @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocked_other_book => :forget)
293
+ it "should raise an error, if the old book is unsaved, and close the old book and open the new book,
294
+ if :if_blocking_other is :close_or_raise" do
295
+ expect{
296
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :close_or_raise)
297
+ }.to raise_error(ExcelErrorOpen, "book with the same name in a different path is unsaved")
298
+ @book.save
299
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :close_or_raise)
275
300
  @book.should_not be_alive
276
301
  @new_book.should be_alive
277
302
  @new_book.filename.downcase.should == @simple_file.downcase
303
+ new_book = RobustExcelOle::Book.open(@simple_file_other_path, :if_blocking_other => :forget)
304
+ new_book.workbook.Worksheets.Count.should == @sheet_count + 1
305
+ new_book.close
278
306
  end
279
307
 
280
- it "should open the book in a new excel application, if :if_blocked_other_book is :new_app" do
281
- @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocked_other_book => :new_app)
308
+ it "should open the book in a new excel application, if :if_blocking_other is :new_app" do
309
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :new_app)
282
310
  @book.should be_alive
283
311
  @new_book.should be_alive
284
312
  @new_book.filename.should_not == @book.filename
285
313
  @new_book.excel_app.should_not == @book.excel_app
286
- @new_book.close
287
314
  end
288
315
 
289
- it "should raise an error, if :if_blocked_other_book is default" do
316
+ it "should raise an error, if :if_blocking_other is default" do
290
317
  expect {
291
318
  @new_book = RobustExcelOle::Book.open(@simple_file)
292
- }.to raise_error(ExcelErrorOpen, "blocked by an unsaved book with the same name in a different path")
319
+ }.to raise_error(ExcelErrorOpen, "blocked by a book with the same name in a different path")
293
320
  end
294
321
 
295
- it "should raise an error, if :if_blocked_other_book is invalid option" do
322
+ it "should raise an error, if :if_blocking_other is invalid option" do
296
323
  expect {
297
- @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocked_other_book => :invalid_option)
298
- }.to raise_error(ExcelErrorOpen, ":if_blocked_other_book: invalid option")
324
+ @new_book = RobustExcelOle::Book.open(@simple_file, :if_blocking_other => :invalid_option)
325
+ }.to raise_error(ExcelErrorOpen, ":if_blocking_other: invalid option")
299
326
  end
300
327
 
301
328
  end
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
- hash: 81
4
+ hash: 79
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
9
  - 0
10
- - 7
11
- version: 0.2.0.7
10
+ - 8
11
+ version: 0.2.0.8
12
12
  platform: ruby
13
13
  authors:
14
14
  - traths
@@ -137,6 +137,10 @@ files:
137
137
  - examples/example3.rb
138
138
  - examples/example4.rb
139
139
  - examples/example5.rb
140
+ - examples/example6.rb
141
+ - examples/example7.rb
142
+ - examples/example8.rb
143
+ - examples/example9.rb
140
144
  - lib/robust_excel_ole.rb
141
145
  - lib/robust_excel_ole/book.rb
142
146
  - lib/robust_excel_ole/cell.rb