robust_excel_ole 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/README.rdoc +266 -71
  2. data/TodoList.md +33 -0
  3. data/examples/edit_sheets/example_adding_sheets.rb +7 -0
  4. data/examples/open_save_close/example_control_to_excel.rb +4 -4
  5. data/examples/open_save_close/example_default_excel.rb +49 -0
  6. data/examples/open_save_close/example_force_excel.rb +34 -0
  7. data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +1 -1
  8. data/examples/open_save_close/example_if_obstructed_forget.rb +3 -3
  9. data/examples/open_save_close/example_if_unsaved_accept.rb +1 -1
  10. data/examples/open_save_close/example_if_unsaved_forget.rb +3 -3
  11. data/examples/open_save_close/example_if_unsaved_forget_more.rb +3 -3
  12. data/examples/open_save_close/example_read_only.rb +1 -1
  13. data/examples/open_save_close/example_rename_cells.rb +69 -0
  14. data/examples/open_save_close/example_reuse.rb +8 -8
  15. data/examples/open_save_close/example_simple.rb +3 -3
  16. data/examples/open_save_close/example_unobtrusively.rb +28 -0
  17. data/examples/save_sheets/example_save_sheets.rb +2 -6
  18. data/lib/robust_excel_ole.rb +18 -0
  19. data/lib/robust_excel_ole/book.rb +356 -123
  20. data/lib/robust_excel_ole/book_store.rb +75 -0
  21. data/lib/robust_excel_ole/excel.rb +105 -53
  22. data/lib/robust_excel_ole/robustexcelole.sublime-project +8 -8
  23. data/lib/robust_excel_ole/sheet.rb +29 -1
  24. data/lib/robust_excel_ole/version.rb +1 -1
  25. data/robust_excel_ole.gemspec +3 -3
  26. data/spec/book_spec.rb +1031 -247
  27. data/spec/book_store_spec.rb +306 -0
  28. data/spec/data/book_with_blank.xls +0 -0
  29. data/spec/data/merge_cells.xls +0 -0
  30. data/spec/data/more_simple.xls +0 -0
  31. data/spec/data/simple.xls +0 -0
  32. data/spec/excel_spec.rb +145 -90
  33. data/spec/sheet_spec.rb +31 -7
  34. metadata +15 -7
data/TodoList.md ADDED
@@ -0,0 +1,33 @@
1
+
2
+ ### immediately
3
+
4
+ --- 2015-04-09 unobtrusively: save book only if it saved: Test
5
+ --- 2015-04-09 unobtrusively: return the block result: implementation and test
6
+ --- 2015-04-09 unobtrusively: namval: return the contents of cells or region with a given name
7
+ --- 2015-04-09 unobtrusively: visible, displayalerts
8
+ --- 2015-04-17 unobtrusively: readonly
9
+
10
+
11
+ ### quick
12
+
13
+ --- 2015-04-02 if_unlocked
14
+ --- 2015-04-02 standard use cases
15
+ --- 2015-04-02 set options: make it dry
16
+
17
+ ### rather quick
18
+
19
+ ### medium
20
+
21
+ ### slow
22
+
23
+ ### done
24
+
25
+ --- 2015-04-01 examples for unobtrusively
26
+ --- 2015-04-01 further tests for unobtrusively
27
+ --- 2015-03-26 connnect: check test outputs
28
+ --- 2015-01-26 simpler implementation of connect
29
+ --- 2015-01-26 reopen with permenent storage
30
+ --- 2015-01-26 tests for unobtrusively
31
+ --- 2015-01-26 unobtrusively
32
+ --- 2015-01-26 option keep_open
33
+ --- 2015-01-26 separate class for book management
@@ -53,6 +53,13 @@ begin
53
53
  @book.add_sheet(@book[3], :as => 'sheet_copy', :after => @book[6])
54
54
  show_sheets
55
55
 
56
+ puts"adding a copy of the 2nd sheet and name it again 'second_sheet_copy'"
57
+ begin
58
+ @book.add_sheet(sheet, :as => 'second_sheet_copy')
59
+ rescue ExcelErrorSheet => msg
60
+ puts "error: add_sheet: #{msg.message}"
61
+ end
62
+
56
63
  @book.close(:if_unsaved => :forget) # close the book without saving it
57
64
 
58
65
  ensure
@@ -12,26 +12,26 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'simple.xls'
14
14
  book = Book.open(file_name) # open a book
15
- Excel.current.Visible = true # make Excel visible
15
+ book.visible = true # make current Excel visible
16
16
  sleep 1
17
17
  sheet = book[0] # access a sheet
18
18
  sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
19
19
  sleep 1
20
20
  begin
21
- new_book = Book.open(file_name, :if_unsaved => :excel) # open another book with the same file name
21
+ new_book = Book.open(file_name, :if_unsaved => :alert) # open another book with the same file name
22
22
  rescue ExcelUserCanceled => msg # if the user chooses not open the book,
23
23
  puts "#{msg.message}" # an exeptions is raised
24
24
  end
25
25
  puts "new book has opened" if new_book
26
26
  Excel.current.Visible = true
27
27
  begin
28
- book.close(:if_unsaved => :excel) # close the unsaved book.
28
+ book.close(:if_unsaved => :alert) # close the unsaved book.
29
29
  rescue ExcelUserCanceled => msg # user is asked whether the unsaved book shall be saved
30
30
  puts "#{msg.message}" # if the user chooses to cancel, then an expeption is raised
31
31
  end
32
32
  if new_book then
33
33
  begin
34
- new_book.save_as(file_name, :if_exists => :excel) # save the new book, if it was opened
34
+ new_book.save_as(file_name, :if_exists => :alert) # save the new book, if it was opened
35
35
  rescue ExcelErrorSave => msg # user is asked, whether the existing file shall be overwritten
36
36
  puts "save_as: #{msg.message}" # if the user chooses "no" or "cancel", an exception is raised
37
37
  end
@@ -0,0 +1,49 @@
1
+ # example_default_excel.rb:
2
+ # reopening books using :default_excel
3
+
4
+ require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
+ require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
+ require "fileutils"
7
+
8
+ include RobustExcelOle
9
+
10
+ Excel.close_all
11
+ begin
12
+ dir = create_tmpdir
13
+ file_name1 = dir + 'simple.xls'
14
+ file_name2 = dir + 'different_simple.xls'
15
+ file_name3 = dir + 'book_with_blank.xls'
16
+ file_name4 = dir + 'merge_cells.xls'
17
+ book1 = Book.open(file_name1) # open a book in a new Excel instance since no Excel is open
18
+ book1.visible = true # make current Excel visible
19
+ sleep 2
20
+ book1.close # close the book
21
+ sleep 2
22
+ book2 = Book.open(file_name1) # reopen the book
23
+ p "book1 == book2" if book2 == book1 # the books are identical
24
+ sleep 2
25
+ new_excel = Excel.new(:reuse => false) # create a new Excel
26
+ book3 = Book.open(file_name2, :default_excel => :reuse, :visible => true) # open another book
27
+ if book3.excel == book2.excel then # since this book cannot be reopened, the option :default_excel applies:
28
+ p "book3 opened in the first Excel" # according to :default_excel => :reuse the book is opened
29
+ end # in the Excel instance the was created first
30
+ sleep 2
31
+ new_excel = Excel.new(:reuse => false)
32
+ book4 = Book.open(file_name3, :default_excel => new_excel, :visible => true) # open another book
33
+ if book4.excel == new_excel then # since this book cannot be reopened, the option :default_excel applies:
34
+ p "book4 opened in the second Excel" # according to :default_excel => new_excel the book is opened
35
+ end # in the given Excel, namely the second Excel instance new_excel
36
+ sleep 2
37
+ book5 = Book.open(file_name4, :default_excel => :new, :visible => true) # open another book
38
+ if ((not book5.excel == book1.excel) && (not book5.excel == new_excel)) then # since this book cannot be reopened,
39
+ p "book5 opened in a third Excel" # the option :default_excel applies. according to :default_excel => :new
40
+ end # the book is opened in a new Excel
41
+ sleep 2
42
+ book5.close
43
+ book4.close
44
+ book3.close
45
+ book2.close
46
+ ensure
47
+ Excel.close_all # close all workbooks, quit Excel instances
48
+ rm_tmp(dir)
49
+ end
@@ -0,0 +1,34 @@
1
+ # example_force_excel.rb:
2
+ # opening books in new or given Excel instances using :force_excel
3
+
4
+ require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
+ require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
+ require "fileutils"
7
+
8
+ include RobustExcelOle
9
+
10
+ Excel.close_all
11
+ begin
12
+ dir = create_tmpdir
13
+ simple_file = dir + 'simple.xls'
14
+ book1 = Book.open(simple_file) # open a book in a new Excel instance since no Excel is open
15
+ book1.visible = true # make current Excel visible
16
+ sleep 2
17
+ book2 = Book.open(simple_file) # open a new book in the same Excel instance
18
+ p "book1 == book2" if book2 == book1 # the books are identical
19
+ sleep 2
20
+ book3 = Book.open(simple_file, :force_excel => :new, :visible => true) # open another book in a new Excel instance, # make Excel visible
21
+ p "book3 != book1" if (not (book3 == book1)) # the books are not identical
22
+ sleep 2
23
+ new_excel = Excel.new(:reuse => false) # create a third Excel instance
24
+ book4 = Book.open(simple_file, :force_excel => new_excel, :visible => true) # open another book in the new Excel instance
25
+ p "book4 != book3 && book4 != book1" if (not (book4 == book3) && (not (book4 == book1)))
26
+ sleep 2 # (Excel chooses the first Excel application)
27
+ book4.close # close the books
28
+ book3.close
29
+ book2.close
30
+ book1.close
31
+ ensure
32
+ Excel.close_all # close all workbooks, quit Excel instances
33
+ rm_tmp(dir)
34
+ end
@@ -21,7 +21,7 @@ begin
21
21
  begin
22
22
  new_book = Book.open(other_file_name, :if_obstructed => :close_if_saved) # raises an exception since the file is not saved
23
23
  rescue ExcelErrorOpen => msg
24
- puts "open: #{msg.message}"
24
+ puts "error: open: #{msg.message}"
25
25
  end
26
26
  book.save # save the unsaved book
27
27
  new_book = Book.open(file_name, :if_obstructed => :close_if_saved) # open the new book, close the saved book
@@ -1,5 +1,5 @@
1
1
  # example_if_obstructed_forget.rb:
2
- # open with :if_obstructed: :forget, :new_app
2
+ # open with :if_obstructed: :forget, :new_excel
3
3
 
4
4
  require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
@@ -17,13 +17,13 @@ begin
17
17
  begin
18
18
  new_book = Book.open(other_file_name) # open a book with the same file name in a different path
19
19
  rescue ExcelErrorOpen => msg # by default: raises an exception
20
- puts "open: #{msg.message}"
20
+ puts "error: open: #{msg.message}"
21
21
  end
22
22
  # open a new book with the same file name in a different path. close the old book before.
23
23
  new_book = Book.open(other_file_name, :if_obstructed => :forget)
24
24
  sleep 3
25
25
  # open another book with the same file name in a different path. Use a new Excel application
26
- another_book = Book.open(file_name, :if_obstructed => :new_app, :visible => true)
26
+ another_book = Book.open(file_name, :if_obstructed => :new_excel, :visible => true)
27
27
  sleep 3
28
28
  new_book.close # close the books
29
29
  another_book.close
@@ -17,7 +17,7 @@ begin
17
17
  begin
18
18
  new_book = Book.open(file_name) # open another book with the same file name
19
19
  rescue ExcelErrorOpen => msg # by default: raises an exception:
20
- puts "open error: #{msg.message}" # a book with the same name is already open and unsaved
20
+ puts "error: open: #{msg.message}" # a book with the same name is already open and unsaved
21
21
  end
22
22
  new_book = Book.open(file_name, :if_unsaved => :accept) # open another book with the same file name
23
23
  # and let the unsaved book open
@@ -1,5 +1,5 @@
1
1
  # example_ifunsaved_forget.rb:
2
- # open with :if_unsaved => :forget, :new_app, close with :if_unsaved => :save
2
+ # open with :if_unsaved => :forget, :new_excel, close with :if_unsaved => :save
3
3
 
4
4
  require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
@@ -12,7 +12,7 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'simple.xls'
14
14
  book = Book.open(file_name) # open a book
15
- Excel.current.Visible = true # make Excel visible
15
+ book.visible = true # make current Excel visible
16
16
  sleep 1
17
17
  sheet = book[0] # access a sheet
18
18
  first_cell = sheet[0,0].value
@@ -27,7 +27,7 @@ begin
27
27
  sleep 1
28
28
  sheet_new_book[0,0] = sheet_new_book[0,0].value == "simple" ? "complex" : "simple" # change a cell
29
29
  # open another book in a new Excel application, and make Excel visible, leaving the unsaved book open
30
- another_book = Book.open(file_name, :if_unsaved => :new_app, :visible => true)
30
+ another_book = Book.open(file_name, :if_unsaved => :new_excel, :visible => true)
31
31
  sleep 3 # leaving the unsaved book open
32
32
  new_book.close(:if_unsaved => :forget )
33
33
  another_book.close
@@ -1,5 +1,5 @@
1
1
  # example_ifunsaved_forget_more.rb:
2
- # open with :if_unsaved => :forget, :new_app, close with :if_unsaved => :save
2
+ # open with :if_unsaved => :forget, :new_excel, close with :if_unsaved => :save
3
3
 
4
4
  require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
5
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
@@ -12,13 +12,13 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'simple.xls'
14
14
  book = Book.open(file_name) # open a book
15
- Excel.current.Visible = true # make Excel visible
15
+ book.visible = true # make current Excel visible
16
16
  sleep 1
17
17
  sheet = book[0] # access a sheet
18
18
  first_cell = sheet[0,0].value
19
19
  sheet[0,0] = first_cell == "simple" ? "complex" : "simple" # change a cell
20
20
  sleep 1
21
- new_book = Book.open(file_name, :if_unsaved => :new_app, :visible => true) # open another book with the same file name in a new Excel
21
+ new_book = Book.open(file_name, :if_unsaved => :new_excel, :visible => true) # open another book with the same file name in a new Excel
22
22
  sheet_new_book = new_book[0]
23
23
  if (not book.alive?) && new_book.alive? && sheet_new_book[0,0].value == first_cell then # check whether the unsaved book
24
24
  puts "open with :if_unsaved => :forget : the unsaved book is closed and not saved." # is closed and was not saved
@@ -19,7 +19,7 @@ begin
19
19
  begin
20
20
  book.save # simple save.
21
21
  rescue ExcelErrorSave => msg # raises an exception because book is opened in read_only mode
22
- puts "save_as error: #{msg.message}"
22
+ puts "error: save_as: #{msg.message}"
23
23
  end
24
24
  book.close # close the book without saving it
25
25
  ensure
@@ -0,0 +1,69 @@
1
+ # example_simple.rb:
2
+ # open a book, simple save, save_as, close
3
+
4
+ require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
5
+ require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
6
+ require "fileutils"
7
+
8
+ include RobustExcelOle
9
+
10
+ Excel.close_all
11
+ begin
12
+ dir = create_tmpdir
13
+ file_name = dir + 'simple.xls'
14
+ book = Book.open(file_name) # open a book. default: :read_only => false
15
+ book.visible = true # make current Excel visible
16
+ sheet = book[0]
17
+ #sheet.Names.Add("Wert","$A$1"
18
+
19
+ workbook = book.workbook
20
+ fullname = workbook.Fullname
21
+ puts "fullname: #{fullname}"
22
+ workbook.Names.Add("a_name", "=$A$1") # rename cell A1 to "a_name"
23
+ number = workbook.Names.Count
24
+ puts "number of name objects :#{number}"
25
+ name_object = workbook.Names("a_name")
26
+ name = name_object.Name
27
+ puts "name: #{name}"
28
+ value = name_object.Value # definition of the cell
29
+ puts "definition: #{value}"
30
+ reference = name_object.RefersTo
31
+ puts "reference: #{reference}"
32
+ visible = name_object.Visible
33
+ puts "visible: #{visible}"
34
+ sleep 2
35
+ workbook.Names("a_name").Name = "new_name"
36
+ new_name_object = workbook.Names("new_name")
37
+ puts "name: #{new_name_object.Name}"
38
+ puts "definition: #{new_name_object.Value}"
39
+ puts "reference: #{new_name_object.RefersTo}"
40
+ puts "visible: #{new_name_object.Visible}"
41
+ sleep 2
42
+ new_name_object.RefersTo = "=$A$2"
43
+ puts "name: #{new_name_object.Name}"
44
+ puts "definition: #{new_name_object.Value}"
45
+ puts "reference: #{new_name_object.RefersTo}"
46
+ puts "visible: #{new_name_object.Visible}"
47
+ sleep 2
48
+ new_name_object.Visible = false
49
+ puts "visible: #{new_name_object.Visible}"
50
+ sleep 2
51
+
52
+ # to do:
53
+ # read, write contents of the cell (under the old name)
54
+ # read, write contents in the cell under the new name
55
+
56
+ #sheet.Cells
57
+ # sheet[0,0].value
58
+ # Worksheets("sheet1").Cells
59
+
60
+ new_name_object.Delete
61
+
62
+ sleep 2
63
+ book.close(:if_unsaved => :forget) # close the book
64
+
65
+ ensure
66
+ Excel.close_all # close workbooks, quit Excel application
67
+ rm_tmp(dir)
68
+ end
69
+
@@ -1,4 +1,4 @@
1
- # example_reuse.rb: open a book in a running Excel application and in a new one. make visible
1
+ # example_reuse.rb: open a book in a new Excel and a running Excel instance. make visible
2
2
 
3
3
  require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
4
  require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
@@ -13,15 +13,15 @@ begin
13
13
  file_name2 = dir + 'different_simple.xls'
14
14
  file_name3 = dir + 'different_simple.xls'
15
15
  file_name4 = dir + 'book_with_blank.xls'
16
- book1 = Book.open(file_name1) # open a book in a new Excel application since no Excel is open
17
- Excel.current.Visible = true # make Excel visible
16
+ book1 = Book.open(file_name1) # open a book in a new Excel instance since no Excel is open
17
+ book1.visible = true # make current Excel visible
18
18
  sleep 2
19
- book2 = Book.open(file_name2) # open a new book in the same Excel application
20
- sleep 2 # (by default: :reuse => true)
21
- book3 = Book.open(file_name3, :reuse => false, :visible => true) # open another book in a new Excel application,
19
+ book2 = Book.open(file_name2) # open a new book in the same Excel instance
20
+ sleep 2
21
+ book3 = Book.open(file_name3, :force_excel => :new, :visible => true) # open another book in a new Excel instance,
22
22
  sleep 2 # make Excel visible
23
- book4 = Book.open(file_name4, :reuse => true, :visible => true) # open anther book, and use a running Excel application
24
- sleep 2 # (Excel chooses the first Excel application)
23
+ book4 = Book.open(file_name4, :visible => true) # open anther book, and use a running Excel application
24
+ sleep 2 # (Excel chooses the first Excel application)
25
25
  book1.close # close the books
26
26
  book2.close
27
27
  book3.close
@@ -12,8 +12,8 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'simple.xls'
14
14
  other_file_name = dir + 'different_simple.xls'
15
- book = Book.open(file_name) # open a book. default: :read_only => false
16
- Excel.current.Visible = true # make Excel visible
15
+ book = Book.open(file_name) # open a book. default: :read_only => false
16
+ book.visible = true # make current Excel visible
17
17
  sheet = book[0] # access a sheet
18
18
  sleep 1
19
19
  sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple" # change a cell
@@ -22,7 +22,7 @@ begin
22
22
  begin
23
23
  book.save_as(other_file_name) # save_as : default :if_exists => :raise
24
24
  rescue ExcelErrorSave => msg
25
- puts "save_as error: #{msg.message}"
25
+ puts "error: save_as: #{msg.message}"
26
26
  end
27
27
  book.save_as(other_file_name, :if_exists => :overwrite) # save_as with :if_exists => :overwrite
28
28
  puts "save_as: saved successfully with option :if_exists => :overwrite"
@@ -0,0 +1,28 @@
1
+ # example_unobtrusively.rb:
2
+
3
+ require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
4
+ require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
5
+ require "fileutils"
6
+
7
+ include RobustExcelOle
8
+
9
+ Excel.close_all
10
+ begin
11
+ dir = create_tmpdir
12
+ simple_file = dir + 'simple.xls'
13
+ book = Book.open(simple_file, :visible => true) # open a book, make Excel visible
14
+ old_sheet = book[0]
15
+ p "1st cell: #{old_sheet[0,0].value}"
16
+ sleep 2
17
+ Book.unobtrusively(simple_file) do |book| # modify the book and keep its status unchanged
18
+ sheet = book[0]
19
+ sheet[0,0] = sheet[0,0].value == "simple" ? "complex" : "simple"
20
+ end
21
+ new_sheet = book[0]
22
+ p "1st cell: #{new_sheet[0,0].value}"
23
+ p "book saved" if book.Saved
24
+ book.close # close the book
25
+ ensure
26
+ Excel.close_all # close all workbooks, quit Excel application
27
+ rm_tmp(dir)
28
+ end
@@ -13,18 +13,14 @@ begin
13
13
  suffix = '.xls'
14
14
  book_name = dir + 'book_with_blank'
15
15
  book = Book.open(book_name + suffix) # open a book with several sheets
16
- Excel.current.Visible = true # make Excel visible
16
+ book.visible = true # make Excel visible
17
17
  i = 0
18
18
  book.each do |sheet|
19
19
  i = i + 1
20
20
  puts "#{i}. sheet:"
21
21
  sheet_name = book_name + "_sheet#{i}"
22
22
  puts "sheet_name: #{sheet_name}"
23
- excel = Excel.create
24
- excel.Workbooks.Add # generate an empty workbook
25
- empty_workbook = excel.Workbooks.Item(1) # save it
26
- empty_workbook.SaveAs(absolute_path(sheet_name), XlExcel8) # close it
27
- empty_workbook.Close
23
+ Excel.generate_workbook absolute_path(sheet_name) # generate an empty workbook
28
24
  sheet_book = Book.open(absolute_path(sheet_name) + suffix) # open the book
29
25
  sheet_book.add_sheet sheet # add the sheet
30
26
  sheet_book.save # save it
@@ -1,5 +1,6 @@
1
1
  require "win32ole"
2
2
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/excel')
3
+ require File.join(File.dirname(__FILE__), 'robust_excel_ole/book_store')
3
4
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/book')
4
5
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/sheet')
5
6
  require File.join(File.dirname(__FILE__), 'robust_excel_ole/cell')
@@ -10,4 +11,21 @@ require File.join(File.dirname(__FILE__), 'robust_excel_ole/version')
10
11
 
11
12
  module RobustExcelOle
12
13
 
14
+ def absolute_path(file)
15
+ file = File.expand_path(file)
16
+ file = RobustExcelOle::Cygwin.cygpath('-w', file) if RUBY_PLATFORM =~ /cygwin/
17
+ WIN32OLE.new('Scripting.FileSystemObject').GetAbsolutePathName(file)
18
+ end
19
+
20
+ def canonize(filename)
21
+ raise "No string given to canonize, but #{filename.inspect}" unless filename.is_a?(String)
22
+ filename.downcase rescue nil
23
+ end
24
+
25
+ module_function :absolute_path, :canonize
26
+
27
+
28
+ class VBAMethodMissingError < RuntimeError # :nodoc: #
29
+ end
30
+
13
31
  end