robust_excel_ole 0.2.0.8 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +47 -61
- data/examples/open_save_close/example_control_to_excel.rb +40 -0
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +33 -0
- data/examples/open_save_close/example_if_obstructed_forget.rb +30 -0
- data/examples/open_save_close/example_if_obstructed_save.rb +31 -0
- data/examples/open_save_close/example_if_unsaved_accept.rb +38 -0
- data/examples/open_save_close/example_if_unsaved_forget.rb +34 -0
- data/examples/open_save_close/example_read_only.rb +27 -0
- data/examples/open_save_close/example_reuse.rb +31 -0
- data/examples/open_save_close/example_simple.rb +30 -0
- data/examples/print_cells/example_print_cells.rb +43 -0
- data/examples/save_sheets/example_save_sheets.rb +30 -0
- data/lib/robust_excel_ole/book.rb +36 -27
- data/lib/robust_excel_ole/excel_app.rb +7 -7
- data/lib/robust_excel_ole/version.rb +1 -1
- data/robust_excel_ole.gemspec +1 -0
- data/spec/book_spec.rb +46 -23
- data/spec/data/book_with_blank.xls +0 -0
- data/spec/data/different_simple.xls +0 -0
- data/spec/data/simple.xls +0 -0
- data/spec/excel_app_spec.rb +24 -12
- data/version.rb +1 -5
- metadata +20 -18
- data/examples/example1.rb +0 -38
- data/examples/example2.rb +0 -33
- data/examples/example3.rb +0 -32
- data/examples/example4.rb +0 -29
- data/examples/example5.rb +0 -35
- data/examples/example6.rb +0 -34
- data/examples/example7.rb +0 -41
- data/examples/example8.rb +0 -32
- data/examples/example9.rb +0 -13
- data/lib/robust_excel_ole/sp +0 -3
data/README.rdoc
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
= RobustExcelOle
|
2
2
|
|
3
|
-
robust_excel_ole wraps the win32ole, and
|
3
|
+
robust_excel_ole wraps the win32ole library, and allows to perform various operations in Excel with ruby.
|
4
4
|
|
5
5
|
== Description
|
6
6
|
|
7
7
|
robust_excel_ole started as a simple fork from tomiacannondale's wrap_excel adapted to Ruby 1.8.6.
|
8
8
|
The functionality of wrap_excel is optimised and extended by new features.
|
9
|
+
Most noticable extension is that books are opened in a Excel application if it is already running, instead of opening Excel whenever a book is opened.
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
Notice some features in robust_excel_ole that are not compatible with wrap_excel:
|
13
|
-
* +save_as+ instead of +save+.
|
11
|
+
Thus some features in robust_excel_ole that are not compatible with wrap_excel:
|
14
12
|
* +open+ uses by default a running Excel application instead of creating a new one,
|
15
13
|
and opens a book by default in writable mode instead of read_only
|
16
14
|
* +close+ closes the workbook instead of closing all workbooks and the Excel application.
|
15
|
+
* +save_as+ instead of +save+.
|
16
|
+
|
17
|
+
This is work in progress.
|
17
18
|
|
18
19
|
== Requirements
|
19
20
|
|
20
|
-
* Ruby 1.
|
21
|
-
* also works with Ruby 1.8.6
|
21
|
+
* Ruby 1.8.6 or higher
|
22
22
|
|
23
23
|
== Install
|
24
24
|
|
@@ -42,13 +42,12 @@ The semantics is similar to, e.g., File.open.
|
|
42
42
|
|
43
43
|
Options are the following:
|
44
44
|
|
45
|
-
[:reuse]
|
46
|
-
[:read_only]
|
47
|
-
[:displayalerts] boolean (default: false). allow display alerts in Excel
|
48
|
-
[:visible] boolean (default: false). make visibe in Excel
|
45
|
+
[:reuse] use an already open Excel-application (default: true)
|
46
|
+
[:read_only] open in read-only mode (default: false)
|
49
47
|
[:if_unsaved] :raise (default), :accept, :forget, :new_app, :excel
|
50
|
-
[:
|
51
|
-
|
48
|
+
[:if_obstructed] :raise (default), :forget, :save, :close_if_unsaved, :new_app
|
49
|
+
[:displayalerts] allow display alerts in Excel (default: false)
|
50
|
+
[:visible] make visibe in Excel (default: false)
|
52
51
|
|
53
52
|
The option :if_unsaved :
|
54
53
|
|
@@ -60,15 +59,17 @@ If an unsaved book with the same name is open, then
|
|
60
59
|
[:new_app] Open the new book in a new Excel application
|
61
60
|
[:excel] Give control to Excel.
|
62
61
|
|
63
|
-
The option :
|
62
|
+
The option :if_obstructed :
|
63
|
+
|
64
64
|
If a book with same name in a different path is open, then
|
65
65
|
|
66
66
|
[:raise] Raise an exception. Don't open the book.
|
67
67
|
[:forget] Close the old book, open the new book.
|
68
|
-
[:
|
69
|
-
[:
|
68
|
+
[:save] Save the old book, close it, open the new book
|
69
|
+
[:close_if_saved] Close the old book and open the new book, if the old book is saved, raise an exception otherwise
|
70
70
|
[:new_app] Open the new book in a new Excel application.
|
71
71
|
|
72
|
+
The values :displayalerts and :visible are reached to the class ExcelApp that controls opening and closing of Excel applications.
|
72
73
|
|
73
74
|
Examples:
|
74
75
|
|
@@ -93,6 +94,34 @@ Let the unsaved book open, when opening a book and a book with the same name is
|
|
93
94
|
|
94
95
|
new_book = RobustExcelOle::Book.open('./sample.xls', :if_unsaved => accept)
|
95
96
|
|
97
|
+
=== Close a book.
|
98
|
+
|
99
|
+
Example:
|
100
|
+
|
101
|
+
book.close
|
102
|
+
|
103
|
+
Options are the following:
|
104
|
+
|
105
|
+
[:if_unsaved] :raise (default), :save, :forget, :excel
|
106
|
+
if the book is unsaved
|
107
|
+
|
108
|
+
:raise
|
109
|
+
|
110
|
+
Raise an exception. Don't close the book.
|
111
|
+
|
112
|
+
:save
|
113
|
+
|
114
|
+
Save the book before closing it.
|
115
|
+
|
116
|
+
:forget
|
117
|
+
|
118
|
+
Close the book.
|
119
|
+
|
120
|
+
:excel
|
121
|
+
|
122
|
+
Give control to Excel.
|
123
|
+
|
124
|
+
|
96
125
|
=== Save a book.
|
97
126
|
|
98
127
|
Simple save:
|
@@ -123,60 +152,17 @@ Overwrite a book with the same name.
|
|
123
152
|
|
124
153
|
book.save('./another_sample.xls', :if_exists => :overwrite)
|
125
154
|
|
126
|
-
=== ==
|
155
|
+
=== ==
|
127
156
|
|
128
157
|
Check whether two referenced Excel workbooks are identical.
|
129
158
|
|
130
|
-
Example.
|
131
|
-
|
132
|
-
if (book == new_book) then
|
133
|
-
puts "the workbooks are identical"
|
134
|
-
end
|
135
|
-
|
136
159
|
=== alive?
|
137
160
|
|
138
161
|
Check whether the referenced Excel workbook responds to methods.
|
139
162
|
|
140
|
-
Example:
|
141
|
-
|
142
|
-
if book.alive? then
|
143
|
-
puts "the book is alive"
|
144
|
-
end
|
145
|
-
|
146
163
|
=== filename
|
147
164
|
|
148
|
-
|
149
|
-
|
150
|
-
Example:
|
151
|
-
|
152
|
-
book.filename
|
153
|
-
|
154
|
-
=== Close a book.
|
155
|
-
|
156
|
-
Example:
|
157
|
-
|
158
|
-
book.close
|
159
|
-
|
160
|
-
Options are the following:
|
161
|
-
|
162
|
-
[:if_unsaved] :raise (default), :save, :forget, :excel
|
163
|
-
if the book is unsaved
|
164
|
-
|
165
|
-
:raise
|
166
|
-
|
167
|
-
Raise an exception. Don't close the book.
|
168
|
-
|
169
|
-
:save
|
170
|
-
|
171
|
-
Save the book before closing it.
|
172
|
-
|
173
|
-
:forget
|
174
|
-
|
175
|
-
Close the book.
|
176
|
-
|
177
|
-
:excel
|
178
|
-
|
179
|
-
Give control to Excel.
|
165
|
+
Return the file name of the book with the absolute path that contains slash (/) instead of back slash (\)
|
180
166
|
|
181
167
|
|
182
168
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# example_gibe_control_to_excel.rb: open, close, save with giving control to Excel
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
+
|
5
|
+
include RobustExcelOle
|
6
|
+
|
7
|
+
ExcelApp.close_all
|
8
|
+
begin
|
9
|
+
dir = 'c:/'
|
10
|
+
file_name = dir + 'simple.xls'
|
11
|
+
book = Book.open(file_name) # open a book
|
12
|
+
ExcelApp.reuse.Visible = true # make Excel visible
|
13
|
+
sleep 1
|
14
|
+
sheet = book[0] # access a sheet
|
15
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
|
16
|
+
sleep 1
|
17
|
+
begin
|
18
|
+
new_book = Book.open(file_name, :if_unsaved => :excel) # open another book with the same file name
|
19
|
+
rescue ExcelUserCanceled => msg # if the user chooses not open the book,
|
20
|
+
puts "#{msg.message}" # an exeptions is raised
|
21
|
+
end
|
22
|
+
puts "new book has opened" if new_book
|
23
|
+
ExcelApp.reuse.Visible = true
|
24
|
+
begin
|
25
|
+
book.close(:if_unsaved => :excel) # close the unsaved book.
|
26
|
+
rescue ExcelUserCanceled => msg # user is asked whether the unsaved book shall be saved
|
27
|
+
puts "#{msg.message}" # if the user chooses to cancel, then an expeption is raised
|
28
|
+
end
|
29
|
+
if new_book then
|
30
|
+
begin
|
31
|
+
new_book.save_as(file_name, :if_exists => :excel) # save the new book, if it was opened
|
32
|
+
rescue ExcelErrorSave => msg # user is asked, whether the existing file shall be overwritten
|
33
|
+
puts "save_as: #{msg.message}" # if the user chooses "no" or "cancel", an exception is raised
|
34
|
+
end
|
35
|
+
|
36
|
+
new_book.close # close the new book, if the user chose to open it
|
37
|
+
end
|
38
|
+
ensure
|
39
|
+
ExcelApp.close_all # close ALL workbooks, quit Excel application
|
40
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# example 10: open with :if_obstructed: :close_if_saved
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
+
|
5
|
+
include RobustExcelOle
|
6
|
+
|
7
|
+
ExcelApp.close_all
|
8
|
+
begin
|
9
|
+
dir = 'C:/'
|
10
|
+
file_name = dir + 'simple.xls'
|
11
|
+
other_dir = 'C:/more_data/'
|
12
|
+
other_file_name = other_dir + 'simple.xls'
|
13
|
+
book = Book.open(file_name, :visible => true) # open a book, make Excel visible
|
14
|
+
sleep 1
|
15
|
+
sheet = book[0]
|
16
|
+
first_cell = sheet[0,0].value # access a sheet
|
17
|
+
sheet[0,0] = first_cell == "simple" ? "complex" : "simple" # change a cell
|
18
|
+
sleep 1
|
19
|
+
begin
|
20
|
+
new_book = Book.open(other_file_name, :if_obstructed => :close_if_saved) # raises an exception since the file is not saved
|
21
|
+
rescue ExcelErrorOpen => msg
|
22
|
+
puts "open: #{msg.message}"
|
23
|
+
end
|
24
|
+
book.save # save the unsaved book
|
25
|
+
new_book = Book.open(file_name, :if_obstructed => :close_if_saved) # open the new book, close the saved book
|
26
|
+
sleep 1
|
27
|
+
new_sheet = new_book[0]
|
28
|
+
new_first_cell = new_sheet[0,0].value
|
29
|
+
puts "the old book was saved" unless new_first_cell == first_cell
|
30
|
+
new_book.close # close the books
|
31
|
+
ensure
|
32
|
+
ExcelApp.close_all # close all workbooks, quit Excel application
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# example_if_obstructed_forget.rb: open with :if_obstructed: :forget, :new_app
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
+
|
5
|
+
include RobustExcelOle
|
6
|
+
|
7
|
+
ExcelApp.close_all
|
8
|
+
begin
|
9
|
+
dir = 'C:/'
|
10
|
+
file_name = dir + 'simple.xls'
|
11
|
+
other_dir = 'C:/more_data/'
|
12
|
+
other_file_name = other_dir + 'simple.xls'
|
13
|
+
book = Book.open(file_name, :visible => true) # open a book, make Excel application visible
|
14
|
+
sleep 3
|
15
|
+
begin
|
16
|
+
new_book = 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 = Book.open(other_file_name, :if_obstructed => :forget)
|
22
|
+
sleep 3
|
23
|
+
# open another book with the same file name in a different path. Use a new Excel application
|
24
|
+
another_book = Book.open(file_name, :if_obstructed => :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 all workbooks, quit Excel application
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# example_if_obstructed_save.rb:
|
2
|
+
# open with :if_obstructed: :save
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
5
|
+
|
6
|
+
include RobustExcelOle
|
7
|
+
|
8
|
+
ExcelApp.close_all
|
9
|
+
begin
|
10
|
+
dir = 'C:/'
|
11
|
+
file_name = dir + 'simple.xls'
|
12
|
+
other_dir = 'C:/more_data/'
|
13
|
+
other_file_name = other_dir + 'simple.xls'
|
14
|
+
book = Book.open(file_name, :visible => true) # open a book, make Excel visible
|
15
|
+
sleep 1
|
16
|
+
sheet = book[0]
|
17
|
+
first_cell = sheet[0,0].value # access a sheet
|
18
|
+
sheet[0,0] = first_cell == "simple" ? "complex" : "simple" # change a cell
|
19
|
+
sleep 1
|
20
|
+
new_book = Book.open(other_file_name, :if_obstructed => :save) # open a book with the same file name in a different path
|
21
|
+
sleep 1 #save the old book, close it, before
|
22
|
+
old_book = Book.open(file_name, :if_obstructed => :forget ,:visible => true) # open the old book
|
23
|
+
sleep 1
|
24
|
+
old_sheet = old_book[0]
|
25
|
+
old_first_cell = old_sheet[0,0].value
|
26
|
+
puts "the old book was saved" unless old_first_cell == first_cell
|
27
|
+
new_book.close # close the books
|
28
|
+
old_book.close
|
29
|
+
ensure
|
30
|
+
ExcelApp.close_all # close all workbooks, quit Excel application
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# example_ifunsaved_accept.rb:
|
2
|
+
# open with :if_unsaved => :accept, close with :if_unsaved => :save
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
5
|
+
|
6
|
+
include RobustExcelOle
|
7
|
+
|
8
|
+
ExcelApp.close_all
|
9
|
+
begin
|
10
|
+
dir = 'C:/'
|
11
|
+
file_name = dir + 'simple.xls'
|
12
|
+
book = Book.open(file_name) # open a book
|
13
|
+
sheet = book[0] # access a sheet
|
14
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
|
15
|
+
begin
|
16
|
+
new_book = Book.open(file_name) # open another book with the same file name
|
17
|
+
rescue ExcelErrorOpen => msg # by default: raises an exception:
|
18
|
+
puts "open error: #{msg.message}" # a book with the same name is already open and unsaved
|
19
|
+
end
|
20
|
+
new_book = Book.open(file_name, :if_unsaved => :accept) # open another book with the same file name
|
21
|
+
# and let the unsaved book open
|
22
|
+
if book.alive? && new_book.alive? then # check whether the referenced workbooks
|
23
|
+
puts "open with :if_unsaved => :accept : the two books are alive." # respond to methods
|
24
|
+
end
|
25
|
+
if book == new_book then # check whether the book are equal
|
26
|
+
puts "both books are equal"
|
27
|
+
end
|
28
|
+
begin
|
29
|
+
book.close # close the book. by default: raises an exception:
|
30
|
+
rescue ExcelErrorClose => msg # book is unsaved
|
31
|
+
puts "close error: #{msg.message}"
|
32
|
+
end
|
33
|
+
book.close(:if_unsaved => :save) # save the book before closing it
|
34
|
+
puts "closed the book successfully with option :if_unsaved => :save"
|
35
|
+
new_book.close # close the other book. It is already saved.
|
36
|
+
ensure
|
37
|
+
ExcelApp.close_all # close workbooks, quit Excel application
|
38
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# example_ifunsaved_forget.rb:
|
2
|
+
# open with :if_unsaved => :forget, :new_app, close with :if_unsaved => :save
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
5
|
+
|
6
|
+
include RobustExcelOle
|
7
|
+
|
8
|
+
ExcelApp.close_all
|
9
|
+
begin
|
10
|
+
dir = 'C:/'
|
11
|
+
file_name = dir + 'simple.xls'
|
12
|
+
book = Book.open(file_name) # open a book
|
13
|
+
ExcelApp.reuse.Visible = true # make Excel visible
|
14
|
+
sleep 1
|
15
|
+
sheet = book[0] # access a sheet
|
16
|
+
first_cell = sheet[0,0].value
|
17
|
+
sheet[0,0] = first_cell == "simple" ? "complex" : "simple" # change a cell
|
18
|
+
sleep 1
|
19
|
+
new_book = Book.open(file_name, :if_unsaved => :forget) # open another book with the same file name
|
20
|
+
# and close the unsaved book without saving it
|
21
|
+
sheet_new_book = new_book[0]
|
22
|
+
if (not book.alive?) && new_book.alive? && sheet_new_book[0,0].value == first_cell then # check whether the unsaved book
|
23
|
+
puts "open with :if_unsaved => :forget : the unsaved book is closed and not saved." # is closed and was not saved
|
24
|
+
end
|
25
|
+
sleep 1
|
26
|
+
sheet_new_book[0,0] = sheet_new_book[0,0].value == "simple" ? "complex" : "simple" # change a cell
|
27
|
+
# open another book in a new Excel application, and make Excel visible, leaving the unsaved book open
|
28
|
+
another_book = Book.open(file_name, :if_unsaved => :new_app, :visible => true)
|
29
|
+
sleep 3 # leaving the unsaved book open
|
30
|
+
new_book.close(:if_unsaved => :forget )
|
31
|
+
another_book.close
|
32
|
+
ensure
|
33
|
+
ExcelApp.close_all # close all workbooks, quit Excel application
|
34
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# example_read_only: open with read_only mode. save, close
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
+
|
5
|
+
include RobustExcelOle
|
6
|
+
|
7
|
+
ExcelApp.close_all
|
8
|
+
begin
|
9
|
+
dir = 'C:/'
|
10
|
+
file_name = dir + 'simple.xls'
|
11
|
+
other_file_name = dir + 'different_simple.xls'
|
12
|
+
# open a book with read_only and make Excel visible
|
13
|
+
book = Book.open(file_name, :read_only => true, :visible => true)
|
14
|
+
sheet = book[0] # access a sheet
|
15
|
+
sleep 1
|
16
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
|
17
|
+
sleep 1
|
18
|
+
begin
|
19
|
+
book.save # simple save.
|
20
|
+
rescue ExcelErrorSave => msg # raises an exception because book is opened in read_only mode
|
21
|
+
puts "save_as error: #{msg.message}"
|
22
|
+
end
|
23
|
+
book.close # close the book without saving it
|
24
|
+
ensure
|
25
|
+
ExcelApp.close_all # close workbooks, quit Excel application
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# example_reuse.rb: open a book in a running Excel application and in a new one. make visible
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
+
|
5
|
+
include RobustExcelOle
|
6
|
+
|
7
|
+
ExcelApp.close_all
|
8
|
+
begin
|
9
|
+
dir = 'C:/'
|
10
|
+
file_name1 = dir + 'simple.xls'
|
11
|
+
file_name2 = dir + 'different_simple.xls'
|
12
|
+
file_name3 = dir + 'different_simple.xls'
|
13
|
+
file_name4 = dir + 'book_with_blank.xls'
|
14
|
+
book1 = Book.open(file_name1) # open a book in a new Excel application since no Excel is open
|
15
|
+
ExcelApp.reuse.Visible = true # make Excel visible
|
16
|
+
sleep 2
|
17
|
+
book2 = Book.open(file_name2) # open a new book in the same Excel application
|
18
|
+
sleep 2 # (by default: :reuse => true)
|
19
|
+
book3 = Book.open(file_name3, :reuse => false, :visible => true) # open another book in a new Excel application,
|
20
|
+
sleep 2 # make Excel visible
|
21
|
+
book4 = Book.open(file_name4, :reuse => true, :visible => true) # open anther book, and use a running Excel application
|
22
|
+
sleep 2 # (Excel chooses the first Excel application)
|
23
|
+
book1.close # close the books
|
24
|
+
book2.close
|
25
|
+
book3.close
|
26
|
+
book4.close
|
27
|
+
ensure
|
28
|
+
ExcelApp.close_all # close all workbooks, quit Excel application
|
29
|
+
end
|
30
|
+
|
31
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# example_simple.rb: open a book, simple save, save_as, close
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
+
|
5
|
+
include RobustExcelOle
|
6
|
+
|
7
|
+
ExcelApp.close_all
|
8
|
+
begin
|
9
|
+
dir = 'C:/'
|
10
|
+
file_name = dir + 'simple.xls'
|
11
|
+
other_file_name = dir + 'different_simple.xls'
|
12
|
+
book = Book.open(file_name) # open a book. default: :read_only => false
|
13
|
+
ExcelApp.reuse.Visible = true # make Excel visible
|
14
|
+
sheet = book[0] # access a sheet
|
15
|
+
sleep 1
|
16
|
+
sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
|
17
|
+
sleep 1
|
18
|
+
book.save # simple save
|
19
|
+
begin
|
20
|
+
book.save_as(other_file_name) # save_as : default :if_exists => :raise
|
21
|
+
rescue ExcelErrorSave => msg
|
22
|
+
puts "save_as error: #{msg.message}"
|
23
|
+
end
|
24
|
+
book.save_as(other_file_name, :if_exists => :overwrite) # save_as with :if_exists => :overwrite
|
25
|
+
puts "save_as: saved successfully with option :if_exists => :overwrite"
|
26
|
+
book.close # close the book
|
27
|
+
ensure
|
28
|
+
ExcelApp.close_all # close workbooks, quit Excel application
|
29
|
+
end
|
30
|
+
|