robust_excel_ole 0.3.4 → 0.3.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.
- data/README.rdoc +73 -26
- data/README_detail.rdoc +92 -27
- data/examples/edit_sheets/example_access_sheets_and_cells.rb +3 -3
- data/examples/edit_sheets/example_concating.rb +12 -12
- data/examples/edit_sheets/example_copying.rb +47 -0
- data/examples/edit_sheets/example_expanding.rb +17 -26
- data/examples/edit_sheets/example_naming.rb +13 -10
- data/examples/edit_sheets/example_ranges.rb +2 -2
- data/examples/edit_sheets/example_saving.rb +8 -14
- data/examples/open_save_close/example_control_to_excel.rb +1 -1
- data/examples/open_save_close/example_if_obstructed_closeifsaved.rb +3 -3
- data/examples/open_save_close/example_if_obstructed_save.rb +3 -3
- data/examples/open_save_close/example_if_unsaved_accept.rb +1 -1
- data/examples/open_save_close/example_if_unsaved_forget.rb +4 -4
- data/examples/open_save_close/example_if_unsaved_forget_more.rb +5 -5
- data/examples/open_save_close/example_read_only.rb +1 -1
- data/examples/open_save_close/example_rename_cells.rb +1 -13
- data/examples/open_save_close/example_simple.rb +1 -1
- data/examples/open_save_close/example_unobtrusively.rb +3 -3
- data/lib/robust_excel_ole.rb +81 -2
- data/lib/robust_excel_ole/book.rb +171 -118
- data/lib/robust_excel_ole/{book_store.rb → bookstore.rb} +2 -2
- data/lib/robust_excel_ole/excel.rb +153 -24
- data/lib/robust_excel_ole/range.rb +2 -2
- data/lib/robust_excel_ole/sheet.rb +84 -35
- data/lib/robust_excel_ole/version.rb +1 -1
- data/reo.bat +3 -0
- data/spec/book_close_spec.rb +179 -0
- data/spec/book_misc_spec.rb +365 -0
- data/spec/book_open_spec.rb +793 -0
- data/spec/book_save_spec.rb +257 -0
- data/spec/book_sheet_spec.rb +160 -0
- data/spec/book_spec.rb +145 -1533
- data/spec/book_subclass_spec.rb +50 -0
- data/spec/book_unobtr_spec.rb +950 -0
- data/spec/{book_store_spec.rb → bookstore_spec.rb} +5 -5
- data/spec/cell_spec.rb +6 -6
- data/spec/data/{more_workbook.xls → another_workbook.xls} +0 -0
- data/spec/data/different_workbook.xls +0 -0
- data/spec/data/workbook.xls +0 -0
- data/spec/data/workbook.xlsm +0 -0
- data/spec/data/workbook.xlsx +0 -0
- data/spec/data/workbook_linked.xlsm +0 -0
- data/spec/data/workbook_linked_sub.xlsm +0 -0
- data/spec/excel_spec.rb +204 -5
- data/spec/range_spec.rb +6 -6
- data/spec/sheet_spec.rb +122 -34
- metadata +18 -8
- data/spec/data/workbook_connected_sub.xlsm +0 -0
| @@ -35,7 +35,7 @@ class Book | |
| 35 35 | 
             
            end
         | 
| 36 36 |  | 
| 37 37 |  | 
| 38 | 
            -
            describe  | 
| 38 | 
            +
            describe Bookstore do
         | 
| 39 39 |  | 
| 40 40 | 
             
              before(:all) do
         | 
| 41 41 | 
             
                excel = Excel.new(:reuse => true)
         | 
| @@ -45,7 +45,7 @@ describe BookStore do | |
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 47 | 
             
              before do
         | 
| 48 | 
            -
                @bookstore =  | 
| 48 | 
            +
                @bookstore = Bookstore.new
         | 
| 49 49 | 
             
                @dir = create_tmpdir
         | 
| 50 50 | 
             
                @simple_file = @dir + '/workbook.xls'
         | 
| 51 51 | 
             
                @simple_save_file = @dir + '/workbook_save.xls'
         | 
| @@ -62,9 +62,9 @@ describe BookStore do | |
| 62 62 | 
             
                context "with standard" do
         | 
| 63 63 | 
             
                  it "should create book store" do
         | 
| 64 64 | 
             
                    expect {
         | 
| 65 | 
            -
                      @book_store =  | 
| 65 | 
            +
                      @book_store = Bookstore.new
         | 
| 66 66 | 
             
                    }.to_not raise_error
         | 
| 67 | 
            -
                    @book_store.should be_a  | 
| 67 | 
            +
                    @book_store.should be_a Bookstore
         | 
| 68 68 | 
             
                  end
         | 
| 69 69 | 
             
                end
         | 
| 70 70 | 
             
              end
         | 
| @@ -273,7 +273,7 @@ describe BookStore do | |
| 273 273 | 
             
                    @bookstore.store(@book2)
         | 
| 274 274 | 
             
                    @bookstore.store(@book3)
         | 
| 275 275 | 
             
                    sheet = @book3[0]
         | 
| 276 | 
            -
                    sheet[ | 
| 276 | 
            +
                    sheet[1,1] = sheet[1,1].Value == "foo" ? "bar" : "foo"
         | 
| 277 277 | 
             
                    @book.ReadOnly.should be_true
         | 
| 278 278 | 
             
                    @book2.ReadOnly.should be_false
         | 
| 279 279 | 
             
                    @book3.ReadOnly.should be_true
         | 
    
        data/spec/cell_spec.rb
    CHANGED
    
    | @@ -22,7 +22,7 @@ describe RobustExcelOle::Cell do | |
| 22 22 | 
             
                before do
         | 
| 23 23 | 
             
                  @book = RobustExcelOle::Book.open(@dir + '/workbook.xls', :read_only => true)
         | 
| 24 24 | 
             
                  @sheet = @book[1]
         | 
| 25 | 
            -
                  @cell = @sheet[ | 
| 25 | 
            +
                  @cell = @sheet[1, 1]
         | 
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 28 | 
             
                after do
         | 
| @@ -61,14 +61,14 @@ describe RobustExcelOle::Cell do | |
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 63 | 
             
                it "merged cell get same value" do
         | 
| 64 | 
            -
                  @sheet[ | 
| 65 | 
            -
                  @sheet[ | 
| 64 | 
            +
                  @sheet[1, 1].value.should be_nil
         | 
| 65 | 
            +
                  @sheet[2, 1].value.should eq 'first merged'
         | 
| 66 66 | 
             
                end
         | 
| 67 67 |  | 
| 68 68 | 
             
                it "set merged cell" do
         | 
| 69 | 
            -
                  @sheet[ | 
| 70 | 
            -
                  @sheet[ | 
| 71 | 
            -
                  @sheet[ | 
| 69 | 
            +
                  @sheet[2, 1].value = "set merge cell"
         | 
| 70 | 
            +
                  @sheet[2, 1].value.should eq "set merge cell"
         | 
| 71 | 
            +
                  @sheet[2, 2].value.should eq "set merge cell"
         | 
| 72 72 | 
             
                end
         | 
| 73 73 | 
             
              end
         | 
| 74 74 | 
             
            end
         | 
| Binary file | 
| Binary file | 
    
        data/spec/data/workbook.xls
    CHANGED
    
    | Binary file | 
    
        data/spec/data/workbook.xlsm
    CHANGED
    
    | Binary file | 
    
        data/spec/data/workbook.xlsx
    CHANGED
    
    | Binary file | 
| Binary file | 
| Binary file | 
    
        data/spec/excel_spec.rb
    CHANGED
    
    | @@ -14,8 +14,11 @@ module RobustExcelOle | |
| 14 14 |  | 
| 15 15 | 
             
                before do
         | 
| 16 16 | 
             
                  @dir = create_tmpdir
         | 
| 17 | 
            -
                   | 
| 18 | 
            -
                  @ | 
| 17 | 
            +
                  #print "tmpdir: "; p @dir
         | 
| 18 | 
            +
                  @simple_file = @dir + '/workbook.xls'
         | 
| 19 | 
            +
                  @another_simple_file = @dir + '/another_workbook.xls'
         | 
| 20 | 
            +
                  @different_file = @dir + '/different_workbook.xls'
         | 
| 21 | 
            +
                  @invalid_name_file = 'b/workbook.xls'
         | 
| 19 22 | 
             
                end
         | 
| 20 23 |  | 
| 21 24 | 
             
                after do
         | 
| @@ -32,6 +35,12 @@ module RobustExcelOle | |
| 32 35 | 
             
                    @excel.Name.should == "Microsoft Excel"
         | 
| 33 36 | 
             
                  end
         | 
| 34 37 |  | 
| 38 | 
            +
                  it "should access excel.excel" do
         | 
| 39 | 
            +
                    excel = Excel.new(:reuse => false)
         | 
| 40 | 
            +
                    excel.excel.should == excel
         | 
| 41 | 
            +
                    excel.excel.should be_a Excel
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 35 44 | 
             
                  it "should work with 'new' " do
         | 
| 36 45 | 
             
                    @excel = Excel.new
         | 
| 37 46 | 
             
                    creation_ok?
         | 
| @@ -93,6 +102,156 @@ module RobustExcelOle | |
| 93 102 | 
             
                  end
         | 
| 94 103 | 
             
                end
         | 
| 95 104 |  | 
| 105 | 
            +
            =begin
         | 
| 106 | 
            +
                  # testing private methods
         | 
| 107 | 
            +
                  context "close_excel" do
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                    before do
         | 
| 110 | 
            +
                      @book = Book.open(@simple_file, :visible => true)
         | 
| 111 | 
            +
                      @excel = @book.excel
         | 
| 112 | 
            +
                      @book2 = Book.open(@simple_file, :force_excel => :new, :visible => true)
         | 
| 113 | 
            +
                      @excel2 = @book2.excel
         | 
| 114 | 
            +
                    end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    it "should close one Excel" do
         | 
| 117 | 
            +
                      @excel.should be_alive
         | 
| 118 | 
            +
                      @excel2.should be_alive
         | 
| 119 | 
            +
                      @book.should be_alive
         | 
| 120 | 
            +
                      @book2.should be_alive
         | 
| 121 | 
            +
                      @excel.close_excel(:hard => false)
         | 
| 122 | 
            +
                      @excel.should_not be_alive
         | 
| 123 | 
            +
                      @book.should_not be_alive
         | 
| 124 | 
            +
                      @excel2.should be_alive
         | 
| 125 | 
            +
                      @book2.should be_alive
         | 
| 126 | 
            +
                    end
         | 
| 127 | 
            +
                  end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            =end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                describe "close_all" do
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                  context "with saved workbooks" do
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                    before do
         | 
| 136 | 
            +
                      book = Book.open(@simple_file, :visible => true)
         | 
| 137 | 
            +
                      book2 = Book.open(@simple_file, :force_excel => :new, :visible => true)
         | 
| 138 | 
            +
                      @excel = book.excel
         | 
| 139 | 
            +
                      @excel2 = book2.excel
         | 
| 140 | 
            +
                    end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                    it "should close the Excel instances" do
         | 
| 143 | 
            +
                      @excel.should be_alive
         | 
| 144 | 
            +
                      @excel2.should be_alive
         | 
| 145 | 
            +
                      Excel.close_all
         | 
| 146 | 
            +
                      @excel.should_not be_alive
         | 
| 147 | 
            +
                      @excel2.should_not be_alive
         | 
| 148 | 
            +
                    end
         | 
| 149 | 
            +
                  end
         | 
| 150 | 
            +
                end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                describe "close" do
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  context "with a saved workbook" do
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                    before do
         | 
| 157 | 
            +
                      @excel = Excel.create
         | 
| 158 | 
            +
                      @book = Book.open(@simple_file)
         | 
| 159 | 
            +
                    end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                    it "should close the Excel" do
         | 
| 162 | 
            +
                      @excel.should be_alive
         | 
| 163 | 
            +
                      @book.should be_alive
         | 
| 164 | 
            +
                      @excel.close
         | 
| 165 | 
            +
                      @excel.should_not be_alive
         | 
| 166 | 
            +
                      @book.should_not be_alive
         | 
| 167 | 
            +
                    end
         | 
| 168 | 
            +
                  end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                  context "with an unsaved workbook" do
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    before do
         | 
| 173 | 
            +
                      @excel = Excel.create
         | 
| 174 | 
            +
                      @book = Book.open(@simple_file)
         | 
| 175 | 
            +
                      sheet = @book[0]
         | 
| 176 | 
            +
                      @old_cell_value = sheet[1,1].value
         | 
| 177 | 
            +
                      sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
         | 
| 178 | 
            +
                    end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                    it "should raise an error" do
         | 
| 181 | 
            +
                      @excel.should be_alive
         | 
| 182 | 
            +
                      @book.should be_alive
         | 
| 183 | 
            +
                      @book.saved.should be_false
         | 
| 184 | 
            +
                      expect{
         | 
| 185 | 
            +
                        @excel.close(:if_unsaved => :raise)
         | 
| 186 | 
            +
                      }.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
         | 
| 187 | 
            +
                      @excel.should be_alive
         | 
| 188 | 
            +
                      @book.should be_alive
         | 
| 189 | 
            +
                    end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                    it "should close the Excel without saving the workbook" do
         | 
| 192 | 
            +
                      @excel.should be_alive
         | 
| 193 | 
            +
                      @book.should be_alive
         | 
| 194 | 
            +
                      @book.saved.should be_false
         | 
| 195 | 
            +
                      @excel.close(:if_unsaved => :forget)
         | 
| 196 | 
            +
                      @excel.should_not be_alive
         | 
| 197 | 
            +
                      @book.should_not be_alive
         | 
| 198 | 
            +
                      new_book = Book.open(@simple_file)
         | 
| 199 | 
            +
                      new_sheet = new_book[0]
         | 
| 200 | 
            +
                      new_sheet[1,1].value.should == @old_cell_value
         | 
| 201 | 
            +
                      new_book.close          
         | 
| 202 | 
            +
                    end
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                    it "should close the Excel with saving the workbook" do
         | 
| 205 | 
            +
                      @excel.should be_alive
         | 
| 206 | 
            +
                      @book.should be_alive
         | 
| 207 | 
            +
                      @book.saved.should be_false
         | 
| 208 | 
            +
                      @excel.close(:if_unsaved => :save)
         | 
| 209 | 
            +
                      @excel.should_not be_alive
         | 
| 210 | 
            +
                      @book.should_not be_alive
         | 
| 211 | 
            +
                      new_book = Book.open(@simple_file)
         | 
| 212 | 
            +
                      new_sheet = new_book[0]
         | 
| 213 | 
            +
                      new_sheet[1,1].value.should_not == @old_cell_value
         | 
| 214 | 
            +
                      new_book.close          
         | 
| 215 | 
            +
                    end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                    it "should raise an error for invalid option" do
         | 
| 218 | 
            +
                      expect {
         | 
| 219 | 
            +
                        @excel.close(:if_unsaved => :invalid_option)
         | 
| 220 | 
            +
                      }.to raise_error(ExcelErrorClose, ":if_unsaved: invalid option: invalid_option") 
         | 
| 221 | 
            +
                    end
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                    it "should raise an error by default" do
         | 
| 224 | 
            +
                      @excel.should be_alive
         | 
| 225 | 
            +
                      @book.should be_alive
         | 
| 226 | 
            +
                      @book.saved.should be_false
         | 
| 227 | 
            +
                      expect{
         | 
| 228 | 
            +
                        @excel.close
         | 
| 229 | 
            +
                      }.to raise_error(ExcelErrorClose, "Excel contains unsaved workbooks")
         | 
| 230 | 
            +
                      @excel.should be_alive
         | 
| 231 | 
            +
                      @book.should be_alive
         | 
| 232 | 
            +
                    end
         | 
| 233 | 
            +
                  end
         | 
| 234 | 
            +
                end
         | 
| 235 | 
            +
             | 
| 236 | 
            +
            #        context "with :if_unsaved => :alert" do
         | 
| 237 | 
            +
            #          before do
         | 
| 238 | 
            +
            #            @key_sender = IO.popen  'ruby "' + File.join(File.dirname(__FILE__), '/helpers/key_sender.rb') + '" "Microsoft Excel" '  , "w"
         | 
| 239 | 
            +
            #          end
         | 
| 240 | 
            +
            #
         | 
| 241 | 
            +
            #          after do
         | 
| 242 | 
            +
            #            @key_sender.close
         | 
| 243 | 
            +
            #          end
         | 
| 244 | 
            +
            #
         | 
| 245 | 
            +
            #         possible_answers = [:yes, :no, :cancel]
         | 
| 246 | 
            +
            #          possible_answers.each_with_index do |answer, position|
         | 
| 247 | 
            +
            #            it "should" + (answer == :yes ? "" : " not") + " the unsaved book and" + (answer == :cancel ? " not" : "") + " close it" + "if user answers '#{answer}'" do
         | 
| 248 | 
            +
            #            # "Yes" is the  default. "No" is right of "Yes", "Cancel" is right of "No" --> language independent
         | 
| 249 | 
            +
            #            @key_sender.puts  "{right}" * position + "{enter}"
         | 
| 250 | 
            +
            #          end
         | 
| 251 | 
            +
            #        end
         | 
| 252 | 
            +
            #      end
         | 
| 253 | 
            +
             | 
| 254 | 
            +
             | 
| 96 255 | 
             
                describe "==" do
         | 
| 97 256 | 
             
                  before do
         | 
| 98 257 | 
             
                    @excel1 = Excel.create
         | 
| @@ -236,6 +395,35 @@ module RobustExcelOle | |
| 236 395 | 
             
                  end
         | 
| 237 396 | 
             
                end
         | 
| 238 397 |  | 
| 398 | 
            +
                describe "unsaved_workbooks" do
         | 
| 399 | 
            +
             | 
| 400 | 
            +
                  context "with standard" do
         | 
| 401 | 
            +
                    
         | 
| 402 | 
            +
                    before do
         | 
| 403 | 
            +
                      @book = Book.open(@simple_file)
         | 
| 404 | 
            +
                      @book2 = Book.open(@another_simple_file)
         | 
| 405 | 
            +
                      @book3 = Book.open(@different_file, :read_only => true)
         | 
| 406 | 
            +
                      sheet = @book[0]
         | 
| 407 | 
            +
                      sheet[1,1] = sheet[1,1].value == "foo" ? "bar" : "foo"
         | 
| 408 | 
            +
                      sheet3 = @book3[0]
         | 
| 409 | 
            +
                      sheet3[1,1] = sheet3[1,1].value == "foo" ? "bar" : "foo"
         | 
| 410 | 
            +
                    end
         | 
| 411 | 
            +
             | 
| 412 | 
            +
                    it "should list unsaved workbooks" do
         | 
| 413 | 
            +
                      @book.Saved.should be_false
         | 
| 414 | 
            +
                      @book2.Save
         | 
| 415 | 
            +
                      @book2.Saved.should be_true
         | 
| 416 | 
            +
                      @book3.Saved.should be_false
         | 
| 417 | 
            +
                      excel = @book.excel
         | 
| 418 | 
            +
                      # unsaved_workbooks yields different WIN32OLE objects than book.workbook
         | 
| 419 | 
            +
                      uw_names = []
         | 
| 420 | 
            +
                      excel.unsaved_workbooks.each {|uw| uw_names << uw.Name}
         | 
| 421 | 
            +
                      uw_names.should == [@book.workbook.Name]
         | 
| 422 | 
            +
                    end
         | 
| 423 | 
            +
             | 
| 424 | 
            +
                  end
         | 
| 425 | 
            +
                end
         | 
| 426 | 
            +
             | 
| 239 427 | 
             
                describe "generate workbook" do
         | 
| 240 428 |  | 
| 241 429 | 
             
                  context "with standard" do
         | 
| @@ -289,7 +477,9 @@ module RobustExcelOle | |
| 289 477 | 
             
                    it "should raise error when book cannot be saved" do
         | 
| 290 478 | 
             
                      expect{
         | 
| 291 479 | 
             
                        workbook = @excel1.generate_workbook(@invalid_name_file)
         | 
| 292 | 
            -
                       | 
| 480 | 
            +
                      # not always Unknown ???? ToDo #*#
         | 
| 481 | 
            +
                      #}.to raise_error(ExcelErrorSaveUnknown)
         | 
| 482 | 
            +
                      }.to raise_error(ExcelErrorSave)
         | 
| 293 483 | 
             
                    end
         | 
| 294 484 |  | 
| 295 485 | 
             
                  end
         | 
| @@ -298,11 +488,20 @@ module RobustExcelOle | |
| 298 488 |  | 
| 299 489 | 
             
              describe "RobustExcelOle" do
         | 
| 300 490 | 
             
                context "#absolute_path" do
         | 
| 491 | 
            +
                  before do
         | 
| 492 | 
            +
                    @previous_dir = Dir.getwd
         | 
| 493 | 
            +
                  end
         | 
| 494 | 
            +
                  
         | 
| 495 | 
            +
                  after do
         | 
| 496 | 
            +
                    Dir.chdir @previous_dir
         | 
| 497 | 
            +
                  end
         | 
| 498 | 
            +
             | 
| 301 499 | 
             
                  it "should work" do
         | 
| 302 500 | 
             
                    RobustExcelOle::absolute_path("C:/abc").should == "C:\\abc"
         | 
| 303 501 | 
             
                    RobustExcelOle::absolute_path("C:\\abc").should == "C:\\abc"
         | 
| 304 | 
            -
                     | 
| 305 | 
            -
                    RobustExcelOle::absolute_path("C:abc").should ==  | 
| 502 | 
            +
                    Dir.chdir "C:/windows"
         | 
| 503 | 
            +
                    RobustExcelOle::absolute_path("C:abc").downcase.should == Dir.pwd.gsub("/","\\").downcase + "\\abc"
         | 
| 504 | 
            +
                    RobustExcelOle::absolute_path("C:abc").upcase.should   == File.expand_path("abc").gsub("/","\\").upcase
         | 
| 306 505 | 
             
                  end
         | 
| 307 506 |  | 
| 308 507 | 
             
                  it "should return right absolute path name" do
         | 
    
        data/spec/range_spec.rb
    CHANGED
    
    | @@ -14,7 +14,7 @@ describe RobustExcelOle::Range do | |
| 14 14 | 
             
                @dir = create_tmpdir
         | 
| 15 15 | 
             
                @book = RobustExcelOle::Book.open(@dir + '/workbook.xls')
         | 
| 16 16 | 
             
                @sheet = @book[1]
         | 
| 17 | 
            -
                @range = RobustExcelOle::Range.new(@sheet. | 
| 17 | 
            +
                @range = RobustExcelOle::Range.new(@sheet.worksheet.UsedRange.Rows(1))
         | 
| 18 18 | 
             
              end
         | 
| 19 19 |  | 
| 20 20 | 
             
              after do
         | 
| @@ -50,9 +50,9 @@ describe RobustExcelOle::Range do | |
| 50 50 | 
             
                context "when instance is column range" do
         | 
| 51 51 | 
             
                  before do
         | 
| 52 52 | 
             
                    @sheet = @book[0]
         | 
| 53 | 
            -
                    @range = RobustExcelOle::Range.new(@sheet. | 
| 53 | 
            +
                    @range = RobustExcelOle::Range.new(@sheet.worksheet.UsedRange.Columns(1))
         | 
| 54 54 | 
             
                  end
         | 
| 55 | 
            -
                  it { @range.values.should eq [' | 
| 55 | 
            +
                  it { @range.values.should eq ['foo', 'foo', 'matz'] }
         | 
| 56 56 | 
             
                end
         | 
| 57 57 |  | 
| 58 58 | 
             
                context "read 'merge_cells.xls'" do
         | 
| @@ -67,7 +67,7 @@ describe RobustExcelOle::Range do | |
| 67 67 |  | 
| 68 68 | 
             
                  context "only merged_cell" do
         | 
| 69 69 | 
             
                    before do
         | 
| 70 | 
            -
                      @only_merged_range = @merge_cells_sheet.row_range( | 
| 70 | 
            +
                      @only_merged_range = @merge_cells_sheet.row_range(4)
         | 
| 71 71 | 
             
                    end
         | 
| 72 72 |  | 
| 73 73 | 
             
                    context "without argument" do
         | 
| @@ -75,14 +75,14 @@ describe RobustExcelOle::Range do | |
| 75 75 | 
             
                    end
         | 
| 76 76 |  | 
| 77 77 | 
             
                    context "with (1..2)" do
         | 
| 78 | 
            -
                      it { @only_merged_range.values( | 
| 78 | 
            +
                      it { @only_merged_range.values(2..3).should eq ['merged', 'merged'] }
         | 
| 79 79 | 
             
                    end
         | 
| 80 80 |  | 
| 81 81 | 
             
                  end
         | 
| 82 82 |  | 
| 83 83 | 
             
                  context "mix merged cell and no merge cell" do
         | 
| 84 84 | 
             
                    before do
         | 
| 85 | 
            -
                      @mix_merged_no_merged_range = @merge_cells_sheet.row_range( | 
| 85 | 
            +
                      @mix_merged_no_merged_range = @merge_cells_sheet.row_range(2)
         | 
| 86 86 | 
             
                    end
         | 
| 87 87 |  | 
| 88 88 | 
             
                    context "without argument" do
         | 
    
        data/spec/sheet_spec.rb
    CHANGED
    
    | @@ -35,7 +35,7 @@ describe RobustExcelOle::Sheet do | |
| 35 35 | 
             
                  end
         | 
| 36 36 |  | 
| 37 37 | 
             
                  it "protected sheet can't be write" do
         | 
| 38 | 
            -
                    expect { @protected_sheet[ | 
| 38 | 
            +
                    expect { @protected_sheet[1,1] = 'write' }.to raise_error
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 | 
             
                end
         | 
| 41 41 |  | 
| @@ -60,32 +60,58 @@ describe RobustExcelOle::Sheet do | |
| 60 60 | 
             
                end
         | 
| 61 61 |  | 
| 62 62 | 
             
                describe "#name=" do
         | 
| 63 | 
            +
                  
         | 
| 63 64 | 
             
                  it 'change sheet1 name to foo' do
         | 
| 64 65 | 
             
                    @sheet.name = 'foo'
         | 
| 65 66 | 
             
                    @sheet.name.should eq 'foo'
         | 
| 66 67 | 
             
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  it "should raise error when adding the same name" do
         | 
| 70 | 
            +
                    @sheet.name = 'foo'
         | 
| 71 | 
            +
                    @sheet.name.should eq 'foo'
         | 
| 72 | 
            +
                    new_sheet = @book.add_sheet @sheet
         | 
| 73 | 
            +
                    expect{
         | 
| 74 | 
            +
                      new_sheet.name = 'foo'
         | 
| 75 | 
            +
                    }.to raise_error(ExcelErrorSheet, "sheet name already exists")
         | 
| 76 | 
            +
                  end
         | 
| 67 77 | 
             
                end
         | 
| 68 78 | 
             
              end
         | 
| 69 79 |  | 
| 70 80 | 
             
              describe 'access cell' do
         | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 81 | 
            +
             | 
| 82 | 
            +
                describe "#[]" do      
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  context "access [1,1]" do
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    it { @sheet[1, 1].should be_kind_of RobustExcelOle::Cell }
         | 
| 87 | 
            +
                    it { @sheet[1, 1].value.should eq 'foo' }
         | 
| 75 88 | 
             
                  end
         | 
| 76 89 |  | 
| 77 | 
            -
                  context "access [ | 
| 90 | 
            +
                  context "access [1, 1], [1, 2], [3, 1]" do
         | 
| 78 91 | 
             
                    it "should get every values" do
         | 
| 79 | 
            -
                      @sheet[ | 
| 80 | 
            -
                      @sheet[ | 
| 81 | 
            -
                      @sheet[ | 
| 92 | 
            +
                      @sheet[1, 1].value.should eq 'foo'
         | 
| 93 | 
            +
                      @sheet[1, 2].value.should eq 'workbook'
         | 
| 94 | 
            +
                      @sheet[3, 1].value.should eq 'matz'
         | 
| 82 95 | 
             
                    end
         | 
| 83 96 | 
             
                  end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                  context "supplying nil as parameter" do
         | 
| 99 | 
            +
                    it "should access [1,1]" do
         | 
| 100 | 
            +
                      @sheet[1, nil].value.should eq 'foo'
         | 
| 101 | 
            +
                      @sheet[nil, 1].value.should eq 'foo'
         | 
| 102 | 
            +
                    end
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                it "change a cell to 'bar'" do
         | 
| 108 | 
            +
                  @sheet[1, 1] = 'bar'
         | 
| 109 | 
            +
                  @sheet[1, 1].value.should eq 'bar'
         | 
| 84 110 | 
             
                end
         | 
| 85 111 |  | 
| 86 | 
            -
                it "change a cell to  | 
| 87 | 
            -
                  @sheet[ | 
| 88 | 
            -
                  @sheet[ | 
| 112 | 
            +
                it "should change a cell to nil" do
         | 
| 113 | 
            +
                  @sheet[1, 1] = nil
         | 
| 114 | 
            +
                  @sheet[1, 1].value.should eq nil
         | 
| 89 115 | 
             
                end
         | 
| 90 116 |  | 
| 91 117 | 
             
                describe '#each' do
         | 
| @@ -93,7 +119,7 @@ describe RobustExcelOle::Sheet do | |
| 93 119 | 
             
                    @sheet.each_with_index do |cell, i|
         | 
| 94 120 | 
             
                      case i
         | 
| 95 121 | 
             
                      when 0
         | 
| 96 | 
            -
                        cell.value.should eq ' | 
| 122 | 
            +
                        cell.value.should eq 'foo'
         | 
| 97 123 | 
             
                      when 1
         | 
| 98 124 | 
             
                        cell.value.should eq 'workbook'
         | 
| 99 125 | 
             
                      when 2
         | 
| @@ -179,7 +205,7 @@ describe RobustExcelOle::Sheet do | |
| 179 205 | 
             
                    @sheet.each_row_with_index do |rows, idx|
         | 
| 180 206 | 
             
                      case idx
         | 
| 181 207 | 
             
                      when 0
         | 
| 182 | 
            -
                        rows.values.should eq [' | 
| 208 | 
            +
                        rows.values.should eq ['foo', 'workbook', 'sheet1']
         | 
| 183 209 | 
             
                      when 1
         | 
| 184 210 | 
             
                        rows.values.should eq ['foo', nil, 'foobaaa']
         | 
| 185 211 | 
             
                      when 2
         | 
| @@ -266,9 +292,7 @@ describe RobustExcelOle::Sheet do | |
| 266 292 | 
             
                                            [nil, nil, 'third', 'merged']
         | 
| 267 293 | 
             
                                       ]
         | 
| 268 294 | 
             
                    end
         | 
| 269 | 
            -
             | 
| 270 295 | 
             
                  end
         | 
| 271 | 
            -
             | 
| 272 296 | 
             
                end
         | 
| 273 297 |  | 
| 274 298 | 
             
                describe "#each_column_with_index" do
         | 
| @@ -276,7 +300,7 @@ describe RobustExcelOle::Sheet do | |
| 276 300 | 
             
                    @sheet.each_column_with_index do |columns, idx|
         | 
| 277 301 | 
             
                      case idx
         | 
| 278 302 | 
             
                      when 0
         | 
| 279 | 
            -
                        columns.values.should eq [' | 
| 303 | 
            +
                        columns.values.should eq ['foo', 'foo', 'matz']
         | 
| 280 304 | 
             
                      when 1
         | 
| 281 305 | 
             
                        columns.values.should eq ['workbook', nil, 'is']
         | 
| 282 306 | 
             
                      when 2
         | 
| @@ -302,7 +326,7 @@ describe RobustExcelOle::Sheet do | |
| 302 326 | 
             
                describe "#row_range" do
         | 
| 303 327 | 
             
                  context "with second argument" do
         | 
| 304 328 | 
             
                    before do
         | 
| 305 | 
            -
                      @row_range = @sheet.row_range( | 
| 329 | 
            +
                      @row_range = @sheet.row_range(1, 2..3)
         | 
| 306 330 | 
             
                    end
         | 
| 307 331 |  | 
| 308 332 | 
             
                    it { @row_range.should be_kind_of RobustExcelOle::Range }
         | 
| @@ -314,7 +338,7 @@ describe RobustExcelOle::Sheet do | |
| 314 338 |  | 
| 315 339 | 
             
                  context "without second argument" do
         | 
| 316 340 | 
             
                    before do
         | 
| 317 | 
            -
                      @row_range = @sheet.row_range( | 
| 341 | 
            +
                      @row_range = @sheet.row_range(3)
         | 
| 318 342 | 
             
                    end
         | 
| 319 343 |  | 
| 320 344 | 
             
                    it "should get all cells" do
         | 
| @@ -327,7 +351,7 @@ describe RobustExcelOle::Sheet do | |
| 327 351 | 
             
                describe "#col_range" do
         | 
| 328 352 | 
             
                  context "with second argument" do
         | 
| 329 353 | 
             
                    before do
         | 
| 330 | 
            -
                      @col_range = @sheet.col_range( | 
| 354 | 
            +
                      @col_range = @sheet.col_range(1, 2..3)
         | 
| 331 355 | 
             
                    end
         | 
| 332 356 |  | 
| 333 357 | 
             
                    it { @col_range.should be_kind_of RobustExcelOle::Range }
         | 
| @@ -339,7 +363,7 @@ describe RobustExcelOle::Sheet do | |
| 339 363 |  | 
| 340 364 | 
             
                  context "without second argument" do
         | 
| 341 365 | 
             
                    before do
         | 
| 342 | 
            -
                      @col_range = @sheet.col_range( | 
| 366 | 
            +
                      @col_range = @sheet.col_range(2)
         | 
| 343 367 | 
             
                    end
         | 
| 344 368 |  | 
| 345 369 | 
             
                    it "should get all cells" do
         | 
| @@ -349,9 +373,11 @@ describe RobustExcelOle::Sheet do | |
| 349 373 | 
             
                end
         | 
| 350 374 |  | 
| 351 375 | 
             
                describe "nvalue" do
         | 
| 352 | 
            -
             | 
| 376 | 
            +
             | 
| 377 | 
            +
                  context "returning the value of a range" do
         | 
| 378 | 
            +
                  
         | 
| 353 379 | 
             
                    before do
         | 
| 354 | 
            -
                      @book1 = RobustExcelOle::Book.open(@dir + '/ | 
| 380 | 
            +
                      @book1 = RobustExcelOle::Book.open(@dir + '/another_workbook.xls', :read_only => true)
         | 
| 355 381 | 
             
                      @sheet1 = @book1[0]
         | 
| 356 382 | 
             
                    end
         | 
| 357 383 |  | 
| @@ -359,28 +385,90 @@ describe RobustExcelOle::Sheet do | |
| 359 385 | 
             
                      @book1.close
         | 
| 360 386 | 
             
                    end   
         | 
| 361 387 |  | 
| 362 | 
            -
                    it "should return value of a range" do
         | 
| 363 | 
            -
                      @sheet1.nvalue(" | 
| 388 | 
            +
                    it "should return value of a range with nvalue and brackets operator" do
         | 
| 389 | 
            +
                      @sheet1.nvalue("firstcell").should == "foo"
         | 
| 390 | 
            +
                      @sheet1["firstcell"].should == "foo"
         | 
| 364 391 | 
             
                    end
         | 
| 365 392 |  | 
| 366 393 | 
             
                    it "should raise an error if name not defined" do
         | 
| 367 394 | 
             
                      expect {
         | 
| 368 | 
            -
                        value = @sheet1.nvalue(" | 
| 369 | 
            -
                      }.to raise_error( | 
| 395 | 
            +
                        value = @sheet1.nvalue("foo")
         | 
| 396 | 
            +
                      }.to raise_error(SheetError, "name foo not in sheet")
         | 
| 397 | 
            +
                      expect {
         | 
| 398 | 
            +
                        @sheet1["foo"]
         | 
| 399 | 
            +
                      }.to raise_error(SheetError, "name foo not in sheet")
         | 
| 400 | 
            +
                    end
         | 
| 401 | 
            +
             | 
| 402 | 
            +
                    it "should return default value if name not defined" do
         | 
| 403 | 
            +
                      @sheet1.nvalue("foo", :default => 2).should == 2
         | 
| 370 404 | 
             
                    end
         | 
| 405 | 
            +
                  end
         | 
| 406 | 
            +
                end
         | 
| 371 407 |  | 
| 372 | 
            -
             | 
| 373 | 
            -
             | 
| 374 | 
            -
             | 
| 375 | 
            -
             | 
| 376 | 
            -
                     | 
| 377 | 
            -
             | 
| 408 | 
            +
                describe "set_nvalue" do
         | 
| 409 | 
            +
             | 
| 410 | 
            +
                  context "setting the value of a range" do
         | 
| 411 | 
            +
                  
         | 
| 412 | 
            +
                    before do
         | 
| 413 | 
            +
                      @book1 = RobustExcelOle::Book.open(@dir + '/another_workbook.xls', :read_only => true)
         | 
| 414 | 
            +
                      @sheet1 = @book1[0]
         | 
| 415 | 
            +
                    end
         | 
| 416 | 
            +
             | 
| 417 | 
            +
                    after do
         | 
| 418 | 
            +
                      @book1.close
         | 
| 419 | 
            +
                    end   
         | 
| 420 | 
            +
             | 
| 421 | 
            +
                    it "should set a range to a value" do
         | 
| 422 | 
            +
                      @sheet1.nvalue("firstcell").should == "foo"
         | 
| 423 | 
            +
                      @sheet1[1,1].Value.should == "foo"
         | 
| 424 | 
            +
                      @sheet1.set_nvalue("firstcell","foo")
         | 
| 425 | 
            +
                      @sheet1.nvalue("firstcell").should == "foo"
         | 
| 426 | 
            +
                      @sheet1[1,1].Value.should == "foo"
         | 
| 427 | 
            +
                      @sheet1["firstcell"] = "bar"
         | 
| 428 | 
            +
                      @sheet1.nvalue("firstcell").should == "bar"
         | 
| 429 | 
            +
                      @sheet1[1,1].Value.should == "bar"
         | 
| 430 | 
            +
                    end
         | 
| 431 | 
            +
                  end
         | 
| 432 | 
            +
                end
         | 
| 433 | 
            +
             | 
| 434 | 
            +
                describe "set_name" do
         | 
| 435 | 
            +
             | 
| 436 | 
            +
                  context "setting the name of a range" do
         | 
| 437 | 
            +
             | 
| 438 | 
            +
                     before do
         | 
| 439 | 
            +
                      @book1 = RobustExcelOle::Book.open(@dir + '/another_workbook.xls', :read_only => true, :visible => true)
         | 
| 440 | 
            +
                      @sheet1 = @book1[0]
         | 
| 441 | 
            +
                    end
         | 
| 442 | 
            +
             | 
| 443 | 
            +
                    after do
         | 
| 444 | 
            +
                      @book1.close
         | 
| 445 | 
            +
                    end   
         | 
| 446 | 
            +
             | 
| 447 | 
            +
                    it "should name an unnamed range with a giving address" do
         | 
| 448 | 
            +
                      expect{
         | 
| 449 | 
            +
                        @sheet1[1,2].Name.Name
         | 
| 450 | 
            +
                      }.to raise_error          
         | 
| 451 | 
            +
                      @sheet1.set_name("foo",1,2)
         | 
| 452 | 
            +
                      @sheet1[1,2].Name.Name.should == "Sheet1!foo"
         | 
| 453 | 
            +
                    end
         | 
| 454 | 
            +
             | 
| 455 | 
            +
                    it "should rename an already named range with a giving address" do
         | 
| 456 | 
            +
                      @sheet1[1,1].Name.Name.should == "Sheet1!firstcell"
         | 
| 457 | 
            +
                      @sheet1.set_name("foo",1,1)
         | 
| 458 | 
            +
                      @sheet1[1,1].Name.Name.should == "Sheet1!foo"
         | 
| 459 | 
            +
                    end
         | 
| 460 | 
            +
             | 
| 461 | 
            +
                    it "should raise an error" do
         | 
| 462 | 
            +
                      expect{
         | 
| 463 | 
            +
                        @sheet1.set_name("foo",-2,1)
         | 
| 464 | 
            +
                      }.to raise_error(SheetError, "cannot add name foo to cell with row -2 and column 1")
         | 
| 465 | 
            +
                    end
         | 
| 378 466 | 
             
                  end
         | 
| 379 467 | 
             
                end
         | 
| 380 468 |  | 
| 381 469 | 
             
                describe "#method_missing" do
         | 
| 382 470 | 
             
                  it "can access COM method" do
         | 
| 383 | 
            -
                    @sheet.Cells(1,1).Value.should eq ' | 
| 471 | 
            +
                    @sheet.Cells(1,1).Value.should eq 'foo'
         | 
| 384 472 | 
             
                  end
         | 
| 385 473 |  | 
| 386 474 | 
             
                  context "unknown method" do
         |