robust_excel_ole 1.15 → 1.16
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.
- checksums.yaml +4 -4
- data/Changelog +9 -0
- data/README.rdoc +1 -1
- data/___dummy_workbook.xls +0 -0
- data/docs/README_open.rdoc +14 -2
- data/docs/README_ranges.rdoc +5 -2
- data/lib/robust_excel_ole/bookstore.rb +12 -75
- data/lib/robust_excel_ole/cell.rb +1 -1
- data/lib/robust_excel_ole/excel.rb +6 -11
- data/lib/robust_excel_ole/general.rb +32 -9
- data/lib/robust_excel_ole/range.rb +4 -4
- data/lib/robust_excel_ole/range_owners.rb +14 -14
- data/lib/robust_excel_ole/version.rb +1 -1
- data/lib/robust_excel_ole/workbook.rb +129 -112
- data/lib/robust_excel_ole/worksheet.rb +4 -8
- data/spec/bookstore_spec.rb +3 -3
- data/spec/data/more_data/workbook.xls +0 -0
- data/spec/excel_spec.rb +2 -4
- data/spec/general_spec.rb +2 -4
- data/spec/reo_common_spec.rb +1 -1
- data/spec/workbook_specs/workbook_misc_spec.rb +1 -11
- data/spec/workbook_specs/workbook_open_spec.rb +342 -16
- data/spec/workbook_specs/workbook_unobtr_spec.rb +2 -2
- data/spec/worksheet_spec.rb +2 -4
- metadata +2 -2
@@ -12,32 +12,33 @@ module RobustExcelOle
|
|
12
12
|
class Workbook < RangeOwners
|
13
13
|
|
14
14
|
#include General
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
attr_accessor :color_if_modified
|
20
|
-
attr_accessor :was_open
|
15
|
+
|
16
|
+
attr_reader :ole_workbook
|
17
|
+
attr_reader :excel
|
18
|
+
attr_reader :stored_filename
|
21
19
|
|
22
20
|
alias ole_object ole_workbook
|
23
21
|
|
24
|
-
|
25
|
-
:default => {:excel => :current},
|
22
|
+
CORE_DEFAULT_OPEN_OPTS = {
|
23
|
+
:default => {:excel => :current},
|
26
24
|
:force => {},
|
27
|
-
:update_links => :never
|
25
|
+
:update_links => :never
|
26
|
+
}.freeze
|
27
|
+
|
28
|
+
DEFAULT_OPEN_OPTS = {
|
28
29
|
:if_unsaved => :raise,
|
29
30
|
:if_obstructed => :raise,
|
30
31
|
:if_absent => :raise,
|
31
32
|
:if_exists => :raise
|
32
|
-
|
33
|
-
}.freeze
|
34
|
-
|
35
|
-
CORE_DEFAULT_OPEN_OPTS = {
|
36
|
-
:default => {:excel => :current}, :force => {}, :update_links => :never
|
37
|
-
}.freeze
|
33
|
+
}.merge(CORE_DEFAULT_OPEN_OPTS).freeze
|
38
34
|
|
39
|
-
ABBREVIATIONS = [
|
40
|
-
|
35
|
+
ABBREVIATIONS = [
|
36
|
+
[:default,:d],
|
37
|
+
[:force, :f],
|
38
|
+
[:excel, :e],
|
39
|
+
[:visible, :v],
|
40
|
+
[:if_obstructed, :if_blocked]
|
41
|
+
].freeze
|
41
42
|
|
42
43
|
|
43
44
|
# opens a workbook.
|
@@ -83,51 +84,56 @@ module RobustExcelOle
|
|
83
84
|
# :visible true -> makes the workbook visible
|
84
85
|
# :check_compatibility true -> check compatibility when saving
|
85
86
|
# :update_links true -> user is being asked how to update links, false -> links are never updated
|
86
|
-
# @return [Workbook] a representation of a workbook
|
87
|
+
# @return [Workbook] a representation of a workbook
|
87
88
|
def self.new(file_or_workbook, opts = { }, &block)
|
88
|
-
|
89
|
-
|
89
|
+
process_options(opts)
|
90
|
+
case file_or_workbook
|
91
|
+
when NilClass
|
92
|
+
raise FileNameNotGiven, 'filename is nil'
|
93
|
+
when WIN32OLE
|
90
94
|
file = file_or_workbook.Fullname.tr('\\','/')
|
91
|
-
|
95
|
+
when Workbook
|
96
|
+
return file_or_workbook
|
97
|
+
when String
|
92
98
|
file = file_or_workbook
|
93
|
-
raise
|
94
|
-
|
99
|
+
raise FileNotFound, "file #{General.absolute_path(file).inspect} is a directory" if File.directory?(file)
|
100
|
+
else
|
101
|
+
raise TypeREOError, 'given object is neither a filename, a Win32ole, nor a Workbook object'
|
95
102
|
end
|
96
103
|
# try to fetch the workbook from the bookstore
|
104
|
+
set_was_open opts, file_or_workbook.is_a?(WIN32OLE)
|
97
105
|
book = nil
|
98
|
-
if
|
106
|
+
if opts[:force][:excel] != :new
|
99
107
|
# if readonly is true, then prefer a book that is given in force_excel if this option is set
|
100
108
|
forced_excel =
|
101
|
-
(
|
102
|
-
(excel_class.new(:reuse => true) if !::
|
109
|
+
(opts[:force][:excel].nil? || opts[:force][:excel] == :current) ?
|
110
|
+
(excel_class.new(:reuse => true) if !::CONNECT_JRUBY_BUG) : excel_of(opts[:force][:excel])
|
103
111
|
begin
|
104
112
|
book = if File.exists?(file)
|
105
|
-
bookstore.fetch(file, :prefer_writable => !(
|
106
|
-
:prefer_excel => (
|
113
|
+
bookstore.fetch(file, :prefer_writable => !(opts[:read_only]),
|
114
|
+
:prefer_excel => (opts[:read_only] ? forced_excel : nil))
|
107
115
|
end
|
108
116
|
rescue
|
117
|
+
raise
|
109
118
|
trace "#{$!.message}"
|
110
119
|
end
|
111
120
|
if book
|
112
|
-
|
113
|
-
book.was_open = book.alive? unless file_or_workbook.is_a? WIN32OLE
|
121
|
+
set_was_open opts, book.alive?
|
114
122
|
# drop the fetched workbook if it shall be opened in another Excel instance
|
115
123
|
# or the workbook is an unsaved workbook that should not be accepted
|
116
|
-
if (
|
117
|
-
!(book.alive? && !book.saved && (
|
118
|
-
|
119
|
-
book.ensure_workbook(file,
|
120
|
-
book.set_options(file,
|
124
|
+
if (opts[:force][:excel].nil? || opts[:force][:excel] == :current || forced_excel == book.excel) &&
|
125
|
+
!(book.alive? && !book.saved && (opts[:if_unsaved] != :accept))
|
126
|
+
opts[:force][:excel] = book.excel if book.excel && book.excel.alive?
|
127
|
+
book.ensure_workbook(file,opts)
|
128
|
+
book.set_options(file,opts)
|
121
129
|
return book
|
122
130
|
end
|
123
131
|
end
|
124
132
|
end
|
125
|
-
super(file_or_workbook,
|
133
|
+
super(file_or_workbook, opts, &block)
|
126
134
|
end
|
127
135
|
|
128
|
-
|
129
|
-
new(file_or_workbook, opts, &block)
|
130
|
-
end
|
136
|
+
singleton_class.send :alias_method, :open, :new
|
131
137
|
|
132
138
|
# creates a new Workbook object, if a file name is given
|
133
139
|
# Promotes the win32ole workbook to a Workbook object, if a win32ole-workbook is given
|
@@ -135,7 +141,7 @@ module RobustExcelOle
|
|
135
141
|
# @param [Hash] opts
|
136
142
|
# @option opts [Symbol] see above
|
137
143
|
# @return [Workbook] a workbook
|
138
|
-
def initialize(file_or_workbook, options
|
144
|
+
def initialize(file_or_workbook, options, &block)
|
139
145
|
if file_or_workbook.is_a? WIN32OLE
|
140
146
|
@ole_workbook = file_or_workbook
|
141
147
|
ole_excel = begin
|
@@ -150,8 +156,8 @@ module RobustExcelOle
|
|
150
156
|
ensure_workbook(filename, options)
|
151
157
|
end
|
152
158
|
set_options(filename, options)
|
153
|
-
|
154
|
-
r1c1_letters = @ole_workbook.Worksheets.Item(1).Cells.Item(1,1).Address(true,true,XlR1C1).gsub(/[0-9]/,'')
|
159
|
+
store_myself
|
160
|
+
r1c1_letters = @ole_workbook.Worksheets.Item(1).Cells.Item(1,1).Address(true,true,XlR1C1).gsub(/[0-9]/,'')
|
155
161
|
address_class.new(r1c1_letters)
|
156
162
|
if block
|
157
163
|
begin
|
@@ -164,41 +170,53 @@ module RobustExcelOle
|
|
164
170
|
|
165
171
|
private
|
166
172
|
|
173
|
+
# @private
|
174
|
+
def self.set_was_open(hash, value)
|
175
|
+
hash[:was_open] = value if hash.has_key?(:was_open)
|
176
|
+
end
|
177
|
+
|
178
|
+
# @private
|
179
|
+
def set_was_open(hash, value)
|
180
|
+
self.class.set_was_open(hash, value)
|
181
|
+
end
|
182
|
+
|
183
|
+
# @private
|
167
184
|
# translates abbreviations and synonyms and merges with default options
|
168
|
-
def self.process_options(
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
185
|
+
def self.process_options(opts, proc_opts = {:use_defaults => true})
|
186
|
+
translate(opts)
|
187
|
+
default_opts = (proc_opts[:use_defaults] ? DEFAULT_OPEN_OPTS : CORE_DEFAULT_OPEN_OPTS).dup
|
188
|
+
translate(default_opts)
|
189
|
+
opts.merge!(default_opts) {|key, v1, v2| v1 }
|
190
|
+
opts[:default] = default_opts[:default].merge(opts[:default]) unless opts[:default].nil?
|
191
|
+
opts[:force] = default_opts[:force].merge(opts[:force]) unless opts[:force].nil?
|
192
|
+
end
|
193
|
+
|
194
|
+
# @private
|
195
|
+
def self.translate(opts)
|
196
|
+
erg = {}
|
197
|
+
opts.each do |key,value|
|
198
|
+
new_key = key
|
199
|
+
ABBREVIATIONS.each { |long,short| new_key = long if key == short }
|
200
|
+
if value.is_a?(Hash)
|
201
|
+
erg[new_key] = {}
|
202
|
+
value.each do |k,v|
|
203
|
+
new_k = k
|
204
|
+
ABBREVIATIONS.each { |l,s| new_k = l if k == s }
|
205
|
+
erg[new_key][new_k] = v
|
183
206
|
end
|
207
|
+
else
|
208
|
+
erg[new_key] = value
|
184
209
|
end
|
185
|
-
erg[:default] ||= {}
|
186
|
-
erg[:force] ||= {}
|
187
|
-
force_list = [:visible, :excel]
|
188
|
-
erg.each { |key,value| erg[:force][key] = value if force_list.include?(key) }
|
189
|
-
erg[:default][:excel] = erg[:default_excel] unless erg[:default_excel].nil?
|
190
|
-
erg[:force][:excel] = erg[:force_excel] unless erg[:force_excel].nil?
|
191
|
-
erg[:default][:excel] = :current if erg[:default][:excel] == :reuse || erg[:default][:excel] == :active
|
192
|
-
erg[:force][:excel] = :current if erg[:force][:excel] == :reuse || erg[:force][:excel] == :active
|
193
|
-
erg
|
194
210
|
end
|
195
|
-
opts
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
opts
|
200
|
-
opts[:
|
201
|
-
opts
|
211
|
+
opts.merge!(erg)
|
212
|
+
opts[:default] ||= {}
|
213
|
+
opts[:force] ||= {}
|
214
|
+
force_list = [:visible, :excel]
|
215
|
+
opts.each { |key,value| opts[:force][key] = value if force_list.include?(key) }
|
216
|
+
opts[:default][:excel] = opts[:default_excel] unless opts[:default_excel].nil?
|
217
|
+
opts[:force][:excel] = opts[:force_excel] unless opts[:force_excel].nil?
|
218
|
+
opts[:default][:excel] = :current if opts[:default][:excel] == :reuse || opts[:default][:excel] == :active
|
219
|
+
opts[:force][:excel] = :current if opts[:force][:excel] == :reuse || opts[:force][:excel] == :active
|
202
220
|
end
|
203
221
|
|
204
222
|
# returns an Excel object when given Excel, Workbook or Win32ole object representing a Workbook or an Excel
|
@@ -231,7 +249,9 @@ module RobustExcelOle
|
|
231
249
|
|
232
250
|
# @private
|
233
251
|
def ensure_workbook(filename, options)
|
252
|
+
set_was_open options, true
|
234
253
|
return if (@ole_workbook && alive? && (options[:read_only].nil? || @ole_workbook.ReadOnly == options[:read_only]))
|
254
|
+
set_was_open options, false
|
235
255
|
if options[:if_unsaved]==:accept &&
|
236
256
|
((options[:read_only]==true && self.ReadOnly==false) || (options[:read_only]==false && self.ReadOnly==true))
|
237
257
|
raise OptionInvalid, ":if_unsaved:accept and change of read-only mode is not possible"
|
@@ -242,16 +262,14 @@ module RobustExcelOle
|
|
242
262
|
ensure_excel(options)
|
243
263
|
workbooks = @excel.Workbooks
|
244
264
|
@ole_workbook = workbooks.Item(File.basename(filename)) rescue nil if @ole_workbook.nil?
|
245
|
-
if @ole_workbook
|
246
|
-
|
265
|
+
if @ole_workbook && alive?
|
266
|
+
set_was_open options, true #if @was_open.nil? # necessary?
|
247
267
|
manage_blocking_or_unsaved_workbook(filename,options)
|
248
268
|
open_or_create_workbook(filename,options) if @ole_workbook.ReadOnly != options[:read_only]
|
249
269
|
else
|
250
270
|
if excel_option.nil? || excel_option == :current &&
|
251
|
-
(!::
|
252
|
-
workbooks_number_before_connect = @excel.Workbooks.Count
|
271
|
+
(!::CONNECT_JRUBY_BUG || filename[0] != '/')
|
253
272
|
connect(filename,options)
|
254
|
-
@was_open = @excel.Workbooks.Count == workbooks_number_before_connect
|
255
273
|
else
|
256
274
|
open_or_create_workbook(filename,options)
|
257
275
|
end
|
@@ -275,15 +293,10 @@ module RobustExcelOle
|
|
275
293
|
|
276
294
|
# @private
|
277
295
|
# connects to an unknown workbook
|
278
|
-
def connect(filename,options)
|
279
|
-
|
280
|
-
workbooks_number = if excels_number>0
|
281
|
-
excel_class.current.Workbooks.Count
|
282
|
-
else 0
|
283
|
-
end
|
284
|
-
abs_filename = General.absolute_path(filename)
|
296
|
+
def connect(filename,options)
|
297
|
+
workbooks_number = excel_class.excels_number==0 ? 0 : excel_class.current.Workbooks.Count
|
285
298
|
@ole_workbook = begin
|
286
|
-
WIN32OLE.connect(
|
299
|
+
WIN32OLE.connect(General.absolute_path(filename))
|
287
300
|
rescue
|
288
301
|
if $!.message =~ /moniker/
|
289
302
|
raise WorkbookConnectingBlockingError
|
@@ -300,6 +313,7 @@ module RobustExcelOle
|
|
300
313
|
raise WorkbookConnectingUnknownError
|
301
314
|
end
|
302
315
|
end
|
316
|
+
set_was_open options, (ole_excel.Workbooks.Count == workbooks_number)
|
303
317
|
@excel = excel_class.new(ole_excel)
|
304
318
|
end
|
305
319
|
|
@@ -324,9 +338,11 @@ module RobustExcelOle
|
|
324
338
|
|
325
339
|
# @private
|
326
340
|
def manage_blocking_or_unsaved_workbook(filename,options)
|
327
|
-
|
328
|
-
|
329
|
-
|
341
|
+
filename = General.absolute_path(filename)
|
342
|
+
filename = General.canonize(filename)
|
343
|
+
previous_file = General.canonize(@ole_workbook.Fullname)
|
344
|
+
obstructed_by_other_book = (File.basename(filename) == File.basename(previous_file)) &&
|
345
|
+
(File.dirname(filename) != File.dirname(previous_file))
|
330
346
|
if obstructed_by_other_book
|
331
347
|
# workbook is being obstructed by a workbook with same name and different path
|
332
348
|
manage_blocking_workbook(filename,options)
|
@@ -415,7 +431,6 @@ module RobustExcelOle
|
|
415
431
|
begin
|
416
432
|
abs_filename = General.absolute_path(filename)
|
417
433
|
begin
|
418
|
-
@was_open = false if @was_open.nil?
|
419
434
|
workbooks = @excel.Workbooks
|
420
435
|
rescue WIN32OLERuntimeError, Java::OrgRacobCom::ComFailException => msg
|
421
436
|
raise UnexpectedREOError, "cannot access workbooks: #{msg.message} #{msg.backtrace}"
|
@@ -427,7 +442,7 @@ module RobustExcelOle
|
|
427
442
|
updatelinks_vba(options[:update_links]),
|
428
443
|
options[:read_only] )
|
429
444
|
end
|
430
|
-
rescue WIN32OLERuntimeError => msg
|
445
|
+
rescue WIN32OLERuntimeError, Java::OrgRacobCom::ComFailException => msg
|
431
446
|
# for Excel2007: for option :if_unsaved => :alert and user cancels: this error appears?
|
432
447
|
# if yes: distinguish these events
|
433
448
|
raise UnexpectedREOError, "cannot open workbook: #{msg.message} #{msg.backtrace}"
|
@@ -436,10 +451,10 @@ module RobustExcelOle
|
|
436
451
|
# workaround for bug in Excel 2010: workbook.Open does not always return the workbook when given file name
|
437
452
|
begin
|
438
453
|
@ole_workbook = workbooks.Item(File.basename(filename))
|
439
|
-
rescue WIN32OLERuntimeError => msg
|
454
|
+
rescue WIN32OLERuntimeError, Java::OrgRacobCom::ComFailException => msg
|
440
455
|
raise UnexpectedREOError, "WIN32OLERuntimeError: #{msg.message}"
|
441
456
|
end
|
442
|
-
rescue WIN32OLERuntimeError => msg
|
457
|
+
rescue WIN32OLERuntimeError, Java::OrgRacobCom::ComFailException => msg
|
443
458
|
raise UnexpectedREOError, "WIN32OLERuntimeError: #{msg.message} #{msg.backtrace}"
|
444
459
|
end
|
445
460
|
end
|
@@ -451,10 +466,10 @@ module RobustExcelOle
|
|
451
466
|
# parameter 'UpdateLinks' has no effect
|
452
467
|
def updatelinks_vba(updatelinks_reo)
|
453
468
|
case updatelinks_reo
|
454
|
-
when :alert
|
455
|
-
when :never
|
469
|
+
when :alert then RobustExcelOle::XlUpdateLinksUserSetting
|
470
|
+
when :never then RobustExcelOle::XlUpdateLinksNever
|
456
471
|
when :always then RobustExcelOle::XlUpdateLinksAlways
|
457
|
-
else
|
472
|
+
else RobustExcelOle::XlUpdateLinksNever
|
458
473
|
end
|
459
474
|
end
|
460
475
|
|
@@ -583,7 +598,7 @@ module RobustExcelOle
|
|
583
598
|
|
584
599
|
@private
|
585
600
|
def self.unobtrusively_opening(file, opts, book_is_alive, &block)
|
586
|
-
|
601
|
+
process_options(opts)
|
587
602
|
opts = {:if_closed => :current, :keep_open => false}.merge(opts)
|
588
603
|
raise OptionInvalid, 'contradicting options' if opts[:writable] && opts[:read_only]
|
589
604
|
if book_is_alive.nil?
|
@@ -598,6 +613,7 @@ module RobustExcelOle
|
|
598
613
|
end
|
599
614
|
open_opts = excel_opts.merge({:if_unsaved => :accept})
|
600
615
|
begin
|
616
|
+
open_opts[:was_open] = nil
|
601
617
|
book = open(file, open_opts)
|
602
618
|
was_visible = book.visible
|
603
619
|
was_writable = book.writable
|
@@ -614,13 +630,14 @@ module RobustExcelOle
|
|
614
630
|
book.set_options(file, opts.merge({:read_only => !was_writable,
|
615
631
|
:if_unsaved => (opts[:writable]==false ? :forget : :save)}))
|
616
632
|
end
|
617
|
-
|
633
|
+
was_open = open_opts[:was_open]
|
634
|
+
if was_open
|
618
635
|
book.visible = was_visible
|
619
636
|
book.CheckCompatibility = was_check_compatibility
|
620
637
|
book.excel.calculation = was_calculation
|
621
638
|
end
|
622
|
-
book.Saved = (was_saved || !
|
623
|
-
book.close unless
|
639
|
+
book.Saved = (was_saved || !was_open)
|
640
|
+
book.close unless was_open || opts[:keep_open]
|
624
641
|
end
|
625
642
|
end
|
626
643
|
end
|
@@ -671,12 +688,12 @@ module RobustExcelOle
|
|
671
688
|
# :close_if_saved -> closes the blocking workbook, if it is saved,
|
672
689
|
# otherwise raises an exception
|
673
690
|
# @return [Workbook], the book itself, if successfully saved, raises an exception otherwise
|
674
|
-
def save_as(file,
|
691
|
+
def save_as(file, options = { })
|
675
692
|
raise FileNameNotGiven, 'filename is nil' if file.nil?
|
676
693
|
raise ObjectNotAlive, 'workbook is not alive' unless alive?
|
677
694
|
raise WorkbookReadOnly, 'Not opened for writing (opened with :read_only option)' if @ole_workbook.ReadOnly
|
678
695
|
raise(FileNotFound, "file #{General.absolute_path(file).inspect} is a directory") if File.directory?(file)
|
679
|
-
|
696
|
+
self.class.process_options(options)
|
680
697
|
if File.exist?(file)
|
681
698
|
case options[:if_exists]
|
682
699
|
when :overwrite
|
@@ -731,6 +748,11 @@ module RobustExcelOle
|
|
731
748
|
|
732
749
|
private
|
733
750
|
|
751
|
+
def store_myself
|
752
|
+
bookstore.store(self)
|
753
|
+
@stored_filename = filename
|
754
|
+
end
|
755
|
+
|
734
756
|
# @private
|
735
757
|
def save_as_workbook(file, options)
|
736
758
|
dirname, basename = File.split(file)
|
@@ -741,7 +763,7 @@ module RobustExcelOle
|
|
741
763
|
when '.xlsm' then RobustExcelOle::XlOpenXMLWorkbookMacroEnabled
|
742
764
|
end
|
743
765
|
@ole_workbook.SaveAs(General.absolute_path(file), file_format)
|
744
|
-
|
766
|
+
store_myself
|
745
767
|
rescue WIN32OLERuntimeError, Java::OrgRacobCom::ComFailException => msg
|
746
768
|
if msg.message =~ /SaveAs/ && msg.message =~ /Workbook/
|
747
769
|
# trace "save: canceled by user" if options[:if_exists] == :alert || options[:if_exists] == :excel
|
@@ -820,7 +842,7 @@ module RobustExcelOle
|
|
820
842
|
last_sheet_local = last_sheet
|
821
843
|
after_or_before, base_sheet = opts.to_a.first || [:after, last_sheet_local]
|
822
844
|
begin
|
823
|
-
if !::
|
845
|
+
if !::COPYSHEETS_JRUBY_BUG
|
824
846
|
if sheet
|
825
847
|
sheet.Copy({ after_or_before.to_s => base_sheet.ole_worksheet })
|
826
848
|
else
|
@@ -857,9 +879,7 @@ module RobustExcelOle
|
|
857
879
|
rescue WIN32OLERuntimeError, NameNotFound, Java::OrgRacobCom::ComFailException
|
858
880
|
raise WorksheetREOError, "could not add given worksheet #{sheet.inspect}"
|
859
881
|
end
|
860
|
-
#ole_sheet = @excel.Activesheet
|
861
882
|
ole_sheet = ole_workbook.Activesheet
|
862
|
-
#ole_sheet = ole_sheet.nil? ? ole_workbook.Worksheets.Item(ole_workbook.Worksheets.Count) : ole_sheet
|
863
883
|
new_sheet = worksheet_class.new(ole_sheet)
|
864
884
|
new_sheet.name = new_sheet_name if new_sheet_name
|
865
885
|
new_sheet
|
@@ -894,17 +914,14 @@ module RobustExcelOle
|
|
894
914
|
# @param [String] name the name of the range
|
895
915
|
# @param [Variant] value the contents of the range
|
896
916
|
def []= (name, value)
|
897
|
-
|
898
|
-
workbook.color_if_modified = 42 # 42 - aqua-marin, 4-green
|
899
|
-
set_namevalue_glob(name,value)
|
900
|
-
workbook.color_if_modified = old_color_if_modified
|
917
|
+
set_namevalue_glob(name,value,:color => 42)
|
901
918
|
end
|
902
919
|
|
903
920
|
# sets options
|
904
921
|
# @param [Hash] opts
|
905
922
|
def for_this_workbook(opts)
|
906
923
|
return unless alive?
|
907
|
-
|
924
|
+
self.class.process_options(opts, :use_defaults => false)
|
908
925
|
visible_before = visible
|
909
926
|
check_compatibility_before = check_compatibility
|
910
927
|
unless opts[:read_only].nil?
|
@@ -1077,7 +1094,7 @@ module RobustExcelOle
|
|
1077
1094
|
def method_missing(name, *args)
|
1078
1095
|
if name.to_s[0,1] =~ /[A-Z]/
|
1079
1096
|
raise ObjectNotAlive, 'method missing: workbook not alive' unless alive?
|
1080
|
-
if ::
|
1097
|
+
if ::ERRORMESSAGE_JRUBY_BUG
|
1081
1098
|
begin
|
1082
1099
|
@ole_workbook.send(name, *args)
|
1083
1100
|
rescue Java::OrgRacobCom::ComFailException
|