robust_excel_ole 0.3.8 → 0.3.9

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.
Files changed (48) hide show
  1. data/.yardopts +1 -0
  2. data/examples/edit_sheets/example_access_sheets_and_cells.rb +1 -1
  3. data/examples/edit_sheets/example_adding_sheets.rb +1 -1
  4. data/examples/edit_sheets/example_concating.rb +2 -2
  5. data/examples/edit_sheets/example_copying.rb +2 -2
  6. data/examples/edit_sheets/example_expanding.rb +2 -2
  7. data/examples/edit_sheets/example_naming.rb +2 -2
  8. data/examples/edit_sheets/example_ranges.rb +1 -1
  9. data/examples/edit_sheets/example_saving.rb +2 -2
  10. data/examples/open_save_close/example_control_to_excel.rb +1 -1
  11. data/examples/open_save_close/example_default_excel.rb +1 -1
  12. data/examples/open_save_close/example_force_excel.rb +1 -1
  13. data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +1 -1
  14. data/examples/open_save_close/example_if_obstructed_forget.rb +1 -1
  15. data/examples/open_save_close/example_if_obstructed_save.rb +1 -1
  16. data/examples/open_save_close/example_if_unsaved_accept.rb +1 -1
  17. data/examples/open_save_close/example_if_unsaved_forget.rb +1 -1
  18. data/examples/open_save_close/example_if_unsaved_forget_more.rb +1 -1
  19. data/examples/open_save_close/example_read_only.rb +1 -1
  20. data/examples/open_save_close/example_rename_cells.rb +2 -2
  21. data/examples/open_save_close/example_reuse.rb +1 -1
  22. data/examples/open_save_close/example_simple.rb +1 -1
  23. data/examples/open_save_close/example_unobtrusively.rb +1 -1
  24. data/lib/reo_console.rb +2 -2
  25. data/lib/robust_excel_ole.rb +1 -174
  26. data/lib/robust_excel_ole/book.rb +47 -63
  27. data/lib/robust_excel_ole/bookstore.rb +4 -4
  28. data/lib/robust_excel_ole/excel.rb +12 -18
  29. data/lib/robust_excel_ole/general.rb +188 -0
  30. data/lib/robust_excel_ole/sheet.rb +1 -1
  31. data/lib/robust_excel_ole/utilities.rb +1 -1
  32. data/lib/robust_excel_ole/version.rb +1 -1
  33. data/spec/{book_specs/book_spec.rb → book_spec.rb} +26 -24
  34. data/spec/book_specs/book_all_spec.rb +1 -1
  35. data/spec/book_specs/book_close_spec.rb +16 -15
  36. data/spec/book_specs/book_misc_spec.rb +4 -3
  37. data/spec/book_specs/book_open_spec.rb +10 -9
  38. data/spec/book_specs/book_save_spec.rb +4 -3
  39. data/spec/book_specs/book_sheet_spec.rb +7 -6
  40. data/spec/book_specs/book_unobtr_spec.rb +2 -1
  41. data/spec/data/different_workbook.xls +0 -0
  42. data/spec/data/workbook.xls +0 -0
  43. data/spec/excel_spec.rb +9 -11
  44. data/spec/general_spec.rb +193 -0
  45. data/spec/range_spec.rb +3 -2
  46. data/spec/sheet_spec.rb +27 -19
  47. metadata +8 -6
  48. data/spec/robust_excel_ole_spec.rb +0 -113
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --legacy
@@ -1,7 +1,7 @@
1
1
  # example_access_sheets_and_cells.rb:
2
2
  # access sheets, print cells, rows, and columns of a sheet
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_adding_sheets.rb:
2
2
  # adding new and copied at various positions with various sheet names
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -3,8 +3,8 @@
3
3
  # the new workbook's name is extended by the suffix "_concat"
4
4
 
5
5
  require 'rubygems'
6
- #require 'robust_excel_ole'
7
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
6
+ #require 'general'
7
+ require File.join(File.dirname(__FILE__), '../../lib/general')
8
8
  require "fileutils"
9
9
 
10
10
  include RobustExcelOle
@@ -4,8 +4,8 @@
4
4
  # if a sheet does not contain any named cell, then the sheet shall not be copied
5
5
 
6
6
  require 'rubygems'
7
- #require 'robust_excel_ole'
8
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
7
+ #require 'general'
8
+ require File.join(File.dirname(__FILE__), '../../lib/general')
9
9
  require "fileutils"
10
10
 
11
11
  include RobustExcelOle
@@ -6,8 +6,8 @@
6
6
  # in addition to that, the cell B2 shall be named "name" and get the sheet name as its value
7
7
 
8
8
  require 'rubygems'
9
- #require 'robust_excel_ole'
10
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
9
+ #require 'general'
10
+ require File.join(File.dirname(__FILE__), '../../lib/general')
11
11
  require "fileutils"
12
12
 
13
13
  include RobustExcelOle
@@ -4,8 +4,8 @@
4
4
  # the new workbook's name is extended by the suffix "_named"
5
5
 
6
6
  require 'rubygems'
7
- #require 'robust_excel_ole'
8
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
7
+ #require 'general'
8
+ require File.join(File.dirname(__FILE__), '../../lib/general')
9
9
  require "fileutils"
10
10
 
11
11
  include RobustExcelOle
@@ -1,7 +1,7 @@
1
1
  # example_ranges.rb:
2
2
  # access row and column ranges of a sheet.
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -2,8 +2,8 @@
2
2
  # save the sheets of a book as separate workbooks
3
3
 
4
4
  require 'rubygems'
5
- #require 'robust_excel_ole'
6
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
+ #require 'general'
6
+ require File.join(File.dirname(__FILE__), '../../lib/general')
7
7
  require "fileutils"
8
8
 
9
9
  include RobustExcelOle
@@ -1,7 +1,7 @@
1
1
  # example_give_control_to_excel.rb:
2
2
  # open, close, save with giving control to Excel
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_default_excel.rb:
2
2
  # reopening books using :default_excel
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_force_excel.rb:
2
2
  # opening books in new or given Excel instances using :force_excel
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_if_obstructed_close_if_saved.rb:
2
2
  # open with :if_obstructed: :close_if_saved
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_if_obstructed_forget.rb:
2
2
  # open with :if_obstructed: :forget, :new_excel
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_if_obstructed_save.rb:
2
2
  # open with :if_obstructed: :save
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_ifunsaved_accept.rb:
2
2
  # open with :if_unsaved => :accept, close with :if_unsaved => :save
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_ifunsaved_forget.rb:
2
2
  # open with :if_unsaved => :forget, :new_excel, close with :if_unsaved => :save
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # example_ifunsaved_forget_more.rb:
2
2
  # open with :if_unsaved => :forget, :new_excel, close with :if_unsaved => :save
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -1,6 +1,6 @@
1
1
  # example_read_only: open with read_only mode. save, close
2
2
 
3
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
3
+ require File.join(File.dirname(__FILE__), '../../lib/general')
4
4
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
5
5
  require "fileutils"
6
6
 
@@ -1,7 +1,7 @@
1
1
  # example_simple.rb:
2
2
  # open a book, simple save, save_as, close
3
3
 
4
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../lib/general')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
6
  require "fileutils"
7
7
 
@@ -14,7 +14,7 @@ begin
14
14
  book = Book.open(file_name) # open a book. default: :read_only => false
15
15
  book.excel.visible = true # make current Excel visible
16
16
  sheet = book[0]
17
- workbook = book.workbook
17
+ workbook = book.ole_workbook
18
18
  fullname = workbook.Fullname
19
19
  puts "fullname: #{fullname}"
20
20
  sheet.add_name(1,1,"a_name") # rename cell A1 to "a_name"
@@ -1,6 +1,6 @@
1
1
  # example_reuse.rb: open a book in a new Excel and a running Excel instance. make visible
2
2
 
3
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
3
+ require File.join(File.dirname(__FILE__), '../../lib/general')
4
4
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
5
5
  require "fileutils"
6
6
 
@@ -5,7 +5,7 @@ LOG_TO_STDOUT = false
5
5
  REO_LOG_FILE = "reo2.log"
6
6
  REO_LOG_DIR = "C:/"
7
7
 
8
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
8
+ require File.join(File.dirname(__FILE__), '../../lib/general')
9
9
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
10
10
  require "fileutils"
11
11
 
@@ -1,6 +1,6 @@
1
1
  # example_unobtrusively.rb:
2
2
 
3
- require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
3
+ require File.join(File.dirname(__FILE__), '../../lib/general')
4
4
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
5
5
  require "fileutils"
6
6
 
data/lib/reo_console.rb CHANGED
@@ -1,7 +1,7 @@
1
-
2
-
3
1
  #require 'lib/robust_excel_ole'
4
2
  include REO
3
+ include RobustExcelOle
4
+ include General
5
5
 
6
6
  require 'irb/completion'
7
7
  require 'irb/ext/save-history'
@@ -1,4 +1,5 @@
1
1
  require "win32ole"
2
+ require File.join(File.dirname(__FILE__), 'robust_excel_ole/general')
2
3
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/utilities')
3
4
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/excel')
4
5
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/bookstore')
@@ -9,177 +10,3 @@ require File.join(File.dirname(__FILE__), 'robust_excel_ole/range')
9
10
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/cygwin') if RUBY_PLATFORM =~ /cygwin/
10
11
  #+#require "robust_excel_ole/version"
11
12
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/version')
12
-
13
- REO = RobustExcelOle
14
-
15
- include Enumerable
16
-
17
- module RobustExcelOle
18
-
19
- def test
20
- memcpy = Win32API.new('crtdll', 'memcpy', 'PPL', 'L')
21
- def addr(obj); obj.object_id << 1; end
22
- hallo = "Hallo"
23
- d = 10 ** 7; 1
24
- memcpy.call(ziel, addr(hallo) - 900000, 1000000)
25
-
26
- # d = 10 ** 6
27
- # memcpy.call(ziel, addr(hallo) - 250000, 1000000)
28
- 1.step(10,1) {|i|
29
- puts "i: #{i}"
30
- memcpy.call(ziel, addr(hallo) - i * d, 300000)
31
- #memcpy.call(ziel, addr(hallo) - i * d, d-1)
32
- a = ziel.index("Hal")
33
- puts "a: #{a}"
34
- }
35
- end
36
-
37
- def rot # :nodoc: #
38
- # allocate 4 bytes to store a pointer to the IRunningObjectTable object
39
- irot_ptr = 0.chr * 4 # or [0].pack(‘L’)
40
- # creating an instance of a WIN32api method for GetRunningObjectTable
41
- grot = Win32API.new('ole32', 'GetRunningObjectTable', 'IP', 'I')
42
- # get a pointer to the IRunningObjectTable interface on the local ROT
43
- return_val = grot.call(0, irot_ptr)
44
- # if there is an unexpected error, abort
45
- if return_val != 0
46
- puts "unexpected error when calling GetRunningObjectTable"
47
- return
48
- end
49
- # get a pointer to the irot_ptr
50
- irot_ptr_ptr = irot_ptr.unpack('L').first
51
- # allocate 4 bytes to store a pointer to the virtual function table
52
- irot_vtbl_ptr = 0.chr * 4 # or irot_vtbl_ptr = [0].pack(‘L’)
53
- # allocate 4 * 7 bytes for the table, since there are 7 functions in the IRunningObjectTable interface
54
- irot_table = 0.chr * (4 * 7)
55
- # creating an instance of a WIN32api method for memcpy
56
- memcpy = Win32API.new('crtdll', 'memcpy', 'PPL', 'L')
57
- # make a copy of irot_ptr that we can muck about with
58
- memcpy.call(irot_vtbl_ptr, irot_ptr_ptr, 4)
59
- # get a pointer to the irot_vtbl
60
- irot_vtbl_ptr.unpack('L').first
61
- # Copy the 4*7 bytes at the irot_vtbl_ptr memory address to irot_table
62
- memcpy.call(irot_table, irot_vtbl_ptr.unpack('L').first, 4 * 7)
63
- # unpack the contents of the virtual function table into the 'irot_table' array.
64
- irot_table = irot_table.unpack('L*')
65
- puts "Number of elements in the vtbl is: " + irot_table.length.to_s
66
- # EnumRunning is the 1st function in the vtbl.
67
- enumRunning = Win32::API::Function.new(irot_table[0], 'P', 'I')
68
- # allocate 4 bytes to store a pointer to the enumerator
69
- enumMoniker = [0].pack('L') # or 0.chr * 4
70
- # create a pointer to the enumerator
71
- return_val_er = enumRunning.call(enumMoniker)
72
- end
73
-
74
- def absolute_path(file) # :nodoc: #
75
- file = File.expand_path(file)
76
- file = RobustExcelOle::Cygwin.cygpath('-w', file) if RUBY_PLATFORM =~ /cygwin/
77
- WIN32OLE.new('Scripting.FileSystemObject').GetAbsolutePathName(file)
78
- end
79
-
80
- def canonize(filename) # :nodoc: #
81
- raise ExcelError, "No string given to canonize, but #{filename.inspect}" unless filename.is_a?(String)
82
- normalize(filename).downcase rescue nil
83
- end
84
-
85
- def normalize(path) # :nodoc: #
86
- path = path.gsub('/./', '/') + '/'
87
- path = path.gsub(/[\/\\]+/, "/")
88
- nil while path.gsub!(/(\/|^)(?!\.\.?)([^\/]+)\/\.\.\//, '\1')
89
- path = path.chomp("/")
90
- path
91
- end
92
-
93
- module_function :absolute_path, :canonize, :rot
94
-
95
- class VBAMethodMissingError < RuntimeError # :nodoc: #
96
- end
97
-
98
- #module RobustExcelOle::Utilites # :nodoc: #
99
-
100
- #end
101
- end
102
-
103
- class Object # :nodoc: #
104
- def excel
105
- raise ExcelError, "receiver instance is neither an Excel nor a Book"
106
- end
107
- end
108
-
109
- class WIN32OLE
110
- end
111
-
112
- class ::String # :nodoc: #
113
- def / path_part
114
- if empty?
115
- path_part
116
- else
117
- if path_part.nil? or path_part.empty?
118
- self
119
- else
120
- begin
121
- File.join self, path_part
122
- rescue TypeError
123
- raise "Only strings can be parts of paths (given: #{path_part.inspect} of class #{path_part.class})"
124
- end
125
- end
126
- end
127
- end
128
-
129
- # taken from http://apidock.com/rails/ActiveSupport/Inflector/underscore
130
- def underscore
131
- word = gsub('::', '/')
132
- word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
133
- word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
134
- word.tr!("-", "_")
135
- word.downcase!
136
- word
137
- end
138
-
139
- # taken from http://apidock.com/rails/ActiveSupport/Inflector/constantize
140
- # File activesupport/lib/active_support/inflector/methods.rb, line 226
141
- def constantize #(camel_cased_word)
142
- names = self.split('::')
143
-
144
- # Trigger a builtin NameError exception including the ill-formed constant in the message.
145
- Object.const_get(self) if names.empty?
146
-
147
- # Remove the first blank element in case of '::ClassName' notation.
148
- names.shift if names.size > 1 && names.first.empty?
149
-
150
- names.inject(Object) do |constant, name|
151
- if constant == Object
152
- constant.const_get(name)
153
- else
154
- candidate = constant.const_get(name)
155
- next candidate if constant.const_defined?(name)
156
- next candidate unless Object.const_defined?(name)
157
-
158
- # Go down the ancestors to check it it's owned
159
- # directly before we reach Object or the end of ancestors.
160
- constant = constant.ancestors.inject do |const, ancestor|
161
- break const if ancestor == Object
162
- break ancestor if ancestor.const_defined?(name)
163
- const
164
- end
165
-
166
- # owner is in Object, so raise
167
- constant.const_get(name)
168
- end
169
- end
170
- end
171
- end
172
-
173
- # taken from http://api.rubyonrails.org/v2.3.8/classes/ActiveSupport/CoreExtensions/Module.html#M000806
174
- class Module # :nodoc: #
175
- def parent_name
176
- unless defined? @parent_name
177
- @parent_name = name =~ /::[^:]+\Z/ ? $`.freeze : nil
178
- end
179
- @parent_name
180
- end
181
- def parent
182
- parent_name ? parent_name.constantize : Object
183
- end
184
- end
185
-
@@ -9,10 +9,11 @@ module RobustExcelOle
9
9
  class Book
10
10
 
11
11
  attr_accessor :excel
12
- attr_accessor :workbook
12
+ attr_accessor :ole_workbook
13
13
  attr_accessor :stored_filename
14
14
  attr_accessor :options
15
15
 
16
+ alias ole_object ole_workbook
16
17
 
17
18
  DEFAULT_OPEN_OPTS = {
18
19
  :excel => :reuse,
@@ -124,7 +125,7 @@ module RobustExcelOle
124
125
  options[:excel] = options[:force_excel] ? options[:force_excel] : options[:default_excel]
125
126
  if file_or_workbook.is_a? WIN32OLE
126
127
  workbook = file_or_workbook
127
- @workbook = workbook
128
+ @ole_workbook = workbook
128
129
  # use the Excel instance where the workbook is opened
129
130
  win32ole_excel = WIN32OLE.connect(workbook.Fullname).Application rescue nil
130
131
  @excel = excel_class.new(win32ole_excel)
@@ -207,35 +208,35 @@ module RobustExcelOle
207
208
  file = @stored_filename ? @stored_filename : file
208
209
  unless File.exist?(file)
209
210
  if options[:if_absent] == :create
210
- @workbook = excel_class.current.generate_workbook(file)
211
+ @ole_workbook = excel_class.current.generate_workbook(file)
211
212
  else
212
213
  raise ExcelErrorOpen, "file #{file.inspect} not found"
213
214
  end
214
215
  end
215
- @workbook = @excel.Workbooks.Item(File.basename(file)) rescue nil
216
- if @workbook then
217
- obstructed_by_other_book = (File.basename(file) == File.basename(@workbook.Fullname)) &&
218
- (not (RobustExcelOle::absolute_path(file) == @workbook.Fullname))
216
+ @ole_workbook = @excel.Workbooks.Item(File.basename(file)) rescue nil
217
+ if @ole_workbook then
218
+ obstructed_by_other_book = (File.basename(file) == File.basename(@ole_workbook.Fullname)) &&
219
+ (not (General::absolute_path(file) == @ole_workbook.Fullname))
219
220
  # if book is obstructed by a book with same name and different path
220
221
  if obstructed_by_other_book then
221
222
  case options[:if_obstructed]
222
223
  when :raise
223
224
  raise ExcelErrorOpen, "blocked by a book with the same name in a different path: #{File.basename(file).inspect}"
224
225
  when :forget
225
- @workbook.Close
226
- @workbook = nil
226
+ @ole_workbook.Close
227
+ @ole_workbook = nil
227
228
  open_or_create_workbook(file, options)
228
229
  when :save
229
- save unless @workbook.Saved
230
- @workbook.Close
231
- @workbook = nil
230
+ save unless @ole_workbook.Saved
231
+ @ole_workbook.Close
232
+ @ole_workbook = nil
232
233
  open_or_create_workbook(file, options)
233
234
  when :close_if_saved
234
- if (not @workbook.Saved) then
235
+ if (not @ole_workbook.Saved) then
235
236
  raise ExcelErrorOpen, "workbook with the same name in a different path is unsaved: #{File.basename(file).inspect}"
236
237
  else
237
- @workbook.Close
238
- @workbook = nil
238
+ @ole_workbook.Close
239
+ @ole_workbook = nil
239
240
  open_or_create_workbook(file, options)
240
241
  end
241
242
  when :new_excel
@@ -248,13 +249,13 @@ module RobustExcelOle
248
249
  end
249
250
  else
250
251
  # book open, not obstructed by an other book, but not saved and writable
251
- if (not @workbook.Saved) then
252
+ if (not @ole_workbook.Saved) then
252
253
  case options[:if_unsaved]
253
254
  when :raise
254
255
  raise ExcelErrorOpen, "workbook is already open but not saved: #{File.basename(file).inspect}"
255
256
  when :forget
256
- @workbook.Close
257
- @workbook = nil
257
+ @ole_workbook.Close
258
+ @ole_workbook = nil
258
259
  open_or_create_workbook(file, options)
259
260
  when :accept
260
261
  # do nothing
@@ -281,9 +282,9 @@ module RobustExcelOle
281
282
  private
282
283
 
283
284
  def open_or_create_workbook(file, options) # :nodoc: #
284
- if ((not @workbook) || (options[:if_unsaved] == :alert) || options[:if_obstructed]) then
285
+ if ((not @ole_workbook) || (options[:if_unsaved] == :alert) || options[:if_obstructed]) then
285
286
  begin
286
- filename = RobustExcelOle::absolute_path(file)
287
+ filename = General::absolute_path(file)
287
288
  begin
288
289
  workbooks = @excel.Workbooks
289
290
  rescue RuntimeError => msg
@@ -315,7 +316,7 @@ module RobustExcelOle
315
316
  begin
316
317
  # workaround for bug in Excel 2010: workbook.Open does not always return
317
318
  # the workbook with given file name
318
- @workbook = workbooks.Item(File.basename(filename))
319
+ @ole_workbook = workbooks.Item(File.basename(filename))
319
320
  rescue WIN32OLERuntimeError
320
321
  raise ExcelErrorOpen, "cannot find the file #{File.basename(filename).inspect}"
321
322
  end
@@ -337,7 +338,7 @@ module RobustExcelOle
337
338
  # @raise ExcelErrorClose if the option :if_unsaved is :raise and the workbook is unsaved, or option is invalid
338
339
  # @raise ExcelErrorCanceled if the user has canceled
339
340
  def close(opts = {:if_unsaved => :raise})
340
- if (alive? && (not @workbook.Saved) && writable) then
341
+ if (alive? && (not @ole_workbook.Saved) && writable) then
341
342
  case opts[:if_unsaved]
342
343
  when :raise
343
344
  raise ExcelErrorClose, "workbook is unsaved: #{File.basename(self.stored_filename).inspect}"
@@ -358,14 +359,14 @@ module RobustExcelOle
358
359
  else
359
360
  close_workbook
360
361
  end
361
- raise ExcelUserCanceled, "close: canceled by user" if alive? && opts[:if_unsaved] == :alert && (not @workbook.Saved)
362
+ raise ExcelUserCanceled, "close: canceled by user" if alive? && opts[:if_unsaved] == :alert && (not @ole_workbook.Saved)
362
363
  end
363
364
 
364
365
  private
365
366
 
366
367
  def close_workbook
367
- @workbook.Close if alive?
368
- @workbook = nil unless alive?
368
+ @ole_workbook.Close if alive?
369
+ @ole_workbook = nil unless alive?
369
370
  end
370
371
 
371
372
  public
@@ -540,7 +541,7 @@ module RobustExcelOle
540
541
  @excel.visible = true
541
542
  begin
542
543
  Win32API.new("user32","SetForegroundWindow","I","I").call(@excel.hwnd) # Excel 2010
543
- @workbook.Activate # Excel 2007
544
+ @ole_workbook.Activate # Excel 2007
544
545
  rescue WIN32OLERuntimeError
545
546
  raise ExcelError, "cannot activate"
546
547
  end
@@ -548,24 +549,24 @@ module RobustExcelOle
548
549
 
549
550
  # returns true, if the workbook is visible, false otherwise
550
551
  def visible
551
- @excel.Windows(@workbook.Name).Visible
552
+ @excel.Windows(@ole_workbook.Name).Visible
552
553
  end
553
554
 
554
555
  # makes a workbook visible or invisible
555
556
  # @param [Boolean] visible_value value that determines whether the workbook shall be visible
556
557
  def visible= visible_value
557
- saved = @workbook.Saved
558
- @excel.Windows(@workbook.Name).Visible = visible_value
558
+ saved = @ole_workbook.Saved
559
+ @excel.Windows(@ole_workbook.Name).Visible = visible_value
559
560
  save if saved
560
561
  end
561
562
 
562
563
  # returns true, if the workbook reacts to methods, false otherwise
563
564
  def alive?
564
565
  begin
565
- @workbook.Name
566
+ @ole_workbook.Name
566
567
  true
567
568
  rescue
568
- @workbook = nil # dead object won't be alive again
569
+ @ole_workbook = nil # dead object won't be alive again
569
570
  #t $!.message
570
571
  false
571
572
  end
@@ -573,15 +574,15 @@ module RobustExcelOle
573
574
 
574
575
  # returns the full file name of the workbook
575
576
  def filename
576
- @workbook.Fullname.tr('\\','/') rescue nil
577
+ @ole_workbook.Fullname.tr('\\','/') rescue nil
577
578
  end
578
579
 
579
580
  def writable # :nodoc: #
580
- (not @workbook.ReadOnly) if @workbook
581
+ (not @ole_workbook.ReadOnly) if @ole_workbook
581
582
  end
582
583
 
583
584
  def saved # :nodoc: #
584
- @workbook.Saved if @workbook
585
+ @ole_workbook.Saved if @ole_workbook
585
586
  end
586
587
 
587
588
  # @return [Boolean] true, if the full book names and excel Instances are identical, false otherwise
@@ -600,9 +601,9 @@ module RobustExcelOle
600
601
  # @return [Boolean] true, if successfully saved, nil otherwise
601
602
  def save
602
603
  raise ExcelErrorSave, "Workbook is not alive" if (not alive?)
603
- raise ExcelErrorSave, "Not opened for writing (opened with :read_only option)" if @workbook.ReadOnly
604
+ raise ExcelErrorSave, "Not opened for writing (opened with :read_only option)" if @ole_workbook.ReadOnly
604
605
  begin
605
- @workbook.Save
606
+ @ole_workbook.Save
606
607
  rescue WIN32OLERuntimeError => msg
607
608
  if msg.message =~ /SaveAs/ and msg.message =~ /Workbook/ then
608
609
  raise ExcelErrorSave, "workbook not saved"
@@ -635,7 +636,7 @@ module RobustExcelOle
635
636
  # @return [Boolean] true, if successfully saved, nil otherwise
636
637
  def save_as(file = nil, opts = { } )
637
638
  raise ExcelErrorSave, "Workbook is not alive" if (not alive?)
638
- raise ExcelErrorSave, "Not opened for writing (opened with :read_only option)" if @workbook.ReadOnly
639
+ raise ExcelErrorSave, "Not opened for writing (opened with :read_only option)" if @ole_workbook.ReadOnly
639
640
  options = {
640
641
  :if_exists => :raise,
641
642
  :if_obstructed => :raise,
@@ -701,7 +702,7 @@ module RobustExcelOle
701
702
  when '.xlsx': RobustExcelOle::XlOpenXMLWorkbook
702
703
  when '.xlsm': RobustExcelOle::XlOpenXMLWorkbookMacroEnabled
703
704
  end
704
- @workbook.SaveAs(RobustExcelOle::absolute_path(file), file_format)
705
+ @ole_workbook.SaveAs(General::absolute_path(file), file_format)
705
706
  bookstore.store(self)
706
707
  rescue WIN32OLERuntimeError => msg
707
708
  if msg.message =~ /SaveAs/ and msg.message =~ /Workbook/ then
@@ -724,7 +725,7 @@ module RobustExcelOle
724
725
  def [] name
725
726
  name += 1 if name.is_a? Numeric
726
727
  begin
727
- sheet_class.new(@workbook.Worksheets.Item(name))
728
+ sheet_class.new(@ole_workbook.Worksheets.Item(name))
728
729
  rescue WIN32OLERuntimeError => msg
729
730
  if msg.message =~ /8002000B/
730
731
  nvalue(name)
@@ -742,7 +743,7 @@ module RobustExcelOle
742
743
  end
743
744
 
744
745
  def each
745
- @workbook.Worksheets.each do |sheet|
746
+ @ole_workbook.Worksheets.each do |sheet|
746
747
  yield sheet_class.new(sheet)
747
748
  end
748
749
  end
@@ -761,10 +762,10 @@ module RobustExcelOle
761
762
  sheet = nil
762
763
  end
763
764
  new_sheet_name = opts.delete(:as)
764
- ws = @workbook.Worksheets
765
+ ws = @ole_workbook.Worksheets
765
766
  after_or_before, base_sheet = opts.to_a.first || [:after, sheet_class.new(ws.Item(ws.Count))]
766
767
  base_sheet = base_sheet.worksheet
767
- sheet ? sheet.Copy({ after_or_before.to_s => base_sheet }) : @workbook.WorkSheets.Add({ after_or_before.to_s => base_sheet })
768
+ sheet ? sheet.Copy({ after_or_before.to_s => base_sheet }) : @ole_workbook.WorkSheets.Add({ after_or_before.to_s => base_sheet })
768
769
  new_sheet = sheet_class.new(@excel.Activesheet)
769
770
  begin
770
771
  new_sheet.name = new_sheet_name if new_sheet_name
@@ -796,7 +797,7 @@ module RobustExcelOle
796
797
  end
797
798
 
798
799
  def inspect # :nodoc: #
799
- "#<Book: " + "#{"not alive " unless alive?}" + "#{File.basename(self.filename) if alive?}" + " #{@workbook} #{@excel}" + ">"
800
+ "#<Book: " + "#{"not alive " unless alive?}" + "#{File.basename(self.filename) if alive?}" + " #{@ole_workbook} #{@excel}" + ">"
800
801
  end
801
802
 
802
803
  def self.in_context(klass) # :nodoc: #
@@ -806,7 +807,7 @@ module RobustExcelOle
806
807
  def self.excel_class # :nodoc: #
807
808
  @excel_class ||= begin
808
809
  module_name = self.parent_name
809
- "#{module_name}::Excel".constantize
810
+ "#{module_name}::Excel".constantsize
810
811
  rescue NameError => e
811
812
  Excel
812
813
  end
@@ -829,21 +830,7 @@ module RobustExcelOle
829
830
  self.class.sheet_class
830
831
  end
831
832
 
832
- def respond_to?(name, include_private = false) # :nodoc: #
833
- raise ExcelError, "respond_to?: workbook not alive" unless alive?
834
- super
835
- end
836
-
837
- #alias old_book_methods methods
838
-
839
- def methods # :nodoc: #
840
- #(old_book_methods + @workbook.ole_methods.map{|m| m.to_s}).uniq
841
- (super + @workbook.ole_methods.map{|m| m.to_s}).uniq
842
- end
843
-
844
- def special_methods # :nodoc: #
845
- (methods - Object.methods).sort
846
- end
833
+ include MethodHelpers
847
834
 
848
835
  private
849
836
 
@@ -851,7 +838,7 @@ module RobustExcelOle
851
838
  if name.to_s[0,1] =~ /[A-Z]/
852
839
  begin
853
840
  raise ExcelError, "method missing: workbook not alive" unless alive?
854
- @workbook.send(name, *args)
841
+ @ole_workbook.send(name, *args)
855
842
  rescue WIN32OLERuntimeError => msg
856
843
  if msg.message =~ /unknown property or method/
857
844
  raise VBAMethodMissingError, "unknown VBA property or method #{name.inspect}"
@@ -863,9 +850,6 @@ module RobustExcelOle
863
850
  super
864
851
  end
865
852
  end
866
-
867
-
868
-
869
853
  end
870
854
 
871
855
  public