robust_excel_ole 1.4 → 1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|