robust_excel_ole 1.4 → 1.5
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 +6 -0
- data/README.rdoc +7 -1
- data/docs/README_ranges.rdoc +1 -1
- data/lib/reo_console.rb +19 -17
- data/lib/robust_excel_ole.rb +1 -2
- data/lib/robust_excel_ole/bookstore.rb +45 -45
- data/lib/robust_excel_ole/cell.rb +11 -12
- data/lib/robust_excel_ole/cygwin.rb +11 -11
- data/lib/robust_excel_ole/excel.rb +218 -201
- data/lib/robust_excel_ole/general.rb +23 -21
- data/lib/robust_excel_ole/range.rb +18 -19
- data/lib/robust_excel_ole/reo_common.rb +95 -82
- data/lib/robust_excel_ole/version.rb +1 -1
- data/lib/robust_excel_ole/workbook.rb +199 -205
- data/lib/robust_excel_ole/worksheet.rb +33 -56
- data/lib/spec_helper.rb +3 -3
- data/spec/workbook_spec.rb +18 -0
- data/spec/workbook_specs/workbook_misc_spec.rb +2 -2
- data/spec/worksheet_spec.rb +18 -0
- metadata +2 -2
| @@ -26,32 +26,28 @@ module RobustExcelOle | |
| 26 26 | 
             
                # sheet name
         | 
| 27 27 | 
             
                # @returns name of the sheet
         | 
| 28 28 | 
             
                def name
         | 
| 29 | 
            -
                   | 
| 30 | 
            -
             | 
| 31 | 
            -
                   | 
| 32 | 
            -
                    raise SheetREOError, "name #{name.inspect} could not be determined"
         | 
| 33 | 
            -
                  end
         | 
| 29 | 
            +
                  @ole_worksheet.Name
         | 
| 30 | 
            +
                rescue
         | 
| 31 | 
            +
                  raise SheetREOError, "name #{name.inspect} could not be determined"
         | 
| 34 32 | 
             
                end
         | 
| 35 33 |  | 
| 36 34 | 
             
                # sets sheet name
         | 
| 37 | 
            -
                # @param [String] new_name the new name of the sheet | 
| 35 | 
            +
                # @param [String] new_name the new name of the sheet
         | 
| 38 36 | 
             
                def name= (new_name)
         | 
| 39 | 
            -
                   | 
| 40 | 
            -
             | 
| 41 | 
            -
                   | 
| 42 | 
            -
                     | 
| 43 | 
            -
             | 
| 44 | 
            -
                     | 
| 45 | 
            -
                      raise UnexpectedREOError, "unexpected WIN32OLERuntimeError: #{msg.message}"
         | 
| 46 | 
            -
                    end
         | 
| 37 | 
            +
                  @ole_worksheet.Name = new_name
         | 
| 38 | 
            +
                rescue WIN32OLERuntimeError => msg
         | 
| 39 | 
            +
                  if msg.message =~ /800A03EC/
         | 
| 40 | 
            +
                    raise NameAlreadyExists, "sheet name #{new_name.inspect} already exists"
         | 
| 41 | 
            +
                  else
         | 
| 42 | 
            +
                    raise UnexpectedREOError, "unexpected WIN32OLERuntimeError: #{msg.message}"
         | 
| 47 43 | 
             
                  end
         | 
| 48 44 | 
             
                end
         | 
| 49 45 |  | 
| 50 46 | 
             
                # a cell given the defined name or row and column
         | 
| 51 47 | 
             
                # @params row, column, or name
         | 
| 52 | 
            -
                # @returns cell, if row and column are given | 
| 48 | 
            +
                # @returns cell, if row and column are given
         | 
| 53 49 | 
             
                def [] p1, p2 = :__not_provided
         | 
| 54 | 
            -
                  if p2 != :__not_provided | 
| 50 | 
            +
                  if p2 != :__not_provided
         | 
| 55 51 | 
             
                    x, y = p1, p2
         | 
| 56 52 | 
             
                    xy = "#{x}_#{y}"
         | 
| 57 53 | 
             
                    @cells = { }
         | 
| @@ -63,7 +59,7 @@ module RobustExcelOle | |
| 63 59 | 
             
                  else
         | 
| 64 60 | 
             
                    name = p1
         | 
| 65 61 | 
             
                    begin
         | 
| 66 | 
            -
                      namevalue_glob(name) | 
| 62 | 
            +
                      namevalue_glob(name)
         | 
| 67 63 | 
             
                    rescue REOError
         | 
| 68 64 | 
             
                      namevalue(name)
         | 
| 69 65 | 
             
                    end
         | 
| @@ -75,7 +71,7 @@ module RobustExcelOle | |
| 75 71 | 
             
                def []= (p1, p2, p3 = :__not_provided)
         | 
| 76 72 | 
             
                  if p3 != :__not_provided
         | 
| 77 73 | 
             
                    x, y, value = p1, p2, p3
         | 
| 78 | 
            -
                    set_cellval(x,y,value) | 
| 74 | 
            +
                    set_cellval(x,y,value)
         | 
| 79 75 | 
             
                  else
         | 
| 80 76 | 
             
                    name, value = p1, p2
         | 
| 81 77 | 
             
                    begin
         | 
| @@ -106,31 +102,14 @@ module RobustExcelOle | |
| 106 102 |  | 
| 107 103 | 
             
                # sets the value of a cell, if row, column and color of the cell are given
         | 
| 108 104 | 
             
                # @params [Integer] x,y row and column
         | 
| 109 | 
            -
                # @option opts [Symbol] :color the color of the cell when set | 
| 105 | 
            +
                # @option opts [Symbol] :color the color of the cell when set
         | 
| 110 106 | 
             
                def set_cellval(x,y,value, opts = {:color => 0})
         | 
| 111 | 
            -
                   | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
                   | 
| 117 | 
            -
                    raise RangeNotEvaluatable, "cannot assign value #{value.inspect} to cell (#{y.inspect},#{x.inspect})"
         | 
| 118 | 
            -
                  end
         | 
| 119 | 
            -
                end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                # creates a range.
         | 
| 122 | 
            -
                # @params [Address] address  
         | 
| 123 | 
            -
                # @return [Range] a range
         | 
| 124 | 
            -
                def range(address, address2 = :__not_provided)
         | 
| 125 | 
            -
                  address = [address,address2] unless address2 == :__not_provided
         | 
| 126 | 
            -
                  address = Address.new(address)
         | 
| 127 | 
            -
                  begin
         | 
| 128 | 
            -
                    RobustExcelOle::Range.new(@ole_worksheet.Range(
         | 
| 129 | 
            -
                      @ole_worksheet.Cells(address.rows.min, address.columns.min),
         | 
| 130 | 
            -
                      @ole_worksheet.Cells(address.rows.max, address.columns.max)))
         | 
| 131 | 
            -
                  rescue WIN32OLERuntimeError
         | 
| 132 | 
            -
                    raise RangeNotCreated, "cannot create range #{address.inspect}"
         | 
| 133 | 
            -
                  end
         | 
| 107 | 
            +
                  cell = @ole_worksheet.Cells.Item(x, y)
         | 
| 108 | 
            +
                  cell.Interior.ColorIndex = opts[:color] # 42 - aqua-marin, 4-green
         | 
| 109 | 
            +
                  @workbook.modified_cells << cell if @workbook
         | 
| 110 | 
            +
                  cell.Value = value
         | 
| 111 | 
            +
                rescue WIN32OLERuntimeError
         | 
| 112 | 
            +
                  raise RangeNotEvaluatable, "cannot assign value #{value.inspect} to cell (#{y.inspect},#{x.inspect})"
         | 
| 134 113 | 
             
                end
         | 
| 135 114 |  | 
| 136 115 | 
             
                def each
         | 
| @@ -144,9 +123,9 @@ module RobustExcelOle | |
| 144 123 | 
             
                def each_with_index(offset = 0)
         | 
| 145 124 | 
             
                  i = offset
         | 
| 146 125 | 
             
                  each_row do |row_range|
         | 
| 147 | 
            -
                    row_range.each do |cell| | 
| 126 | 
            +
                    row_range.each do |cell|
         | 
| 148 127 | 
             
                      yield cell, i
         | 
| 149 | 
            -
                      i+=1
         | 
| 128 | 
            +
                      i += 1
         | 
| 150 129 | 
             
                    end
         | 
| 151 130 | 
             
                  end
         | 
| 152 131 | 
             
                end
         | 
| @@ -181,15 +160,14 @@ module RobustExcelOle | |
| 181 160 |  | 
| 182 161 | 
             
                def row_range(row, integer_range = nil)
         | 
| 183 162 | 
             
                  integer_range ||= 1..@end_column
         | 
| 184 | 
            -
                  RobustExcelOle::Range.new(@ole_worksheet.Range(@ole_worksheet.Cells(row | 
| 163 | 
            +
                  RobustExcelOle::Range.new(@ole_worksheet.Range(@ole_worksheet.Cells(row, integer_range.min), @ole_worksheet.Cells(row, integer_range.max)))
         | 
| 185 164 | 
             
                end
         | 
| 186 165 |  | 
| 187 166 | 
             
                def col_range(col, integer_range = nil)
         | 
| 188 167 | 
             
                  integer_range ||= 1..@end_row
         | 
| 189 | 
            -
                  RobustExcelOle::Range.new(@ole_worksheet.Range(@ole_worksheet.Cells(integer_range.min | 
| 168 | 
            +
                  RobustExcelOle::Range.new(@ole_worksheet.Range(@ole_worksheet.Cells(integer_range.min, col), @ole_worksheet.Cells(integer_range.max, col)))
         | 
| 190 169 | 
             
                end
         | 
| 191 170 |  | 
| 192 | 
            -
             | 
| 193 171 | 
             
                def self.workbook_class   # :nodoc: #
         | 
| 194 172 | 
             
                  @workbook_class ||= begin
         | 
| 195 173 | 
             
                    module_name = self.parent_name
         | 
| @@ -204,28 +182,28 @@ module RobustExcelOle | |
| 204 182 | 
             
                end
         | 
| 205 183 |  | 
| 206 184 | 
             
                def to_s    # :nodoc: #
         | 
| 207 | 
            -
                   | 
| 185 | 
            +
                  '#<Worksheet: ' + ('not alive ' unless @workbook.alive?).to_s + name.to_s + " #{File.basename(@workbook.stored_filename)} >"
         | 
| 208 186 | 
             
                end
         | 
| 209 187 |  | 
| 210 188 | 
             
                def inspect    # :nodoc: #
         | 
| 211 189 | 
             
                  self.to_s
         | 
| 212 190 | 
             
                end
         | 
| 213 191 |  | 
| 214 | 
            -
             | 
| 192 | 
            +
                private
         | 
| 215 193 |  | 
| 216 194 | 
             
                def method_missing(name, *args)    # :nodoc: #
         | 
| 217 | 
            -
                  if name.to_s[0,1] =~ /[A-Z]/ | 
| 195 | 
            +
                  if name.to_s[0,1] =~ /[A-Z]/
         | 
| 218 196 | 
             
                    begin
         | 
| 219 197 | 
             
                      @ole_worksheet.send(name, *args)
         | 
| 220 198 | 
             
                    rescue WIN32OLERuntimeError => msg
         | 
| 221 199 | 
             
                      if msg.message =~ /unknown property or method/
         | 
| 222 200 | 
             
                        raise VBAMethodMissingError, "unknown VBA property or method #{name.inspect}"
         | 
| 223 | 
            -
                      else | 
| 201 | 
            +
                      else
         | 
| 224 202 | 
             
                        raise msg
         | 
| 225 203 | 
             
                      end
         | 
| 226 204 | 
             
                    end
         | 
| 227 | 
            -
                  else | 
| 228 | 
            -
                    super | 
| 205 | 
            +
                  else
         | 
| 206 | 
            +
                    super
         | 
| 229 207 | 
             
                  end
         | 
| 230 208 | 
             
                end
         | 
| 231 209 |  | 
| @@ -241,13 +219,12 @@ module RobustExcelOle | |
| 241 219 | 
             
                  used_last_column = @ole_worksheet.UsedRange.Columns.Count
         | 
| 242 220 |  | 
| 243 221 | 
             
                  special_last_column >= used_last_column ? special_last_column : used_last_column
         | 
| 244 | 
            -
                end | 
| 222 | 
            +
                end
         | 
| 245 223 |  | 
| 246 224 | 
             
              end
         | 
| 247 225 |  | 
| 248 | 
            -
            public
         | 
| 226 | 
            +
              public
         | 
| 249 227 |  | 
| 250 228 | 
             
              Sheet = Worksheet
         | 
| 251 229 |  | 
| 252 230 | 
             
            end
         | 
| 253 | 
            -
              
         | 
    
        data/lib/spec_helper.rb
    CHANGED
    
    | @@ -1,10 +1,10 @@ | |
| 1 1 | 
             
            # -*- coding: utf-8 -*-
         | 
| 2 | 
            -
            require  | 
| 2 | 
            +
            require 'rspec'
         | 
| 3 3 | 
             
            require 'tmpdir'
         | 
| 4 | 
            -
            require  | 
| 4 | 
            +
            require 'fileutils'
         | 
| 5 5 | 
             
            require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
         | 
| 6 6 |  | 
| 7 | 
            -
            module RobustExcelOle::SpecHelpers | 
| 7 | 
            +
            module RobustExcelOle::SpecHelpers # :nodoc: #
         | 
| 8 8 | 
             
              def create_tmpdir   # :nodoc: #
         | 
| 9 9 | 
             
                tmpdir = Dir.mktmpdir
         | 
| 10 10 | 
             
                FileUtils.cp_r(File.join(File.dirname(__FILE__), 'data'), tmpdir)
         | 
    
        data/spec/workbook_spec.rb
    CHANGED
    
    | @@ -49,6 +49,24 @@ describe Workbook do | |
| 49 49 | 
             
                end
         | 
| 50 50 | 
             
              end
         | 
| 51 51 |  | 
| 52 | 
            +
              describe "Book" do
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                context "with standard options" do
         | 
| 55 | 
            +
                  before do
         | 
| 56 | 
            +
                    @book = Workbook.open(@simple_file)
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  after do
         | 
| 60 | 
            +
                    @book.close
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  it "should say that it lives" do
         | 
| 64 | 
            +
                    @book.should be_alive
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 52 70 | 
             
              describe "Workbook::save" do
         | 
| 53 71 |  | 
| 54 72 | 
             
                it "should save a file, if it is open" do
         | 
| @@ -1078,7 +1078,7 @@ describe Workbook do | |
| 1078 1078 | 
             
                  end
         | 
| 1079 1079 | 
             
                end
         | 
| 1080 1080 |  | 
| 1081 | 
            -
                context " | 
| 1081 | 
            +
                context "range" do
         | 
| 1082 1082 |  | 
| 1083 1083 | 
             
                  before do
         | 
| 1084 1084 | 
             
                    @book1 = Workbook.open(@dir + '/another_workbook.xls', :read_only => true, :visible => true)
         | 
| @@ -1087,7 +1087,7 @@ describe Workbook do | |
| 1087 1087 |  | 
| 1088 1088 | 
             
                  it "should create a range from the name" do
         | 
| 1089 1089 | 
             
                    @book1.add_name("foo",[1..3,1..4])
         | 
| 1090 | 
            -
                    range = @book1. | 
| 1090 | 
            +
                    range = @book1.range("foo")
         | 
| 1091 1091 | 
             
                    range.Address.should == "$A$1:$D$3"
         | 
| 1092 1092 | 
             
                  end
         | 
| 1093 1093 |  | 
    
        data/spec/worksheet_spec.rb
    CHANGED
    
    | @@ -32,6 +32,24 @@ describe Worksheet do | |
| 32 32 | 
             
                rm_tmp(@dir)
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 | 
            +
              describe "Sheet" do
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                describe 'access first and last sheet' do
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  it "should access the first sheet" do
         | 
| 40 | 
            +
                    first_sheet = @book.first_sheet
         | 
| 41 | 
            +
                    first_sheet.name.should == Sheet.new(@book.Sheets.Item(1)).Name
         | 
| 42 | 
            +
                    first_sheet.name.should == @book.sheet(1).Name
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  it "should access the last sheet" do
         | 
| 46 | 
            +
                    last_sheet = @book.last_sheet
         | 
| 47 | 
            +
                    last_sheet.name.should == Sheet.new(@book.Sheets.Item(3)).Name
         | 
| 48 | 
            +
                    last_sheet.name.should == @book.sheet(3).Name
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
             | 
| 35 53 | 
             
              describe ".initialize" do
         | 
| 36 54 | 
             
                context "when open sheet protected(with password is 'protect')" do
         | 
| 37 55 | 
             
                  before do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: robust_excel_ole
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: '1. | 
| 4 | 
            +
              version: '1.5'
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - traths
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-10- | 
| 11 | 
            +
            date: 2018-10-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rspec
         |