robust_excel_ole 1.1 → 1.1.1

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 (38) hide show
  1. checksums.yaml +7 -0
  2. data/Changelog +26 -12
  3. data/README.rdoc +35 -27
  4. data/README_detail.rdoc +66 -50
  5. data/examples/edit_sheets/example_access_sheets_and_cells.rb +4 -4
  6. data/examples/edit_sheets/example_adding_sheets.rb +1 -1
  7. data/examples/edit_sheets/example_concating.rb +2 -2
  8. data/examples/edit_sheets/example_copying.rb +2 -2
  9. data/examples/edit_sheets/example_expanding.rb +2 -2
  10. data/examples/edit_sheets/example_naming.rb +2 -2
  11. data/examples/edit_sheets/example_saving.rb +4 -4
  12. data/examples/open_save_close/example_default_excel.rb +5 -5
  13. data/examples/open_save_close/example_force_excel.rb +4 -4
  14. data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +3 -3
  15. data/examples/open_save_close/example_if_obstructed_forget.rb +4 -4
  16. data/examples/open_save_close/example_if_obstructed_save.rb +3 -3
  17. data/examples/open_save_close/example_if_unsaved_accept.rb +3 -3
  18. data/examples/open_save_close/example_if_unsaved_forget.rb +3 -3
  19. data/examples/open_save_close/example_if_unsaved_forget_more.rb +3 -3
  20. data/examples/open_save_close/example_read_only.rb +1 -1
  21. data/examples/open_save_close/example_rename_cells.rb +1 -1
  22. data/examples/open_save_close/example_reuse.rb +4 -4
  23. data/examples/open_save_close/example_simple.rb +1 -1
  24. data/examples/open_save_close/example_unobtrusively.rb +2 -2
  25. data/lib/reo_console.rb +1 -1
  26. data/lib/robust_excel_ole/book.rb +56 -23
  27. data/lib/robust_excel_ole/excel.rb +35 -25
  28. data/lib/robust_excel_ole/general.rb +1 -1
  29. data/lib/robust_excel_ole/sheet.rb +99 -66
  30. data/lib/robust_excel_ole/version.rb +1 -1
  31. data/reo.bat +1 -1
  32. data/spec/book_spec.rb +7 -1
  33. data/spec/book_specs/book_misc_spec.rb +0 -4
  34. data/spec/data/another_workbook.xls +0 -0
  35. data/spec/data/workbook.xls +0 -0
  36. data/spec/excel_spec.rb +11 -17
  37. data/spec/sheet_spec.rb +11 -11
  38. metadata +38 -60
@@ -13,7 +13,7 @@ begin
13
13
  simple_file = dir + 'workbook.xls'
14
14
  simple_save_file = dir + 'workbook_save.xls'
15
15
  File.delete simple_save_file rescue nil
16
- book = Book.open(simple_file) # open a book
16
+ book = Workbook.open(simple_file) # open a book
17
17
  sheet = book.sheet(1) # access a sheet via integer
18
18
  cell = sheet[1,1] # access the first cell
19
19
  puts "1st cell: #{cell.Value}" # put the value of the first cell
@@ -30,9 +30,9 @@ begin
30
30
  i = i + 1
31
31
  item_name =
32
32
  case enum_method
33
- when :each : "cell"
34
- when :each_row : "row"
35
- when :each_column : "column"
33
+ when :each then "cell"
34
+ when :each_row then "row"
35
+ when :each_column then "column"
36
36
  end
37
37
  puts "#{item_name} #{i}: #{item.Value}" # put values of the item of the sheet
38
38
  end
@@ -13,7 +13,7 @@ begin
13
13
  simple_file = dir + 'workbook.xls'
14
14
  simple_save_file = dir + 'workbook_save.xls'
15
15
  File.delete simple_save_file rescue nil
16
- @book = Book.open(simple_file) # open a book
16
+ @book = Workbook.open(simple_file) # open a book
17
17
 
18
18
  def show_sheets
19
19
  @book.each do |sheet| # access each sheet
@@ -9,7 +9,7 @@ require "fileutils"
9
9
  include RobustExcelOle
10
10
 
11
11
  begin
12
- dir = "C:/data"
12
+ dir = File.expand_path('../../spec/data', File.dirname(__FILE__))
13
13
  workbook_name = 'workbook_named.xls'
14
14
  ws = workbook_name.split(".")
15
15
  base_name = ws[0,ws.length-1].join(".")
@@ -18,7 +18,7 @@ begin
18
18
  extended_file_name = dir + "/" + base_name + "_concat" + "." + suffix
19
19
  FileUtils.copy file_name, extended_file_name
20
20
 
21
- Book.unobtrusively(extended_file_name) do |book|
21
+ Workbook.unobtrusively(extended_file_name) do |book|
22
22
  book.each do |sheet|
23
23
  sheet.each do |cell|
24
24
  name = cell.Name.Name rescue nil
@@ -10,7 +10,7 @@ require "fileutils"
10
10
  include RobustExcelOle
11
11
 
12
12
  begin
13
- dir = "C:/data"
13
+ dir = File.expand_path('../../spec/data', File.dirname(__FILE__))
14
14
  workbook_name = 'another_workbook.xls'
15
15
  ws = workbook_name.split(".")
16
16
  base_name = ws[0,ws.length-1].join(".")
@@ -19,7 +19,7 @@ begin
19
19
  extended_file_name = dir + "/" + base_name + "_copied" + "." + suffix
20
20
  FileUtils.copy file_name, extended_file_name
21
21
 
22
- Book.unobtrusively(extended_file_name) do |book|
22
+ Workbook.unobtrusively(extended_file_name) do |book|
23
23
  book.extend Enumerable
24
24
  sheet_names = book.map { |sheet| sheet.name }
25
25
 
@@ -12,7 +12,7 @@ require "fileutils"
12
12
  include RobustExcelOle
13
13
 
14
14
  begin
15
- dir = "C:/data"
15
+ dir = File.expand_path('../../spec/data', File.dirname(__FILE__))
16
16
  workbook_name = 'workbook_named_concat.xls'
17
17
  ws = workbook_name.split(".")
18
18
  base_name = ws[0,ws.length-1].join(".")
@@ -21,7 +21,7 @@ begin
21
21
  extended_file_name = dir + "/" + base_name + "_expanded" + "." + suffix
22
22
  FileUtils.copy file_name, extended_file_name
23
23
 
24
- Book.unobtrusively(extended_file_name) do |book|
24
+ Workbook.unobtrusively(extended_file_name) do |book|
25
25
  book.extend Enumerable
26
26
  sheet_names = book.map { |sheet| sheet.name }
27
27
 
@@ -10,7 +10,7 @@ require "fileutils"
10
10
  include RobustExcelOle
11
11
 
12
12
  begin
13
- dir = "C:/data"
13
+ dir = File.expand_path('../../spec/data', File.dirname(__FILE__))
14
14
  workbook_name = 'workbook.xls'
15
15
  ws = workbook_name.split(".")
16
16
  base_name = ws[0,ws.length-1].join(".")
@@ -25,7 +25,7 @@ begin
25
25
  extended_file_name = dir + "/" + base_name + "_named" + "." + suffix
26
26
  FileUtils.copy file_name, extended_file_name
27
27
 
28
- Book.unobtrusively(extended_file_name) do |book|
28
+ Workbook.unobtrusively(extended_file_name) do |book|
29
29
  book.each do |sheet|
30
30
  sheet.each do |cell_orig|
31
31
  contents = cell_orig.Value
@@ -9,8 +9,8 @@ include RobustExcelOle
9
9
 
10
10
  begin
11
11
 
12
- dir = "C:/data"
13
- workbook_name = 'workbook_named.xls'
12
+ dir = File.expand_path('../../spec/data', File.dirname(__FILE__))
13
+ workbook_name = 'workbook_new.xls'
14
14
  ws = workbook_name.split(".")
15
15
  base_name = ws[0,ws.length-1].join(".")
16
16
  suffix = ws.last
@@ -21,14 +21,14 @@ begin
21
21
  file_sheet_name = dir + "/" + base_name + "_" + sheet_orig.name + "." + suffix
22
22
  Excel.current.generate_workbook(file_sheet_name)
23
23
  # delete all existing sheets, and add the sheet
24
- book = Book.open(file_sheet_name)
24
+ book = Workbook.open(file_sheet_name)
25
25
  book.add_sheet sheet_orig
26
26
  book.each do |sheet|
27
27
  sheet.Delete unless sheet.name == sheet_orig.name
28
28
  end
29
29
  book.close(:if_unsaved => :save)
30
30
  # alternative: delete all other sheets
31
- #book = Book.open(file_sheet_name, :force => {:excel => :new}, :visible => true)
31
+ #book = Workbook.open(file_sheet_name, :force => {:excel => :new}, :visible => true)
32
32
  #book.each do |sheet|
33
33
  # book.sheet(sheet.Name).Delete() unless sheet.Name == sheet_orig.Name
34
34
  #end
@@ -14,27 +14,27 @@ begin
14
14
  file_name2 = dir + 'different_workbook.xls'
15
15
  file_name3 = dir + 'book_with_blank.xls'
16
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
17
+ book1 = Workbook.open(file_name1) # open a book in a new Excel instance since no Excel is open
18
18
  book1.excel.visible = true # make current Excel visible
19
19
  sleep 2
20
20
  book1.close # close the book
21
21
  sleep 2
22
- book2 = Book.open(file_name1) # reopen the book
22
+ book2 = Workbook.open(file_name1) # reopen the book
23
23
  p "book1 == book2" if book2 == book1 # the books are identical
24
24
  sleep 2
25
25
  new_excel = Excel.new(:reuse => false) # create a new Excel
26
- book3 = Book.open(file_name2, :default => {:excel => :current}, :visible => true) # open another book
26
+ book3 = Workbook.open(file_name2, :default => {:excel => :current}, :visible => true) # open another book
27
27
  if book3.excel == book2.excel then # since this book cannot be reopened, the option :default => {:excel} applies:
28
28
  p "book3 opened in the first Excel" # according to :default => {:excel => :current} the book is opened
29
29
  end # in the Excel instance the was created first
30
30
  sleep 2
31
31
  new_excel = Excel.new(:reuse => false)
32
- book4 = Book.open(file_name3, :default => {:excel => new_excel}, :visible => true) # open another book
32
+ book4 = Workbook.open(file_name3, :default => {:excel => new_excel}, :visible => true) # open another book
33
33
  if book4.excel == new_excel then # since this book cannot be reopened, the option :default_excel applies:
34
34
  p "book4 opened in the second Excel" # according to :default_excel => new_excel the book is opened
35
35
  end # in the given Excel, namely the second Excel instance new_excel
36
36
  sleep 2
37
- book5 = Book.open(file_name4, :default => {:excel => :new}, :visible => true) # open another book
37
+ book5 = Workbook.open(file_name4, :default => {:excel => :new}, :visible => true) # open another book
38
38
  if ((not book5.excel == book1.excel) && (not book5.excel == new_excel)) then # since this book cannot be reopened,
39
39
  p "book5 opened in a third Excel" # the option :default_excel applies. according to :default_excel => :new
40
40
  end # the book is opened in a new Excel
@@ -11,17 +11,17 @@ Excel.close_all
11
11
  begin
12
12
  dir = create_tmpdir
13
13
  simple_file = dir + 'workbook.xls'
14
- book1 = Book.open(simple_file) # open a book in a new Excel instance since no Excel is open
14
+ book1 = Workbook.open(simple_file) # open a book in a new Excel instance since no Excel is open
15
15
  book1.excel.visible = true # make current Excel visible
16
16
  sleep 2
17
- book2 = Book.open(simple_file) # open a new book in the same Excel instance
17
+ book2 = Workbook.open(simple_file) # open a new book in the same Excel instance
18
18
  p "book1 == book2" if book2 == book1 # the books are identical
19
19
  sleep 2
20
- book3 = Book.open(simple_file, :force => {:excel => :new, :visible => true}) # open another book in a new Excel instance,
20
+ book3 = Workbook.open(simple_file, :force => {:excel => :new, :visible => true}) # open another book in a new Excel instance,
21
21
  p "book3 != book1" if (not (book3 == book1)) # the books are not identical
22
22
  sleep 2
23
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
24
+ book4 = Workbook.open(simple_file, :force => {:excel => new_excel, :visible => true}) # open another book in the new Excel instance
25
25
  p "book4 != book3 && book4 != book1" if (not (book4 == book3) && (not (book4 == book1)))
26
26
  sleep 2 # (Excel chooses the first Excel application)
27
27
  book4.close # close the books
@@ -12,19 +12,19 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
14
  other_file_name = dir + 'more_data/workbook.xls'
15
- book = Book.open(file_name, :visible => true) # open a book, make Excel visible
15
+ book = Workbook.open(file_name, :visible => true) # open a book, make Excel visible
16
16
  sleep 1
17
17
  sheet = book.sheet(1)
18
18
  first_cell = sheet[1,1].Value # access a sheet
19
19
  sheet[1,1] = first_cell == "simple" ? "complex" : "simple" # change a cell
20
20
  sleep 1
21
21
  begin
22
- new_book = Book.open(other_file_name, :if_obstructed => :close_if_saved) # raises an exception since the file is not saved
22
+ new_book = Workbook.open(other_file_name, :if_obstructed => :close_if_saved) # raises an exception since the file is not saved
23
23
  rescue WorkbookNotSaved => msg
24
24
  puts "error: open: #{msg.message}"
25
25
  end
26
26
  book.save # save the unsaved book
27
- new_book = Book.open(file_name, :if_obstructed => :close_if_saved) # open the new book, close the saved book
27
+ new_book = Workbook.open(file_name, :if_obstructed => :close_if_saved) # open the new book, close the saved book
28
28
  sleep 1
29
29
  new_sheet = new_book.sheet(1)
30
30
  new_first_cell = new_sheet[1,1].Value
@@ -12,18 +12,18 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
14
  other_file_name = dir + 'more_data/workbook.xls'
15
- book = Book.open(file_name, :visible => true) # open a book, make Excel application visible
15
+ book = Workbook.open(file_name, :visible => true) # open a book, make Excel application visible
16
16
  sleep 3
17
17
  begin
18
- new_book = Book.open(other_file_name) # open a book with the same file name in a different path
18
+ new_book = Workbook.open(other_file_name) # open a book with the same file name in a different path
19
19
  rescue WorkbookBlocked => msg # by default: raises an exception
20
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
- new_book = Book.open(other_file_name, :if_obstructed => :forget)
23
+ new_book = Workbook.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_excel, :visible => true)
26
+ another_book = Workbook.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
@@ -12,15 +12,15 @@ begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
14
  other_file_name = dir + 'more_data/workbook.xls'
15
- book = Book.open(file_name, :visible => true) # open a book, make Excel visible
15
+ book = Workbook.open(file_name, :visible => true) # open a book, make Excel visible
16
16
  sleep 1
17
17
  sheet = book.sheet(1)
18
18
  first_cell = sheet[1,1].value # access a sheet
19
19
  sheet[1,1] = first_cell == "simple" ? "complex" : "simple" # change a cell
20
20
  sleep 1
21
- new_book = Book.open(other_file_name, :if_obstructed => :save) # open a book with the same file name in a different path
21
+ new_book = Workbook.open(other_file_name, :if_obstructed => :save) # open a book with the same file name in a different path
22
22
  sleep 1 #save the old book, close it, before
23
- old_book = Book.open(file_name, :if_obstructed => :forget ,:visible => true) # open the old book
23
+ old_book = Workbook.open(file_name, :if_obstructed => :forget ,:visible => true) # open the old book
24
24
  sleep 1
25
25
  old_sheet = old_book.sheet(1)
26
26
  old_first_cell = old_sheet[1,1].value
@@ -11,15 +11,15 @@ Excel.close_all
11
11
  begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
- book = Book.open(file_name) # open a book
14
+ book = Workbook.open(file_name) # open a book
15
15
  sheet = book.sheet(1) # access a sheet
16
16
  sheet[1,1] = sheet[1,1].value == "simple" ? "complex" : "simple" # change a cell
17
17
  begin
18
- new_book = Book.open(file_name) # open another book with the same file name
18
+ new_book = Workbook.open(file_name) # open another book with the same file name
19
19
  rescue WorkbookBeingUsed => msg # by default: raises an exception:
20
20
  puts "error: open: #{msg.message}" # a book with the same name is already open and unsaved
21
21
  end
22
- new_book = Book.open(file_name, :if_unsaved => :accept) # open another book with the same file name
22
+ new_book = Workbook.open(file_name, :if_unsaved => :accept) # open another book with the same file name
23
23
  # and let the unsaved book open
24
24
  if book.alive? && new_book.alive? then # check whether the referenced workbooks
25
25
  puts "open with :if_unsaved => :accept : the two books are alive." # respond to methods
@@ -11,14 +11,14 @@ Excel.close_all
11
11
  begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
- book = Book.open(file_name) # open a book
14
+ book = Workbook.open(file_name) # open a book
15
15
  book.excel.visible = true # make current Excel visible
16
16
  sleep 1
17
17
  sheet = book.sheet(1) # access a sheet
18
18
  first_cell = sheet[1,1].value
19
19
  sheet[1,1] = first_cell == "simple" ? "complex" : "simple" # change a cell
20
20
  sleep 1
21
- new_book = Book.open(file_name, :if_unsaved => :forget) # open another book with the same file name
21
+ new_book = Workbook.open(file_name, :if_unsaved => :forget) # open another book with the same file name
22
22
  # and close the unsaved book without saving it
23
23
  sheet_new_book = new_book.sheet(1)
24
24
  if (not book.alive?) && new_book.alive? && sheet_new_book[1,1].value == first_cell then # check whether the unsaved book
@@ -27,7 +27,7 @@ begin
27
27
  sleep 1
28
28
  sheet_new_book[1,1] = sheet_new_book[1,1].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_excel, :visible => true)
30
+ another_book = Workbook.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
@@ -11,13 +11,13 @@ Excel.kill_all
11
11
  begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
- book = Book.open(file_name) # open a book
14
+ book = Workbook.open(file_name) # open a book
15
15
  book.excel.visible = true # make current Excel visible
16
16
  sheet = book.sheet(1) # access a sheet
17
17
  first_cell = sheet[1,1].value
18
18
  sheet[1,1] = first_cell == "simple" ? "complex" : "simple" # change a cell
19
19
  sleep 1
20
- new_book = Book.open(file_name, :if_unsaved => :new_excel, :visible => true) # open another book with the same file name in a new Excel
20
+ new_book = Workbook.open(file_name, :if_unsaved => :new_excel, :visible => true) # open another book with the same file name in a new Excel
21
21
  sheet_new_book = new_book.sheet(1)
22
22
  if (not book.alive?) && new_book.alive? && sheet_new_book[1,1].value == first_cell then # check whether the unsaved book
23
23
  puts "open with :if_unsaved => :forget : the unsaved book is closed and not saved." # is closed and was not saved
@@ -25,7 +25,7 @@ begin
25
25
  sleep 1
26
26
  sheet_new_book[1,1] = sheet_new_book[1,1].value == "simple" ? "complex" : "simple" # change a cell
27
27
  # open another book in the running Excel application, and make Excel visible, closing the unsaved book
28
- another_book = Book.open(file_name, :if_unsaved => :forget, :visible => true)
28
+ another_book = Workbook.open(file_name, :if_unsaved => :forget, :visible => true)
29
29
  sleep 1
30
30
  sheet_another_book = another_book.sheet(1)
31
31
  sheet_another_book[1,1] = sheet_another_book[1,1].value == "simple" ? "complex" : "simple" # change a cell
@@ -11,7 +11,7 @@ begin
11
11
  dir = create_tmpdir
12
12
  file_name = dir + 'workbook.xls'
13
13
  other_file_name = dir + 'different_workbook.xls'
14
- book = Book.open(file_name, :read_only => true, :visible => true) # open a book with read_only and make Excel visible
14
+ book = Workbook.open(file_name, :read_only => true, :visible => true) # open a book with read_only and make Excel visible
15
15
  sheet = book.sheet(1) # access a sheet
16
16
  sleep 1
17
17
  sheet[1,1] = sheet[1,1].value == "simple" ? "complex" : "simple" # change a cell
@@ -11,7 +11,7 @@ Excel.close_all
11
11
  begin
12
12
  dir = create_tmpdir
13
13
  file_name = dir + 'workbook.xls'
14
- book = Book.open(file_name) # open a book. default: :read_only => false
14
+ book = Workbook.open(file_name) # open a book. default: :read_only => false
15
15
  book.excel.visible = true # make current Excel visible
16
16
  sheet = book.sheet(1)
17
17
  workbook = book.ole_workbook
@@ -13,14 +13,14 @@ begin
13
13
  file_name2 = dir + 'different_workbook.xls'
14
14
  file_name3 = dir + 'different_workbook.xls'
15
15
  file_name4 = dir + 'book_with_blank.xls'
16
- book1 = Book.open(file_name1) # open a book in a new Excel instance since no Excel is open
16
+ book1 = Workbook.open(file_name1) # open a book in a new Excel instance since no Excel is open
17
17
  book1.excel.visible = true # make current Excel visible
18
18
  sleep 2
19
- book2 = Book.open(file_name2) # open a new book in the same Excel instance
19
+ book2 = Workbook.open(file_name2) # open a new book in the same Excel instance
20
20
  sleep 2
21
- book3 = Book.open(file_name3, :force_excel => :new, :visible => true) # open another book in a new Excel instance,
21
+ book3 = Workbook.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, :visible => true) # open anther book, and use a running Excel application
23
+ book4 = Workbook.open(file_name4, :visible => true) # open anther book, and use a running Excel application
24
24
  sleep 2 # (Excel chooses the first Excel application)
25
25
  book1.close # close the books
26
26
  book2.close
@@ -16,7 +16,7 @@ begin
16
16
  dir = create_tmpdir
17
17
  file_name = dir + 'workbook.xls'
18
18
  other_file_name = dir + 'different_workbook.xls'
19
- book = Book.open(file_name) # open a book. default: :read_only => false
19
+ book = Workbook.open(file_name) # open a book. default: :read_only => false
20
20
  book.excel.visible = true # make current Excel visible
21
21
  sheet = book.sheet(1) # access a sheet
22
22
  sleep 1
@@ -10,11 +10,11 @@ Excel.close_all
10
10
  begin
11
11
  dir = create_tmpdir
12
12
  simple_file = dir + 'workbook.xls'
13
- book = Book.open(simple_file, :visible => true) # open a book, make Excel visible
13
+ book = Workbook.open(simple_file, :visible => true) # open a book, make Excel visible
14
14
  old_sheet = book.sheet(1)
15
15
  p "1st cell: #{old_sheet[1,1].value}"
16
16
  sleep 2
17
- Book.unobtrusively(simple_file) do |book| # modify the book and keep its status unchanged
17
+ Workbook.unobtrusively(simple_file) do |book| # modify the book and keep its status unchanged
18
18
  sheet = book.sheet(1)
19
19
  sheet[1,1] = sheet[1,1].value == "simple" ? "complex" : "simple"
20
20
  end
data/lib/reo_console.rb CHANGED
@@ -1,4 +1,4 @@
1
- #require 'lib/robust_excel_ole'
1
+ #require '../robust_excel_ole/lib/robust_excel_ole'
2
2
  include REO
3
3
  #include RobustExcelOle
4
4
  include General
@@ -541,11 +541,13 @@ module RobustExcelOle
541
541
  end
542
542
 
543
543
  # simple save of a workbook.
544
+ # @option opts [Boolean] states, whether colored ranges shall be discolored
544
545
  # @return [Boolean] true, if successfully saved, nil otherwise
545
- def save
546
+ def save(opts = {:discoloring => false})
546
547
  raise ObjectNotAlive, "workbook is not alive" if (not alive?)
547
548
  raise WorkbookReadOnly, "Not opened for writing (opened with :read_only option)" if @ole_workbook.ReadOnly
548
549
  begin
550
+ discoloring if opts[:discoloring]
549
551
  @ole_workbook.Save
550
552
  rescue WIN32OLERuntimeError => msg
551
553
  if msg.message =~ /SaveAs/ and msg.message =~ /Workbook/ then
@@ -553,7 +555,7 @@ module RobustExcelOle
553
555
  else
554
556
  raise UnexpectedError, "unknown WIN32OLERuntimeError:\n#{msg.message}"
555
557
  end
556
- end
558
+ end
557
559
  true
558
560
  end
559
561
 
@@ -573,6 +575,7 @@ module RobustExcelOle
573
575
  # :save -> saves the blocking workbook and closes it
574
576
  # :close_if_saved -> closes the blocking workbook, if it is saved,
575
577
  # otherwise raises an exception
578
+ # :discoloring states, wheter colored ranges shall be discolored
576
579
  # @return [Book], the book itself, if successfully saved, raises an exception otherwise
577
580
  def save_as(file, opts = { } )
578
581
  raise FileNameNotGiven, "filename is nil" if file.nil?
@@ -586,7 +589,7 @@ module RobustExcelOle
586
589
  case options[:if_exists]
587
590
  when :overwrite
588
591
  if file == self.filename
589
- save
592
+ save({:discoloring => opts[:discoloring]})
590
593
  return self
591
594
  else
592
595
  begin
@@ -628,6 +631,10 @@ module RobustExcelOle
628
631
 
629
632
  private
630
633
 
634
+ def discoloring
635
+ self.each{|sheet| sheet.each{|cell| cell.Interior.ColorIndex = XlNone}}
636
+ end
637
+
631
638
  def save_as_workbook(file, options) # :nodoc: #
632
639
  begin
633
640
  dirname, basename = File.split(file)
@@ -637,6 +644,7 @@ module RobustExcelOle
637
644
  when '.xlsx'; RobustExcelOle::XlOpenXMLWorkbook
638
645
  when '.xlsm'; RobustExcelOle::XlOpenXMLWorkbookMacroEnabled
639
646
  end
647
+ discoloring if options[:discoloring]
640
648
  @ole_workbook.SaveAs(General::absolute_path(file), file_format)
641
649
  bookstore.store(self)
642
650
  rescue WIN32OLERuntimeError => msg
@@ -653,7 +661,15 @@ module RobustExcelOle
653
661
 
654
662
  # closes a given file if it is open
655
663
  def self.close(file, opts = {:if_unsaved => :raise})
664
+ #puts "self.close:"
665
+ #puts "file: #{file}"
666
+ #begin
667
+ # bookstore.fetch(file)
668
+ #rescue
669
+ # puts "#{$!.message}"
670
+ #end
656
671
  book = bookstore.fetch(file) rescue nil
672
+ #puts "book after fetch: #{book.inspect}"
657
673
  book.close(opts) if book && book.alive?
658
674
  end
659
675
 
@@ -685,6 +701,14 @@ module RobustExcelOle
685
701
  yield sheet_class.new(sheet)
686
702
  end
687
703
  end
704
+
705
+ def each_with_index(offset = 0)
706
+ i = offset
707
+ @ole_workbook.Worksheets.each do |sheet|
708
+ yield sheet_class.new(sheet), i
709
+ i += 1
710
+ end
711
+ end
688
712
 
689
713
  # copies a sheet to another position
690
714
  # default: copied sheet is appended
@@ -761,7 +785,7 @@ module RobustExcelOle
761
785
  # @param [String] name the name of the range
762
786
  # @param [Variant] value the contents of the range
763
787
  def []= (name, value)
764
- set_nameval(name,value)
788
+ set_nameval(name,value, :color => 42) # 42 - aqua-marin, 4-green
765
789
  end
766
790
 
767
791
  # returns the contents of a range with given name
@@ -774,46 +798,55 @@ module RobustExcelOle
774
798
  # @option opts [Symbol] :default the default value that is provided if no contents could be returned
775
799
  # @return [Variant] the contents of a range with given name
776
800
  def nameval(name, opts = {:default => nil})
777
- default_val = opts[:default]
778
- begin
779
- name_obj = self.Names.Item(name)
780
- rescue WIN32OLERuntimeError
781
- return default_val if default_val
782
- raise NameNotFound, "name #{name.inspect} not in #{File.basename(self.stored_filename).inspect}"
783
- end
784
- begin
785
- value = name_obj.RefersToRange.Value
801
+ name_obj = name_object(name)
802
+ value = begin
803
+ name_obj.RefersToRange.Value
786
804
  rescue WIN32OLERuntimeError
787
805
  begin
788
- value = self.sheet(1).Evaluate(name_obj.Name)
806
+ self.sheet(1).Evaluate(name_obj.Name)
789
807
  rescue WIN32OLERuntimeError
790
- return default_val if default_val
808
+ return opts[:default] if opts[:default]
791
809
  raise RangeNotEvaluatable, "cannot evaluate range named #{name.inspect} in #{File.basename(self.stored_filename).inspect}"
792
810
  end
793
811
  end
794
812
  if value.is_a?(Bignum) #RobustExcelOle::XlErrName
795
- return default_val if default_val
813
+ return opts[:default] if opts[:default]
796
814
  raise RangeNotEvaluatable, "cannot evaluate range named #{name.inspect} in #{File.basename(self.stored_filename).inspect}"
797
815
  end
798
- return default_val if default_val && value.nil?
816
+ return opts[:default] if opts[:default] && value.nil?
799
817
  value
800
818
  end
801
819
 
802
820
  # sets the contents of a range
803
821
  # @param [String] name the name of a range
804
822
  # @param [Variant] value the contents of the range
805
- def set_nameval(name, value)
823
+ # @param [FixNum] color the color when setting a value
824
+ # @param [Hash] opts :color [FixNum] the color when setting the contents
825
+ def set_nameval(name, value, opts = {:color => 0})
806
826
  begin
807
- name_obj = self.Names.Item(name)
827
+ cell = name_object(name).RefersToRange
828
+ cell.Interior.ColorIndex = opts[:color]
829
+ cell.Value = value
808
830
  rescue WIN32OLERuntimeError
809
- raise NameNotFound, "name #{name.inspect} not in #{File.basename(self.stored_filename).inspect}"
831
+ raise RangeNotEvaluatable, "cannot assign value to range named #{name.inspect} in #{File.basename(self.stored_filename).inspect}"
810
832
  end
833
+ end
834
+
835
+ private
836
+
837
+ def name_object(name)
811
838
  begin
812
- name_obj.RefersToRange.Value = value
839
+ self.Parent.Names.Item(name)
813
840
  rescue WIN32OLERuntimeError
814
- raise RangeNotEvaluatable, "cannot assign value to range named #{name.inspect} in #{File.basename(self.stored_filename).inspect}"
841
+ begin
842
+ self.Names.Item(name)
843
+ rescue WIN32OLERuntimeError
844
+ raise NameNotFound, "name #{name.inspect} not in #{File.basename(self.stored_filename).inspect}"
845
+ end
815
846
  end
816
- end
847
+ end
848
+
849
+ public
817
850
 
818
851
  # renames a range
819
852
  # @param [String] name the previous range name