robust_excel_ole 0.2.2.1 → 0.2.3
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 +74 -26
- data/examples/edit_sheets/example_access_sheets_and_cells.rb +53 -0
- data/examples/edit_sheets/example_adding_sheets.rb +63 -0
- data/examples/edit_sheets/example_ranges.rb +38 -0
- data/lib/robust_excel_ole/version.rb +1 -1
- data/spec/data/book_with_blank.xls +0 -0
- data/spec/data/simple.xls +0 -0
- data/spec/sheet_spec.rb +6 -1
- metadata +7 -6
- data/examples/edit_sheets/example_print_cells.rb +0 -43
data/README.rdoc
CHANGED
@@ -128,13 +128,19 @@ Return the file name of the book with the absolute path that contains slash (/)
|
|
128
128
|
|
129
129
|
=== Access a sheet.
|
130
130
|
|
131
|
-
A sheet object can be accessed with a Book#[] method.
|
131
|
+
A sheet object can be accessed with a Book#[] method via an integer number.
|
132
132
|
|
133
133
|
sheet = book[0]
|
134
134
|
|
135
135
|
Access a sheet object with the sheet name.
|
136
136
|
|
137
|
-
book['Sheet1']
|
137
|
+
sheet = book['Sheet1']
|
138
|
+
|
139
|
+
Access sheet objects using the methods Book#each.
|
140
|
+
|
141
|
+
book.each do |sheet|
|
142
|
+
# do something with sheet
|
143
|
+
end
|
138
144
|
|
139
145
|
=== Access a row or a column.
|
140
146
|
|
@@ -146,11 +152,11 @@ A sheet object is enumerable. Use the methods Sheet#each_column, Sheet#each_row
|
|
146
152
|
end
|
147
153
|
|
148
154
|
sheet.each_row do |row|
|
149
|
-
# do something with
|
155
|
+
# do something with row
|
150
156
|
end
|
151
157
|
|
152
|
-
sheet.each_column do |
|
153
|
-
# do something with
|
158
|
+
sheet.each_column do |column|
|
159
|
+
# do something with column
|
154
160
|
end
|
155
161
|
|
156
162
|
=== Access a cell.
|
@@ -164,7 +170,49 @@ Read a cell from a range object.
|
|
164
170
|
row_range[0] => first cell in row_range
|
165
171
|
column_range[1] => second cell in column_range
|
166
172
|
|
167
|
-
|
173
|
+
Read the value of a cell.
|
174
|
+
|
175
|
+
cell = sheet[0,0]
|
176
|
+
cell.value => value of the cell.
|
177
|
+
|
178
|
+
Write a cell
|
179
|
+
|
180
|
+
sheet[0,0] = "new_value"
|
181
|
+
|
182
|
+
|
183
|
+
=== Access a range of a row or column.
|
184
|
+
|
185
|
+
Access a range of a row.
|
186
|
+
|
187
|
+
sheet.row_range(0) => first row
|
188
|
+
sheet.row_range(0, 0..2 ) => first three cells of the first row
|
189
|
+
|
190
|
+
Access a range of a column.
|
191
|
+
|
192
|
+
sheet.col_range(2) => third column
|
193
|
+
sheet.col_range(2, 0..1) => first two cells of the third column
|
194
|
+
|
195
|
+
|
196
|
+
=== Add a sheet
|
197
|
+
|
198
|
+
Add a new sheet.
|
199
|
+
|
200
|
+
book.add_sheet
|
201
|
+
|
202
|
+
Add a new sheet with a name.
|
203
|
+
|
204
|
+
book.add_sheet(:as => 'new_sheet')
|
205
|
+
|
206
|
+
Add a new sheet with a name before another sheet.
|
207
|
+
|
208
|
+
book.add_sheet(:as => 'new_sheet2', :before => another_sheet)
|
209
|
+
|
210
|
+
Add a copy of a sheet with a name after another sheet.
|
211
|
+
|
212
|
+
book.add_sheet(sheet, :as => 'sheet_copy', :after => another_sheet)
|
213
|
+
|
214
|
+
|
215
|
+
=== Examples
|
168
216
|
|
169
217
|
Include robust_excel_ole.
|
170
218
|
|
@@ -176,11 +224,11 @@ Open a book.
|
|
176
224
|
|
177
225
|
book = Book.open('simple.xls')
|
178
226
|
|
179
|
-
Access a sheet.
|
227
|
+
Access a sheet via its name.
|
180
228
|
|
181
|
-
sheet = book[
|
229
|
+
sheet = book['Sheet1']
|
182
230
|
|
183
|
-
Change
|
231
|
+
Change the first cell.
|
184
232
|
|
185
233
|
sheet[0,0] = "new"
|
186
234
|
|
@@ -188,7 +236,7 @@ Save the book.
|
|
188
236
|
|
189
237
|
book.save
|
190
238
|
|
191
|
-
Save
|
239
|
+
Save the book with a different name, and overwrite if a file with this name exists.
|
192
240
|
|
193
241
|
book.save_as('different_simple.xls', :if_exists => :overwrite)
|
194
242
|
|
@@ -198,38 +246,38 @@ Close the book.
|
|
198
246
|
|
199
247
|
=== Example 2
|
200
248
|
|
201
|
-
Open the book
|
249
|
+
Open the book in a new Excel application and make it visible.
|
202
250
|
|
203
|
-
|
251
|
+
book.open('simple.xls', :reuse => false, :visible => true)
|
204
252
|
|
205
|
-
Add a sheet.
|
253
|
+
Add a copy of the first sheet after the second sheet.
|
206
254
|
|
207
|
-
|
255
|
+
book.add_sheet(book[0], :as => 'Sheet1_copy', :after => book[1])
|
208
256
|
|
209
|
-
Open a new book with the same name in a new Excel. Leave the unsaved
|
257
|
+
Open a new book with the same name in a new Excel. Leave the book that contains unsaved changes in the old Excel.
|
210
258
|
|
211
|
-
|
259
|
+
new_book.open('simple.xls', :if_unsaved => :new_app)
|
212
260
|
|
213
|
-
Access a sheet and
|
261
|
+
Access a sheet and change a cell.
|
214
262
|
|
215
|
-
sheet =
|
216
|
-
sheet[
|
263
|
+
sheet = new_book[0]
|
264
|
+
sheet[1,1] = "another"
|
217
265
|
|
218
|
-
Open another book with the same name in the running Excel.
|
266
|
+
Open another book with the same name in the running Excel. The book that contains unsaved changes will be closed before.
|
219
267
|
|
220
|
-
|
268
|
+
third_book.open('simple.xls', :if_unsaved => :forget)
|
221
269
|
|
222
270
|
Add a sheet.
|
223
271
|
|
224
|
-
|
272
|
+
third_book.add_sheet
|
225
273
|
|
226
274
|
Close the book without saving it.
|
227
275
|
|
228
|
-
|
276
|
+
third_book.close(:if_unsaved => :forget)
|
229
277
|
|
230
278
|
Close the first book and save it before.
|
231
279
|
|
232
|
-
|
280
|
+
book.close(:if_unsaved => :save)
|
233
281
|
|
234
282
|
=== Example 3
|
235
283
|
|
@@ -246,11 +294,11 @@ Change its cell.
|
|
246
294
|
sheet = book2[0]
|
247
295
|
sheet[0,0] = "new"
|
248
296
|
|
249
|
-
Open a book with the same name in a different path.
|
297
|
+
Open a book with the same name in a different path. The old book that was modified will be saved and closed before.
|
250
298
|
|
251
299
|
book3 = Book.open('simple.xls', :if_obstructed => :save)
|
252
300
|
|
253
|
-
Open a book with the same name in a different path. The other book
|
301
|
+
Open a book with the same name in a different path. The other book will be closed, because it does not contain unsaved changes.
|
254
302
|
|
255
303
|
book4 = Book.open('more/simple.xls', :if_obstructed => :close_if_unsaved)
|
256
304
|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# example_access_sheets_and_cells.rb:
|
2
|
+
# access sheets, print cells, rows, and columns of a sheet
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
5
|
+
require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
|
6
|
+
require "fileutils"
|
7
|
+
|
8
|
+
include RobustExcelOle
|
9
|
+
|
10
|
+
Excel.close_all
|
11
|
+
begin
|
12
|
+
dir = create_tmpdir
|
13
|
+
simple_file = dir + 'simple.xls'
|
14
|
+
simple_save_file = dir + 'simple_save.xls'
|
15
|
+
File.delete simple_save_file rescue nil
|
16
|
+
book = Book.open(simple_file) # open a book
|
17
|
+
sheet = book[0] # access a sheet via integer
|
18
|
+
cell = sheet[0,0] # access the first cell
|
19
|
+
puts "1st cell: #{cell.value}" # put the value of the first cell
|
20
|
+
sheet[0,0] = "complex" # write a value into a cell
|
21
|
+
puts "new cell: #{sheet[0,0].value}"
|
22
|
+
puts "all cells:"
|
23
|
+
sheet.each do |cell| # access all cells
|
24
|
+
puts "#{cell.value}" # for each row: for every column: put the value of the cells
|
25
|
+
end
|
26
|
+
|
27
|
+
sheet_enum = proc do |enum_method| # put each cell, each row or each column
|
28
|
+
i = 0
|
29
|
+
sheet.send(enum_method) do |item|
|
30
|
+
i = i + 1
|
31
|
+
item_name =
|
32
|
+
case enum_method
|
33
|
+
when :each : "cell"
|
34
|
+
when :each_row : "row"
|
35
|
+
when :each_column : "column"
|
36
|
+
end
|
37
|
+
puts "#{item_name} #{i}: #{item.value}" # put values of the item of the sheet
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
sheet_enum[:each] # put cells
|
42
|
+
sheet_enum[:each_row] # put rows
|
43
|
+
sheet_enum[:each_column] # put columns
|
44
|
+
|
45
|
+
book.save # save the book
|
46
|
+
book.close # close the book
|
47
|
+
|
48
|
+
ensure
|
49
|
+
Excel.close_all
|
50
|
+
rm_tmp(dir)
|
51
|
+
end
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# example_adding_sheets.rb:
|
2
|
+
# adding new and copied at various positions with various sheet names
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
5
|
+
require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
|
6
|
+
require "fileutils"
|
7
|
+
|
8
|
+
include RobustExcelOle
|
9
|
+
|
10
|
+
Excel.close_all
|
11
|
+
begin
|
12
|
+
dir = create_tmpdir
|
13
|
+
simple_file = dir + 'simple.xls'
|
14
|
+
simple_save_file = dir + 'simple_save.xls'
|
15
|
+
File.delete simple_save_file rescue nil
|
16
|
+
@book = Book.open(simple_file) # open a book
|
17
|
+
|
18
|
+
def show_sheets
|
19
|
+
@book.each do |sheet| # access each sheet
|
20
|
+
puts "sheet name: #{sheet.name}" # put the sheet name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
puts "sheets of the book:"
|
25
|
+
show_sheets
|
26
|
+
|
27
|
+
puts "adding a new sheet"
|
28
|
+
@book.add_sheet
|
29
|
+
show_sheets
|
30
|
+
|
31
|
+
puts "adding a new sheet with the name 'sheet_name'"
|
32
|
+
@book.add_sheet(:as => 'sheet_name')
|
33
|
+
show_sheets
|
34
|
+
|
35
|
+
puts "adding a copy of the 2nd sheet"
|
36
|
+
sheet = @book[1]
|
37
|
+
@book.add_sheet sheet
|
38
|
+
show_sheets
|
39
|
+
|
40
|
+
puts "adding a copy of the 2nd sheet and name it 'second_sheet_copy'"
|
41
|
+
@book.add_sheet(sheet, :as => 'second_sheet_copy')
|
42
|
+
show_sheets
|
43
|
+
|
44
|
+
puts "adding a new sheet after the 2nd sheet"
|
45
|
+
@book.add_sheet(:after => sheet)
|
46
|
+
show_sheets
|
47
|
+
|
48
|
+
puts "adding a copy of the 2nd sheet after the 2nd sheet"
|
49
|
+
@book.add_sheet(sheet, :after => sheet)
|
50
|
+
show_sheets
|
51
|
+
|
52
|
+
puts "adding a copy of the 4th sheet before the 7th sheet and name it 'sheet_copy'"
|
53
|
+
@book.add_sheet(@book[3], :as => 'sheet_copy', :after => @book[6])
|
54
|
+
show_sheets
|
55
|
+
|
56
|
+
@book.close(:if_unsaved => :forget) # close the book without saving it
|
57
|
+
|
58
|
+
ensure
|
59
|
+
Excel.close_all
|
60
|
+
rm_tmp(dir)
|
61
|
+
end
|
62
|
+
|
63
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# example_ranges.rb:
|
2
|
+
# access row and column ranges of a sheet.
|
3
|
+
|
4
|
+
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
5
|
+
require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
|
6
|
+
require "fileutils"
|
7
|
+
|
8
|
+
include RobustExcelOle
|
9
|
+
|
10
|
+
Excel.close_all
|
11
|
+
begin
|
12
|
+
dir = create_tmpdir
|
13
|
+
simple_file = dir + 'simple.xls'
|
14
|
+
simple_save_file = dir + 'simple_save.xls'
|
15
|
+
File.delete simple_save_file rescue nil
|
16
|
+
book = Book.open(simple_file) # open a book
|
17
|
+
sheet = book['Sheet1'] # access a sheet via the name
|
18
|
+
row_r = sheet.row_range(0) # access the whole range of the first row
|
19
|
+
col_r = sheet.col_range(0, 0..1) # access the first two cells of the range of the first column
|
20
|
+
cell = col_r[0] # access the first cell of these cells
|
21
|
+
puts "row range of 1st row: #{row_r.values}" # puts the values of the first row
|
22
|
+
puts "1st and 2nd cell of the 1st column : #{col_r.values}" # and the first two cells of the first column
|
23
|
+
puts "1st cell of these cells of the 1st columns: #{cell.value}" # and the first cell of the row range of the 1st row
|
24
|
+
|
25
|
+
i = 0
|
26
|
+
row_r.values.each do |value| # access the values of the first row
|
27
|
+
i = i + 1
|
28
|
+
puts "cell #{i} of the range of the 1st row: #{value}"
|
29
|
+
end
|
30
|
+
|
31
|
+
book.close
|
32
|
+
|
33
|
+
ensure
|
34
|
+
Excel.close_all
|
35
|
+
rm_tmp(dir)
|
36
|
+
end
|
37
|
+
|
38
|
+
|
Binary file
|
data/spec/data/simple.xls
CHANGED
Binary file
|
data/spec/sheet_spec.rb
CHANGED
@@ -24,15 +24,20 @@ describe RobustExcelOle::Sheet do
|
|
24
24
|
describe ".initialize" do
|
25
25
|
context "when open sheet protected(with password is 'protect')" do
|
26
26
|
before do
|
27
|
+
@key_sender = IO.popen 'ruby "' + File.join(File.dirname(__FILE__), '/helpers/key_sender.rb') + '" "Microsoft Office Excel" ' , "w"
|
28
|
+
@key_sender.puts "{p}{r}{o}{t}{e}{c}{t}{enter}"
|
27
29
|
@book_protect = RobustExcelOle::Book.open(@dir + '/protected_sheet.xls', :visible => true, :read_only => true)
|
28
30
|
@protected_sheet = @book_protect['protect']
|
29
31
|
end
|
30
32
|
|
31
33
|
after do
|
32
34
|
@book_protect.close
|
35
|
+
@key_sender.close
|
33
36
|
end
|
34
37
|
|
35
|
-
it
|
38
|
+
it "should be a protected sheet" do
|
39
|
+
@protected_sheet.ProtectContents.should be_true
|
40
|
+
end
|
36
41
|
|
37
42
|
it "protected sheet can't be write" do
|
38
43
|
expect { @protected_sheet[0,0] = 'write' }.to raise_error
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: robust_excel_ole
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
|
11
|
-
version: 0.2.2.1
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- traths
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2014-10-
|
18
|
+
date: 2014-10-22 00:00:00 +02:00
|
20
19
|
default_executable:
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -132,7 +131,9 @@ files:
|
|
132
131
|
- LICENSE
|
133
132
|
- README.rdoc
|
134
133
|
- Rakefile
|
135
|
-
- examples/edit_sheets/
|
134
|
+
- examples/edit_sheets/example_access_sheets_and_cells.rb
|
135
|
+
- examples/edit_sheets/example_adding_sheets.rb
|
136
|
+
- examples/edit_sheets/example_ranges.rb
|
136
137
|
- examples/open_save_close/example_control_to_excel.rb
|
137
138
|
- examples/open_save_close/example_if_obstructed_closeifsaved.rb
|
138
139
|
- examples/open_save_close/example_if_obstructed_forget.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# example 1: open a book, print the cells, rows, and columns of a sheet
|
2
|
-
|
3
|
-
require File.join(File.dirname(__FILE__), '../../lib/robust_excel_ole')
|
4
|
-
require File.join(File.dirname(__FILE__), '../../spec/helpers/create_temporary_dir')
|
5
|
-
require "fileutils"
|
6
|
-
|
7
|
-
include RobustExcelOle
|
8
|
-
|
9
|
-
Excel.close_all
|
10
|
-
begin
|
11
|
-
dir = create_tmpdir
|
12
|
-
simple_file = dir + 'simple.xls'
|
13
|
-
simple_save_file = dir + 'simple_save.xls'
|
14
|
-
File.delete simple_save_file rescue nil
|
15
|
-
book = Book.open(simple_file)
|
16
|
-
sheet = book[0]
|
17
|
-
cell = sheet[0,0]
|
18
|
-
|
19
|
-
sheet_enum = proc do |enum_method|
|
20
|
-
i = 0
|
21
|
-
sheet.send(enum_method) do |cell|
|
22
|
-
i = i + 1
|
23
|
-
puts "sheet.#{enum_method} #{i}: #{cell.value}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
sheet_enum[:each]
|
28
|
-
sheet_enum[:each_row]
|
29
|
-
sheet_enum[:each_column]
|
30
|
-
|
31
|
-
col_r = sheet.col_range(0,1..2).values
|
32
|
-
row_r = sheet.row_range(0,1..2).values
|
33
|
-
puts "row range of 1st row, 1..2: #{row_r}"
|
34
|
-
puts "column range of 1st column, 1..2: #{col_r}"
|
35
|
-
sheet[0,0] = "complex"
|
36
|
-
book.save
|
37
|
-
book.close
|
38
|
-
ensure
|
39
|
-
Excel.close_all
|
40
|
-
rm_tmp(dir)
|
41
|
-
end
|
42
|
-
|
43
|
-
|