robust_excel_ole 1.16 → 1.17

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.
@@ -12,7 +12,7 @@ module RobustExcelOle
12
12
  class Worksheet < RangeOwners
13
13
 
14
14
  attr_reader :ole_worksheet
15
- #attr_reader :workbook
15
+ attr_reader :workbook
16
16
 
17
17
  def initialize(win32_worksheet)
18
18
  @ole_worksheet = win32_worksheet
@@ -28,17 +28,18 @@ module RobustExcelOle
28
28
  end
29
29
 
30
30
  def workbook
31
- return @workbook unless @workbook.nil?
32
- begin
31
+ @workbook ||= begin
33
32
  ole_workbook = self.Parent
34
33
  saved_status = ole_workbook.Saved
35
34
  ole_workbook.Saved = true unless saved_status
36
35
  @workbook = workbook_class.new(ole_workbook)
37
36
  ole_workbook.Saved = saved_status
38
- rescue
39
- nil
37
+ @workbook
40
38
  end
41
- @workbook
39
+ end
40
+
41
+ def excel
42
+ workbook.excel
42
43
  end
43
44
 
44
45
  # sheet name
@@ -218,7 +219,6 @@ module RobustExcelOle
218
219
 
219
220
  private
220
221
 
221
- # @private
222
222
  def method_missing(name, *args)
223
223
  if name.to_s[0,1] =~ /[A-Z]/
224
224
  if ::ERRORMESSAGE_JRUBY_BUG
@@ -0,0 +1,175 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.join(File.dirname(__FILE__), './spec_helper')
4
+ require File.expand_path( '../../lib/robust_excel_ole/base', __FILE__)
5
+
6
+ $VERBOSE = nil
7
+
8
+ include General
9
+ include RobustExcelOle
10
+
11
+ module RobustExcelOle
12
+
13
+ describe AddressTool do
14
+
15
+ before(:all) do
16
+ excel = Excel.new(:reuse => true)
17
+ open_books = excel == nil ? 0 : excel.Workbooks.Count
18
+ puts "*** open books *** : #{open_books}" if open_books > 0
19
+ Excel.kill_all
20
+ @dir = create_tmpdir
21
+ @simple_file = @dir + '/workbook.xls'
22
+ @workbook = Workbook.open(@simple_file)
23
+ @address_tool = @workbook.excel.address_tool
24
+ end
25
+
26
+ after(:all) do
27
+ @workbook.close
28
+ end
29
+
30
+ it "should transform relative r1c1-reference into r1c1-format" do
31
+ @address_tool.as_r1c1("Z1S[2]:Z[-1]S4").should == "Z1S(2):Z(-1)S4"
32
+ @address_tool.as_r1c1("Z[1]S2:Z3S[4]").should == "Z(1)S2:Z3S(4)"
33
+ @address_tool.as_r1c1("Z1S[2]").should == "Z1S(2)"
34
+ @address_tool.as_r1c1("Z[-1]S4").should == "Z(-1)S4"
35
+ @address_tool.as_r1c1("Z[3]").should == "Z(3)"
36
+ @address_tool.as_r1c1("S[-2]").should == "S(-2)"
37
+ end
38
+
39
+ # test for 1.8.6
40
+ it "should transform relative integer_ranges-format into r1c1-format" do
41
+ @address_tool.as_r1c1([1..2,[3]..4]).should == "Z1S(3):Z2S4"
42
+ @address_tool.as_r1c1([[1]..2,3..4]).should == "Z(1)S3:Z2S4"
43
+ @address_tool.as_r1c1([[1]..2,nil]).should == "Z(1):Z2"
44
+ @address_tool.as_r1c1([nil,[1]..2]).should == "S(1):S2"
45
+ @address_tool.as_r1c1([nil,[1]]).should == "S(1):S(1)"
46
+ end
47
+
48
+ it "should transform relative integer_ranges-format into r1c1-format" do
49
+ @address_tool.as_r1c1([1..[-2],[3]..4]).should == "Z1S(3):Z(-2)S4"
50
+ @address_tool.as_r1c1([[1]..2,3..[4]]).should == "Z(1)S3:Z2S(4)"
51
+ @address_tool.as_r1c1([1..[-2],nil]).should == "Z1:Z(-2)"
52
+ @address_tool.as_r1c1([nil,[-1]..2]).should == "S(-1):S2"
53
+ @address_tool.as_r1c1([[3]..[3],nil]).should == "Z(3):Z(3)"
54
+ @address_tool.as_r1c1([nil,[-2]..[-2]]).should == "S(-2):S(-2)"
55
+ @address_tool.as_r1c1([[3],nil]).should == "Z(3):Z(3)"
56
+ end
57
+
58
+ it "should transform relative r1c1-format into r1c1-format" do
59
+ @address_tool.as_integer_ranges("Z1S[2]:Z[3]S4").should == [1..[3],[2]..4]
60
+ @address_tool.as_integer_ranges("Z[1]S2:Z3S[4]").should == [[1]..3,2..[4]]
61
+ @address_tool.as_integer_ranges("Z1S[2]").should == [1..1,[2]..[2]]
62
+ @address_tool.as_integer_ranges("Z[3]S4").should == [[3]..[3],4..4]
63
+ end
64
+
65
+ it "should transform a1-format" do
66
+ @address_tool.as_a1("A2").should == "A2"
67
+ @address_tool.as_r1c1("A2").should == "Z2S1:Z2S1"
68
+ @address_tool.as_integer_ranges("A2").should == [2..2,1..1]
69
+ end
70
+
71
+ it "should transform several-letter-a1-format" do
72
+ @address_tool.as_a1("ABO15").should == "ABO15"
73
+ @address_tool.as_r1c1("ABO15").should == "Z15S743:Z15S743"
74
+ @address_tool.as_integer_ranges("ABO15").should == [15..15,743..743]
75
+ end
76
+
77
+ it "should transform complex a1-format" do
78
+ @address_tool.as_a1("A2:B3").should == "A2:B3"
79
+ @address_tool.as_r1c1("A2:B3").should == "Z2S1:Z3S2"
80
+ @address_tool.as_integer_ranges("A2:B3").should == [2..3,1..2]
81
+ @address_tool.as_a1("S1:DP2").should == "S1:DP2"
82
+ @address_tool.as_r1c1("S1:DP2").should == "Z1S19:Z2S120"
83
+ @address_tool.as_integer_ranges("S1:DP2").should == [1..2,19..120]
84
+ end
85
+
86
+ it "should transform infinite a1-format" do
87
+ @address_tool.as_a1("A:B").should == "A:B"
88
+ @address_tool.as_r1c1("A:B").should == "S1:S2"
89
+ @address_tool.as_integer_ranges("A:B").should == [nil,1..2]
90
+ @address_tool.as_a1("1:3").should == "1:3"
91
+ @address_tool.as_r1c1("1:3").should == "Z1:Z3"
92
+ @address_tool.as_integer_ranges("1:3").should == [1..3,nil]
93
+ @address_tool.as_a1("B").should == "B"
94
+ @address_tool.as_r1c1("B").should == "S2:S2"
95
+ @address_tool.as_integer_ranges("B").should == [nil,2..2]
96
+ @address_tool.as_a1("3").should == "3"
97
+ @address_tool.as_r1c1("3").should == "Z3:Z3"
98
+ @address_tool.as_integer_ranges("3").should == [3..3,nil]
99
+ end
100
+
101
+ it "should transform r1c1-format" do
102
+ @address_tool.as_r1c1("Z2S1").should == "Z2S1"
103
+ @address_tool.as_integer_ranges("Z2S1").should == [2..2,1..1]
104
+ expect{
105
+ @address_tool.as_a1("Z2S1")
106
+ }.to raise_error(NotImplementedREOError)
107
+ end
108
+
109
+ it "should transform complex r1c1-format" do
110
+ @address_tool.as_r1c1("Z2S1:Z3S2").should == "Z2S1:Z3S2"
111
+ @address_tool.as_integer_ranges("Z2S1:Z3S2").should == [2..3,1..2]
112
+ end
113
+
114
+ it "should transform as_integer_ranges format" do
115
+ @address_tool.as_integer_ranges([2..2,1..1]).should == [2..2,1..1]
116
+ @address_tool.as_r1c1([2..2,1..1]).should == "Z2S1:Z2S1"
117
+ expect{
118
+ @address_tool.as_a1([2..2,1..1])
119
+ }.to raise_error(NotImplementedREOError)
120
+ end
121
+
122
+ it "should transform simple as_integer_ranges format" do
123
+ @address_tool.as_integer_ranges([2,1]).should == [2..2,1..1]
124
+ @address_tool.as_r1c1([2,1]).should == "Z2S1:Z2S1"
125
+ end
126
+
127
+ it "should transform complex as_integer_ranges format" do
128
+ @address_tool.as_integer_ranges([2,"A"]).should == [2..2,1..1]
129
+ @address_tool.as_r1c1([2,"A"]).should == "Z2S1:Z2S1"
130
+ @address_tool.as_integer_ranges([2,"A".."B"]).should == [2..2,1..2]
131
+ @address_tool.as_r1c1([2,"A".."B"]).should == "Z2S1:Z2S2"
132
+ @address_tool.as_integer_ranges([1..2,"C"]).should == [1..2,3..3]
133
+ @address_tool.as_r1c1([1..2,"C"]).should == "Z1S3:Z2S3"
134
+ @address_tool.as_integer_ranges([1..2,"C".."E"]).should == [1..2,3..5]
135
+ @address_tool.as_r1c1([1..2,"C".."E"]).should == "Z1S3:Z2S5"
136
+ @address_tool.as_integer_ranges([2,3..5]).should == [2..2,3..5]
137
+ @address_tool.as_r1c1([2,3..5]).should == "Z2S3:Z2S5"
138
+ @address_tool.as_integer_ranges([1..2,3..5]).should == [1..2,3..5]
139
+ @address_tool.as_r1c1([1..2,3..5]).should == "Z1S3:Z2S5"
140
+ end
141
+
142
+ it "should transform infinite as_integer_ranges format" do
143
+ @address_tool.as_integer_ranges([nil,1..2]).should == [nil,1..2]
144
+ @address_tool.as_r1c1([nil,1..2]).should == "S1:S2"
145
+ @address_tool.as_integer_ranges([1..3,nil]).should == [1..3,nil]
146
+ @address_tool.as_r1c1([1..3,nil]).should == "Z1:Z3"
147
+ @address_tool.as_integer_ranges([nil,2]).should == [nil,2..2]
148
+ @address_tool.as_r1c1([nil,2]).should == "S2:S2"
149
+ @address_tool.as_integer_ranges([3,nil]).should == [3..3,nil]
150
+ @address_tool.as_r1c1([3,nil]).should == "Z3:Z3"
151
+ end
152
+
153
+ it "should raise an error" do
154
+ expect{
155
+ @address_tool.as_a1("1A")
156
+ }.to raise_error(AddressInvalid, /format not correct/)
157
+ expect{
158
+ @address_tool.as_r1c1("A1B")
159
+ }.to raise_error(AddressInvalid, /format not correct/)
160
+ #expect{
161
+ # @address_tool.as_integer_ranges(["A".."B","C".."D"])
162
+ #}.to raise_error(AddressInvalid, /format not correct/)
163
+ #expect{
164
+ # @address_tool.as_integer_ranges(["A".."B",1..2])
165
+ #}.to raise_error(AddressInvalid, /format not correct/)
166
+ #expect{
167
+ # @address_tool.as_integer_ranges(["A".."B",nil])
168
+ #}.to raise_error(AddressInvalid, /format not correct/)
169
+ expect{
170
+ @address_tool.as_integer_ranges(["A",1,2])
171
+ }.to raise_error(AddressInvalid, /more than two components/)
172
+ end
173
+
174
+ end
175
+ end
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  require File.join(File.dirname(__FILE__), './spec_helper')
4
- require File.expand_path( '../../lib/robust_excel_ole/reo_common', __FILE__)
4
+ require File.expand_path( '../../lib/robust_excel_ole/base', __FILE__)
5
5
 
6
6
  $VERBOSE = nil
7
7
 
@@ -10,7 +10,7 @@ include RobustExcelOle
10
10
 
11
11
  module RobustExcelOle
12
12
 
13
- describe REOCommon do
13
+ describe Base do
14
14
 
15
15
  before(:all) do
16
16
  excel = Excel.new(:reuse => true)
@@ -40,12 +40,12 @@ module RobustExcelOle
40
40
 
41
41
  it "should put some number" do
42
42
  a = 4
43
- REOCommon::trace "some text #{a}"
43
+ Base::trace "some text #{a}"
44
44
  end
45
45
 
46
46
  it "should put another text" do
47
47
  b = Workbook.open(@simple_file)
48
- REOCommon::trace "book: #{b}"
48
+ Base::trace "book: #{b}"
49
49
  end
50
50
  end
51
51
 
@@ -82,45 +82,26 @@ module RobustExcelOle
82
82
 
83
83
  end
84
84
 
85
- describe "Object methods" do
86
-
87
- before do
88
- @book = Workbook.open(@simple_file)
89
- @sheet = @book.sheet(1)
90
- end
91
-
92
- before do
93
- @book.close
94
- end
95
-
96
- it "should raise an error when asking excel of a sheet" do
97
- expect{
98
- @sheet.excel
99
- }.to raise_error(TypeREOError, "receiver instance is neither an Excel nor a Workbook")
100
- end
101
-
102
- end
103
-
104
85
  describe "misc" do
105
86
 
106
87
  it "should" do
107
88
 
108
89
  LOG_TO_STDOUT = true
109
- REOCommon::trace "foo"
90
+ Base::trace "foo"
110
91
 
111
92
  LOG_TO_STDOUT = false
112
- REOCommon::trace "foo"
93
+ Base::trace "foo"
113
94
 
114
95
  REO_LOG_DIR = ""
115
- REOCommon::trace "foo"
96
+ Base::trace "foo"
116
97
 
117
98
  #REO_LOG_DIR = "C:"
118
- #REOCommon::trace "foo"
99
+ #Base::trace "foo"
119
100
 
120
- REOCommon::tr1 "foo"
101
+ Base::tr1 "foo"
121
102
 
122
103
  h = {:a => {:c => 4}, :b => 2}
123
- REOCommon::puts_hash(h)
104
+ Base::puts_hash(h)
124
105
 
125
106
  end
126
107
 
data/spec/cell_spec.rb CHANGED
@@ -15,54 +15,66 @@ describe Cell do
15
15
 
16
16
  before do
17
17
  @dir = create_tmpdir
18
+ @simple_file = @dir + '/workbook.xls'
19
+ @merge_cells_file = @dir + '/merge_cells.xls'
20
+ @book = Workbook.open(@simple_file)
21
+ @sheet = @book.sheet(1)
22
+ @cell = @sheet[1, 1]
18
23
  end
19
24
 
20
25
  after do
26
+ Excel.kill_all
21
27
  rm_tmp(@dir)
22
28
  end
23
29
 
24
- context "open simple.xls" do
25
- before do
26
- @book = Workbook.open(@dir + '/workbook.xls', :read_only => true)
27
- @sheet = @book.sheet(2)
28
- @cell = @sheet[1, 1]
30
+
31
+ describe "values" do
32
+
33
+ it "should yield one element values" do
34
+ @cell.values.should == ["foo"]
29
35
  end
30
36
 
31
- after do
32
- @book.close
37
+ end
38
+
39
+ describe "#[]" do
40
+
41
+ it "should access to the cell itself" do
42
+ @cell[0].should be_kind_of RobustExcelOle::Cell
43
+ @cell[0].v.should == "foo"
33
44
  end
34
45
 
35
- describe "#value" do
36
- it "get cell's value" do
37
- @cell.Value.should eq 'simple'
38
- end
46
+ it "should access to the cell itself" do
47
+ @cell[1].should be_kind_of RobustExcelOle::Cell
48
+ @cell[1].v.should == 'foo'
39
49
  end
50
+
51
+ end
40
52
 
41
- describe "#value=" do
42
- it "change cell data to 'fooooo'" do
43
- @cell.Value = 'fooooo'
44
- @cell.Value.should eq 'fooooo'
45
- end
53
+ describe "#copy" do
54
+
55
+ before do
56
+ @book1 = Workbook.open(@dir + '/workbook.xls')
57
+ @sheet1 = @book1.sheet(1)
58
+ @cell1 = @sheet1[1,1]
46
59
  end
47
60
 
48
- describe "#method_missing" do
49
- context "unknown method" do
50
- it { expect { @cell.hogehogefoo }.to raise_error }
51
- end
61
+ after do
62
+ @book1.close(:if_unsaved => :forget)
52
63
  end
53
64
 
65
+ it "should copy range" do
66
+ @cell1.copy([2,3])
67
+ @sheet1.range([1..2,1..3]).v.should == [["foo", "workbook", "sheet1"],["foo", nil, "foo"]]
68
+ end
54
69
  end
55
70
 
56
71
  context "open merge_cells.xls" do
72
+
57
73
  before do
58
- @book = Workbook.open(@dir + '/merge_cells.xls', :read_only => true)
74
+ @book = Workbook.open(@merge_cells_file, :read_only => true)
59
75
  @sheet = @book.sheet(1)
60
76
  end
61
77
 
62
- after do
63
- @book.close
64
- end
65
-
66
78
  it "merged cell get same value" do
67
79
  @sheet[1, 1].Value.should be_nil
68
80
  @sheet[2, 1].Value.should eq 'first merged'
@@ -74,4 +86,34 @@ describe Cell do
74
86
  @sheet[2, 2].Value.should eq "set merge cell"
75
87
  end
76
88
  end
89
+
90
+ describe "==" do
91
+
92
+ it "should check equality of cells" do
93
+ @cell.should == @sheet[1,1]
94
+ @cell.should_not == @sheet[1,2]
95
+ end
96
+
97
+ end
98
+
99
+ describe "#Value" do
100
+ it "get cell's value" do
101
+ @cell.Value.should eq 'foo'
102
+ end
103
+ end
104
+
105
+ describe "#Value=" do
106
+ it "change cell data to 'fooooo'" do
107
+ @cell.Value = 'fooooo'
108
+ @cell.Value.should eq 'fooooo'
109
+ end
110
+ end
111
+
112
+ describe "#method_missing" do
113
+ context "unknown method" do
114
+ it { expect { @cell.hogehogefoo }.to raise_error(NoMethodError) }
115
+ end
116
+ end
117
+
77
118
  end
119
+
Binary file
Binary file
data/spec/excel_spec.rb CHANGED
@@ -23,6 +23,11 @@ module RobustExcelOle
23
23
  @invalid_name_file = 'b/workbook.xls'
24
24
  @simple_file1 = @simple_file
25
25
  @different_file1 = @different_file
26
+ @error_unsaved_workbooks = "Excel contains unsaved workbooks" +
27
+ "\nHint: Use option :if_unsaved with values :forget and :save to close the
28
+ Excel instance without or with saving the unsaved workbooks before, respectively"
29
+ @error_invalid_option = ":if_unsaved: invalid option: :invalid_option" +
30
+ "\nHint: Valid values are :raise, :forget, :save and :alert"
26
31
  end
27
32
 
28
33
  after do
@@ -627,15 +632,13 @@ module RobustExcelOle
627
632
  @excel2 = book2.excel
628
633
  sheet2 = book2.sheet(1)
629
634
  @old_cell_value2 = sheet2[1,1].Value
630
- sheet2[1,1] = sheet2[1,1].Value == "foo" ? "bar" : "foo"
635
+ sheet2[1,1] = sheet2[1,1].Value == "foo" ? "bar" : "foo"
631
636
  end
632
637
 
633
638
  it "should close the first Excel without unsaved workbooks and then raise an error" do
634
639
  expect{
635
640
  Excel.close_all(:if_unsaved => :raise)
636
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
637
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
638
- Excel instance without or with saving the unsaved workbooks before, respectively")
641
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
639
642
  sleep 0.2
640
643
  @excel1.should_not be_alive
641
644
  @excel2.should be_alive
@@ -648,9 +651,7 @@ module RobustExcelOle
648
651
  it "should close the first Excel without unsaved workbooks and then raise an error" do
649
652
  expect{
650
653
  Excel.close_all
651
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
652
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
653
- Excel instance without or with saving the unsaved workbooks before, respectively")
654
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
654
655
  sleep 0.2
655
656
  @excel1.should_not be_alive
656
657
  @excel2.should be_alive
@@ -687,8 +688,7 @@ module RobustExcelOle
687
688
  it "should raise an error for invalid option" do
688
689
  expect {
689
690
  Excel.close_all(:if_unsaved => :invalid_option)
690
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option" +
691
- "\nHint: Valid values are :raise, :forget, :save and :alert")
691
+ }.to raise_error(OptionInvalid, @error_invalid_option)
692
692
  end
693
693
  end
694
694
 
@@ -705,9 +705,7 @@ module RobustExcelOle
705
705
  it "should close the 1st and 3rd Excel instances that have saved workbooks" do
706
706
  expect{
707
707
  Excel.close_all(:if_unsaved => :raise)
708
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
709
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
710
- Excel instance without or with saving the unsaved workbooks before, respectively")
708
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
711
709
  sleep 0.2
712
710
  @book1.excel.should_not be_alive
713
711
  @book2.excel.should be_alive
@@ -732,9 +730,7 @@ module RobustExcelOle
732
730
  it "should close three Excel instances that have saved workbooks" do
733
731
  expect{
734
732
  Excel.close_all(:if_unsaved => :raise)
735
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
736
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
737
- Excel instance without or with saving the unsaved workbooks before, respectively")
733
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
738
734
  sleep 0.2
739
735
  expect{
740
736
  @ole_xl.Name
@@ -812,17 +808,13 @@ module RobustExcelOle
812
808
  it "should raise an error" do
813
809
  expect{
814
810
  @excel.close(:if_unsaved => :raise)
815
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
816
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
817
- Excel instance without or with saving the unsaved workbooks before, respectively")
811
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
818
812
  end
819
813
 
820
814
  it "should raise an error per default" do
821
815
  expect{
822
816
  @excel.close(:if_unsaved => :raise)
823
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
824
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
825
- Excel instance without or with saving the unsaved workbooks before, respectively")
817
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
826
818
  end
827
819
 
828
820
  it "should close the Excel without saving the workbook" do
@@ -865,8 +857,7 @@ module RobustExcelOle
865
857
  it "should raise an error for invalid option" do
866
858
  expect {
867
859
  @excel.close(:if_unsaved => :invalid_option)
868
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option" +
869
- "\nHint: Valid values are :raise, :forget, :save and :alert")
860
+ }.to raise_error(OptionInvalid, @error_invalid_option)
870
861
  end
871
862
  end
872
863
 
@@ -955,18 +946,13 @@ module RobustExcelOle
955
946
  it "should raise error" do
956
947
  expect{
957
948
  @excel.close_workbooks(:if_unsaved => :raise)
958
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
959
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
960
- Excel instance without or with saving the unsaved workbooks before, respectively" )
961
-
949
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
962
950
  end
963
951
 
964
952
  it "should raise error per default" do
965
953
  expect{
966
954
  @excel.close_workbooks
967
- }.to raise_error(UnsavedWorkbooks, "Excel contains unsaved workbooks" +
968
- "\nHint: Use option :if_unsaved with values :forget and :save to close the
969
- Excel instance without or with saving the unsaved workbooks before, respectively")
955
+ }.to raise_error(UnsavedWorkbooks, @error_unsaved_workbooks)
970
956
  end
971
957
 
972
958
  it "should close the workbook with forgetting the workbook" do
@@ -994,8 +980,7 @@ module RobustExcelOle
994
980
  it "should raise an error for invalid option" do
995
981
  expect {
996
982
  @excel.close_workbooks(:if_unsaved => :invalid_option)
997
- }.to raise_error(OptionInvalid, ":if_unsaved: invalid option: :invalid_option" +
998
- "\nHint: Valid values are :raise, :forget, :save and :alert")
983
+ }.to raise_error(OptionInvalid, @error_invalid_option)
999
984
  end
1000
985
  end
1001
986
  end
@@ -1925,14 +1910,14 @@ module RobustExcelOle
1925
1910
  @excel2.Hwnd.should == @excel2.hwnd
1926
1911
  end
1927
1912
 
1928
- it "should provide the same excel instances" do
1929
- @excel1.should_not == @excel2
1930
- excel3 = Excel.hwnd2excel(@excel1.hwnd)
1931
- excel4 = Excel.hwnd2excel(@excel2.hwnd)
1932
- @excel1.should == excel3
1933
- @excel2.should == excel4
1934
- excel3.should_not == excel4
1935
- end
1913
+ # it "should provide the same excel instances" do
1914
+ # @excel1.should_not == @excel2
1915
+ # excel3 = Excel.hwnd2excel(@excel1.hwnd)
1916
+ # excel4 = Excel.hwnd2excel(@excel2.hwnd)
1917
+ # @excel1.should == excel3
1918
+ # @excel2.should == excel4
1919
+ # excel3.should_not == excel4
1920
+ # end
1936
1921
 
1937
1922
  =begin
1938
1923
  # does not work yet
@@ -2018,239 +2003,6 @@ module RobustExcelOle
2018
2003
 
2019
2004
  end
2020
2005
  end
2021
-
2022
- context "setting the name of a range" do
2023
-
2024
- before do
2025
- @book1 = Workbook.open(@dir + '/another_workbook.xls', :read_only => true, :visible => true)
2026
- @book1.excel.displayalerts = false
2027
- @excel1 = @book1.excel
2028
- end
2029
-
2030
- after do
2031
- @book1.close
2032
- end
2033
-
2034
- it "should name an unnamed range with a giving address" do
2035
- @excel1.add_name("foo",[1,2])
2036
- @excel1.Names.Item("foo").Name.should == "foo"
2037
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$B$1:$B$1"
2038
- end
2039
-
2040
- it "should rename an already named range with a giving address" do
2041
- @excel1.add_name("foo",[1,1])
2042
- @excel1.Names.Item("foo").Name.should == "foo"
2043
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$A$1:$A$1"
2044
- end
2045
-
2046
- it "should raise an error" do
2047
- expect{
2048
- @excel1.add_name("foo", [-2, 1])
2049
- }.to raise_error(RangeNotEvaluatable, /cannot add name "foo" to range/)
2050
- end
2051
-
2052
- it "should rename a range" do
2053
- @excel1.add_name("foo",[1,1])
2054
- @excel1.rename_range("foo","bar")
2055
- @excel1.namevalue_glob("bar").should == "foo"
2056
- end
2057
-
2058
- it "should delete a name of a range" do
2059
- @excel1.add_name("foo",[1,1])
2060
- @excel1.delete_name("foo")
2061
- expect{
2062
- @excel1.namevalue_glob("foo")
2063
- }.to raise_error(NameNotFound, /name "foo"/)
2064
- end
2065
-
2066
- it "should add a name of a rectangular range" do
2067
- @excel1.add_name("foo",[1..3,1..4])
2068
- @excel1["foo"].should == [["foo", "workbook", "sheet1", nil], ["foo", 1.0, 2.0, 4.0], ["matz", 3.0, 4.0, 4.0]]
2069
- end
2070
-
2071
- it "should accept the old interface" do
2072
- @excel1.add_name("foo",1..3,1..4)
2073
- @excel1["foo"].should == [["foo", "workbook", "sheet1", nil], ["foo", 1.0, 2.0, 4.0], ["matz", 3.0, 4.0, 4.0]]
2074
- end
2075
-
2076
- it "should add a name of an infinite row range" do
2077
- @excel1.add_name("foo",[1..3, nil])
2078
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$1:$3"
2079
- end
2080
-
2081
- it "should add a name of an infinite column range" do
2082
- @excel1.add_name("foo",[nil, "A".."C"])
2083
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$A:$C"
2084
- end
2085
-
2086
- it "should add a name of an infinite row range" do
2087
- @excel1.add_name("foo",[nil, 1..3])
2088
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$A:$C"
2089
- end
2090
-
2091
- it "should add a name of an infinite column range" do
2092
- @excel1.add_name("foo",["A:C"])
2093
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$A:$C"
2094
- end
2095
-
2096
- it "should add a name of an infinite column range" do
2097
- @excel1.add_name("foo",["1:2"])
2098
- @excel1.Names.Item("foo").Value.should == "=Sheet1!$1:$2"
2099
- end
2100
-
2101
- end
2102
-
2103
- describe "namevalue_glob, set_namevalue_glob" do
2104
-
2105
- before do
2106
- @book1 = Workbook.open(@dir + '/another_workbook.xls')
2107
- @book1.Windows(@book1.Name).Visible = true
2108
- @excel1 = @book1.excel
2109
- end
2110
-
2111
- after do
2112
- @book1.close(:if_unsaved => :forget)
2113
- end
2114
-
2115
- it "should return value of a defined name" do
2116
- @excel1.namevalue_glob("firstcell").should == "foo"
2117
- @excel1["firstcell"].should == "foo"
2118
- end
2119
-
2120
- #it "should evaluate a formula" do
2121
- # @excel1.namevalue_glob("named_formula").should == 4
2122
- # @excel1["named_formula"].should == 4
2123
- #end
2124
-
2125
- it "should raise an error if name not defined" do
2126
- expect {
2127
- @excel1.namevalue_glob("foo")
2128
- }.to raise_error(NameNotFound, /name "foo"/)
2129
- expect {
2130
- @excel1["foo"]
2131
- }.to raise_error(NameNotFound, /name "foo"/)
2132
- expect {
2133
- excel2 = Excel.create
2134
- excel2.namevalue_glob("one")
2135
- }.to raise_error(NameNotFound, /name "one"/)
2136
- expect {
2137
- excel3 = Excel.create(:visible => true)
2138
- excel3["one"]
2139
- }.to raise_error(NameNotFound, /name "one"/)
2140
- end
2141
-
2142
- it "should set a range to a value" do
2143
- @excel1.namevalue_glob("firstcell").should == "foo"
2144
- @excel1.set_namevalue_glob("firstcell","bar")
2145
- @excel1.namevalue_glob("firstcell").should == "bar"
2146
- @excel1["firstcell"] = "foo"
2147
- @excel1.namevalue_glob("firstcell").should == "foo"
2148
- end
2149
-
2150
- it "should raise an error if name cannot be evaluated" do
2151
- expect{
2152
- @excel1.set_namevalue_glob("foo", 1)
2153
- }.to raise_error(RangeNotEvaluatable, /cannot assign value to range named "foo"/)
2154
- expect{
2155
- @excel1["foo"] = 1
2156
- }.to raise_error(RangeNotEvaluatable, /cannot assign value to range named "foo"/)
2157
- end
2158
-
2159
- it "should color the cell (deprecated)" do
2160
- @excel1.set_namevalue_glob("firstcell", "foo")
2161
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == -4142
2162
- @excel1.set_namevalue_glob("firstcell", "foo", :color => 4)
2163
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == 4
2164
- @excel1["firstcell"].should == "foo"
2165
- @excel1["firstcell"] = "foo"
2166
- @excel1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == 42
2167
- @book1.save
2168
- end
2169
-
2170
- it "should color the cell" do
2171
- @excel1.set_namevalue_glob("firstcell", "foo")
2172
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == -4142
2173
- @excel1.set_namevalue_glob("firstcell", "foo", :color => 4)
2174
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == 4
2175
- @excel1["firstcell"].should == "foo"
2176
- @excel1["firstcell"] = "foo"
2177
- @excel1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == 42
2178
- @book1.save
2179
- end
2180
-
2181
-
2182
- end
2183
-
2184
- describe "namevalue, set_namevalue" do
2185
-
2186
- before do
2187
- @book1 = Workbook.open(@another_simple_file)
2188
- @excel1 = @book1.excel
2189
- # for some reason the workbook must be visible
2190
- @book1.visible = true
2191
- end
2192
-
2193
- after do
2194
- @book1.close(:if_unsaved => :forget)
2195
- end
2196
-
2197
- it "should return value of a locally defined name" do
2198
- @excel1.namevalue("firstcell").should == "foo"
2199
- end
2200
-
2201
- it "should return value of a defined name" do
2202
- @excel1.namevalue("new").should == "foo"
2203
- @excel1.namevalue("one").should == 1.0
2204
- @excel1.namevalue("four").should == [[1,2],[3,4]]
2205
- @excel1.namevalue("firstrow").should == [[1,2]]
2206
- end
2207
-
2208
- it "should return default value if name not defined and default value is given" do
2209
- @excel1.namevalue("foo", :default => 2).should == 2
2210
- end
2211
-
2212
- it "should raise an error if name not defined for the sheet" do
2213
- expect {
2214
- @excel1.namevalue("foo")
2215
- }.to raise_error(NameNotFound, /name "foo" not in/)
2216
- expect {
2217
- @excel1.namevalue("named_formula")
2218
- }.to raise_error(NameNotFound, /name "named_formula" not in/)
2219
- expect {
2220
- excel2 = Excel.create
2221
- excel2.namevalue("one")
2222
- }.to raise_error(NameNotFound, /name "one" not in/)
2223
- end
2224
-
2225
- it "should set a range to a value" do
2226
- @excel1.namevalue("firstcell").should == "foo"
2227
- @excel1.set_namevalue("firstcell","bar")
2228
- @excel1.namevalue("firstcell").should == "bar"
2229
- end
2230
-
2231
- it "should raise an error if name cannot be evaluated" do
2232
- expect{
2233
- @excel1.set_namevalue_glob("foo", 1)
2234
- }.to raise_error(RangeNotEvaluatable, /cannot assign value to range named "foo" in/)
2235
- end
2236
-
2237
- it "should color the cell (depracated)" do
2238
- @excel1.set_namevalue("firstcell", "foo")
2239
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == -4142
2240
- @excel1.set_namevalue("firstcell", "foo", :color => 4)
2241
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == 4
2242
- end
2243
-
2244
- it "should color the cell" do
2245
- @excel1.set_namevalue("firstcell", "foo")
2246
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == -4142
2247
- @excel1.set_namevalue("firstcell", "foo", :color => 4)
2248
- @book1.Names.Item("firstcell").RefersToRange.Interior.ColorIndex.should == 4
2249
- end
2250
-
2251
-
2252
- end
2253
-
2254
2006
  end
2255
2007
  end
2256
2008