robust_excel_ole 1.18.2 → 1.18.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.
- checksums.yaml +4 -4
- data/Changelog +7 -2
- data/benchmarking/Gemfile +7 -0
- data/benchmarking/README.md +131 -0
- data/benchmarking/creek_example.rb +33 -0
- data/benchmarking/generating_excel_files.rb +28 -0
- data/benchmarking/reo_example.rb +26 -0
- data/benchmarking/reo_example1.rb +31 -0
- data/benchmarking/reo_example2.rb +26 -0
- data/benchmarking/roo_example.rb +33 -0
- data/benchmarking/ruby_xl_example.rb +36 -0
- data/benchmarking/sample_excel_files/xlsx_500_rows.xlsx +0 -0
- data/benchmarking/simple_xlsx_reader_example.rb +33 -0
- data/benchmarking/spreadsheet_example.rb +36 -0
- data/bin/jreo.bat +3 -0
- data/bin/reo.bat +3 -0
- data/docs/README_ranges.rdoc +11 -2
- data/lib/robust_excel_ole/version.rb +1 -1
- data/lib/robust_excel_ole/worksheet.rb +12 -5
- data/robust_excel_ole.gemspec +1 -2
- data/spec/worksheet_spec.rb +12 -4
- metadata +20 -5
- data/extconf.rb +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e27445ccdfcf45a843bf7d4271a36f9ced4b8ab8a0e78212ee4d6f10b5fe4aca
|
|
4
|
+
data.tar.gz: 9aaf9daad0c04d97161dad9bfd3836504812b9581e78ce94eceb1c24ba43705a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9748c186da786a3af11bb47215891f2082dee540b1ef2870512393db02d8f5f685b14e58668e9047f2dcc4793d128c750bf26ae18f9f19e19bc68a5577d9ef2e
|
|
7
|
+
data.tar.gz: 9e1d163cc6e6c035cb6621aaafbc6701785e553cf8a19f7b0fe7936a0253b1f298864a6905319b4501fb9cece53d512083dd0148abc3571eae9326b9966d8329
|
data/Changelog
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
|
3
3
|
|
|
4
|
+
|
|
5
|
+
## [1.19] 2020-30-5
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Workheet#values, each_rowvalue
|
|
9
|
+
|
|
10
|
+
|
|
4
11
|
## [1.18] 2020-30-4
|
|
5
12
|
|
|
6
13
|
### Added
|
|
7
14
|
- Workbook#worksheets, worksheets_count
|
|
8
15
|
- Worksheet#each_value
|
|
9
16
|
- Range#value, value=
|
|
10
|
-
|
|
11
|
-
### Changed
|
|
12
17
|
- Range#initialize: optional paramter worksheet
|
|
13
18
|
|
|
14
19
|
## [1.17]
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# ruby-excel-library-examples
|
|
2
|
+
This project contains sample code for reading Excel files with different Ruby libraries.
|
|
3
|
+
|
|
4
|
+
## `.xlsx` File Examples
|
|
5
|
+
Below are code samples for reading current OOXML Excel files using [**rubyXL**](https://github.com/weshatheleopard/rubyXL), [**roo**](https://github.com/roo-rb/roo), [**creek**](https://github.com/pythonicrubyist/creek), and [**simple_xlsx_reader**](https://github.com/woahdae/simple_xlsx_reader).
|
|
6
|
+
|
|
7
|
+
### [rubyXL](https://github.com/weshatheleopard/rubyXL)
|
|
8
|
+
```ruby
|
|
9
|
+
require 'rubyXL'
|
|
10
|
+
|
|
11
|
+
workbook = RubyXL::Parser.parse './sample_excel_files/xlsx_500_rows.xlsx'
|
|
12
|
+
worksheets = workbook.worksheets
|
|
13
|
+
puts "Found #{worksheets.count} worksheets"
|
|
14
|
+
|
|
15
|
+
worksheets.each do |worksheet|
|
|
16
|
+
puts "Reading: #{worksheet.sheet_name}"
|
|
17
|
+
num_rows = 0
|
|
18
|
+
|
|
19
|
+
worksheet.each do |row|
|
|
20
|
+
row_cells = row.cells.map{ |cell| cell.value }
|
|
21
|
+
num_rows += 1
|
|
22
|
+
|
|
23
|
+
# uncomment to print out row values
|
|
24
|
+
# puts row_cells.join " "
|
|
25
|
+
end
|
|
26
|
+
puts "Read #{num_rows} rows"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
puts 'Done'
|
|
30
|
+
```
|
|
31
|
+
### [roo](https://github.com/roo-rb/roo)
|
|
32
|
+
```ruby
|
|
33
|
+
require 'roo'
|
|
34
|
+
|
|
35
|
+
workbook = Roo::Spreadsheet.open './sample_excel_files/xlsx_500_rows.xlsx'
|
|
36
|
+
worksheets = workbook.sheets
|
|
37
|
+
puts "Found #{worksheets.count} worksheets"
|
|
38
|
+
|
|
39
|
+
worksheets.each do |worksheet|
|
|
40
|
+
puts "Reading: #{worksheet}"
|
|
41
|
+
num_rows = 0
|
|
42
|
+
|
|
43
|
+
workbook.sheet(worksheet).each_row_streaming do |row|
|
|
44
|
+
row_cells = row.map { |cell| cell.value }
|
|
45
|
+
num_rows += 1
|
|
46
|
+
|
|
47
|
+
# uncomment to print out row values
|
|
48
|
+
# puts row_cells.join ' '
|
|
49
|
+
end
|
|
50
|
+
puts "Read #{num_rows} rows"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
puts 'Done'
|
|
54
|
+
```
|
|
55
|
+
### [creek](https://github.com/pythonicrubyist/creek)
|
|
56
|
+
```ruby
|
|
57
|
+
require 'creek'
|
|
58
|
+
|
|
59
|
+
workbook = Creek::Book.new './sample_excel_files/xlsx_500_rows.xlsx'
|
|
60
|
+
worksheets = workbook.sheets
|
|
61
|
+
puts "Found #{worksheets.count} worksheets"
|
|
62
|
+
|
|
63
|
+
worksheets.each do |worksheet|
|
|
64
|
+
puts "Reading: #{worksheet.name}"
|
|
65
|
+
num_rows = 0
|
|
66
|
+
|
|
67
|
+
worksheet.rows.each do |row|
|
|
68
|
+
row_cells = row.values
|
|
69
|
+
num_rows += 1
|
|
70
|
+
|
|
71
|
+
# uncomment to print out row values
|
|
72
|
+
# puts row_cells.join " "
|
|
73
|
+
end
|
|
74
|
+
puts "Read #{num_rows} rows"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
puts 'Done'
|
|
78
|
+
```
|
|
79
|
+
### [simple_xlsx_reader](https://github.com/woahdae/simple_xlsx_reader)
|
|
80
|
+
```ruby
|
|
81
|
+
require 'simple_xlsx_reader'
|
|
82
|
+
|
|
83
|
+
workbook = SimpleXlsxReader.open './sample_excel_files/xlsx_500000_rows.xlsx'
|
|
84
|
+
worksheets = workbook.sheets
|
|
85
|
+
puts "Found #{worksheets.count} worksheets"
|
|
86
|
+
|
|
87
|
+
worksheets.each do |worksheet|
|
|
88
|
+
puts "Reading: #{worksheet.name}"
|
|
89
|
+
num_rows = 0
|
|
90
|
+
|
|
91
|
+
worksheet.rows.each do |row|
|
|
92
|
+
row_cells = row
|
|
93
|
+
num_rows += 1
|
|
94
|
+
|
|
95
|
+
# uncomment to print out row values
|
|
96
|
+
# puts row_cells.join ' '
|
|
97
|
+
end
|
|
98
|
+
puts "Read #{num_rows} rows"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
puts 'Done'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Legacy `.xls` Files
|
|
105
|
+
Below are code samples for reading legacy Excel files using [**spreadsheet**](https://github.com/zdavatz/spreadsheet)
|
|
106
|
+
|
|
107
|
+
### [spreadsheet](https://github.com/zdavatz/spreadsheet)
|
|
108
|
+
```ruby
|
|
109
|
+
require 'spreadsheet'
|
|
110
|
+
|
|
111
|
+
# Note: spreadsheet only supports .xls files (not .xlsx)
|
|
112
|
+
workbook = Spreadsheet.open './sample_excel_files/xls_500_rows.xls'
|
|
113
|
+
worksheets = workbook.worksheets
|
|
114
|
+
puts "Found #{worksheets.count} worksheets"
|
|
115
|
+
|
|
116
|
+
worksheets.each do |worksheet|
|
|
117
|
+
puts "Reading: #{worksheet.name}"
|
|
118
|
+
num_rows = 0
|
|
119
|
+
|
|
120
|
+
worksheet.rows.each do |row|
|
|
121
|
+
row_cells = row.to_a.map{ |v| v.methods.include?(:value) ? v.value : v }
|
|
122
|
+
num_rows += 1
|
|
123
|
+
|
|
124
|
+
# uncomment to print out row values
|
|
125
|
+
# puts row_cells.join " "
|
|
126
|
+
end
|
|
127
|
+
puts "Read #{num_rows} rows"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
puts 'Done'
|
|
131
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
require 'creek'
|
|
3
|
+
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
# ============================================
|
|
7
|
+
# =========== Read Example ===============
|
|
8
|
+
# ============================================
|
|
9
|
+
|
|
10
|
+
workbook = Creek::Book.new './sample_excel_files/xlsx_500_rows.xlsx'
|
|
11
|
+
|
|
12
|
+
worksheets = workbook.sheets
|
|
13
|
+
puts "Found #{worksheets.count} worksheets"
|
|
14
|
+
|
|
15
|
+
worksheets.each do |worksheet|
|
|
16
|
+
puts "Reading: #{worksheet.name}"
|
|
17
|
+
num_rows = 0
|
|
18
|
+
|
|
19
|
+
worksheet.rows.each do |row|
|
|
20
|
+
row_cells = row.values
|
|
21
|
+
num_rows += 1
|
|
22
|
+
|
|
23
|
+
# uncomment to print out row values
|
|
24
|
+
# puts row_cells.join " "
|
|
25
|
+
end
|
|
26
|
+
puts "Read #{num_rows} rows"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end_time = Time.now
|
|
30
|
+
running_time = end_time - start_time
|
|
31
|
+
puts "time: #{running_time} sec."
|
|
32
|
+
|
|
33
|
+
puts 'Done'
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require_relative '../lib/robust_excel_ole'
|
|
2
|
+
|
|
3
|
+
include RobustExcelOle
|
|
4
|
+
|
|
5
|
+
begin
|
|
6
|
+
|
|
7
|
+
filename = './large_excel_files/xlsx_10_rows.xlsx'
|
|
8
|
+
Excel.kill_all
|
|
9
|
+
|
|
10
|
+
Workbook.open(filename, :if_absent => :create) do |workbook|
|
|
11
|
+
# default: 3 worksheets
|
|
12
|
+
num_worksheets = 1
|
|
13
|
+
workbook.each do |worksheet|
|
|
14
|
+
puts "worksheet-number #{num_worksheets}"
|
|
15
|
+
num_rows = 1
|
|
16
|
+
(1..10).each do |row|
|
|
17
|
+
puts "row-number: #{num_rows}"
|
|
18
|
+
(1..10).each do |column|
|
|
19
|
+
worksheet[num_rows,column].value = (num_rows-1)*10+column
|
|
20
|
+
end
|
|
21
|
+
num_rows += 1
|
|
22
|
+
end
|
|
23
|
+
num_worksheets += 1
|
|
24
|
+
end
|
|
25
|
+
workbook.save
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
|
|
2
|
+
|
|
3
|
+
start_time = Time.now
|
|
4
|
+
|
|
5
|
+
workbook = RobustExcelOle::Workbook.open './sample_excel_files/xlsx_500_rows.xlsx'
|
|
6
|
+
|
|
7
|
+
puts "Found #{workbook.worksheets_count} worksheets"
|
|
8
|
+
|
|
9
|
+
workbook.each do |worksheet|
|
|
10
|
+
puts "Reading: #{worksheet.name}"
|
|
11
|
+
num_rows = 0
|
|
12
|
+
|
|
13
|
+
worksheet.values.each do |row_vals|
|
|
14
|
+
row_cells = row_vals
|
|
15
|
+
num_rows += 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
puts "Read #{num_rows} rows"
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end_time = Time.now
|
|
23
|
+
running_time = end_time - start_time
|
|
24
|
+
puts "time: #{running_time} sec."
|
|
25
|
+
|
|
26
|
+
puts 'Done'
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#require 'robust_excel_ole'
|
|
2
|
+
require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
|
|
3
|
+
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
workbook = RobustExcelOle::Workbook.open './sample_excel_files/xlsx_500_rows.xlsx'
|
|
7
|
+
|
|
8
|
+
puts "Found #{workbook.Worksheets.Count} worksheets"
|
|
9
|
+
|
|
10
|
+
workbook.each do |worksheet|
|
|
11
|
+
puts "Reading: #{worksheet.name}"
|
|
12
|
+
num_rows = 0
|
|
13
|
+
|
|
14
|
+
worksheet.each_row do |row|
|
|
15
|
+
row_cells = row.map{ |cell| cell.value }
|
|
16
|
+
num_rows += 1
|
|
17
|
+
|
|
18
|
+
# uncomment to print out row values
|
|
19
|
+
# puts row_cells.join " "
|
|
20
|
+
end
|
|
21
|
+
puts "Read #{num_rows} rows"
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
end_time = Time.now
|
|
28
|
+
running_time = end_time - start_time
|
|
29
|
+
puts "time: #{running_time} sec."
|
|
30
|
+
|
|
31
|
+
puts 'Done'
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../lib/robust_excel_ole')
|
|
2
|
+
|
|
3
|
+
start_time = Time.now
|
|
4
|
+
|
|
5
|
+
workbook = RobustExcelOle::Workbook.open './sample_excel_files/xlsx_500_rows.xlsx'
|
|
6
|
+
|
|
7
|
+
puts "Found #{workbook.worksheets_count} worksheets"
|
|
8
|
+
|
|
9
|
+
workbook.each do |worksheet|
|
|
10
|
+
puts "Reading: #{worksheet.name}"
|
|
11
|
+
num_rows = 0
|
|
12
|
+
|
|
13
|
+
worksheet.each_rowvalue do |row_vals|
|
|
14
|
+
row_cells = row_vals
|
|
15
|
+
num_rows += 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
puts "Read #{num_rows} rows"
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end_time = Time.now
|
|
23
|
+
running_time = end_time - start_time
|
|
24
|
+
puts "time: #{running_time} sec."
|
|
25
|
+
|
|
26
|
+
puts 'Done'
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'roo'
|
|
2
|
+
|
|
3
|
+
# ============================================
|
|
4
|
+
# =========== Read Example ===============
|
|
5
|
+
# ============================================
|
|
6
|
+
|
|
7
|
+
start_time = Time.now
|
|
8
|
+
|
|
9
|
+
workbook = Roo::Spreadsheet.open './sample_excel_files/xlsx_500_rows.xlsx'
|
|
10
|
+
|
|
11
|
+
worksheets = workbook.sheets
|
|
12
|
+
puts "Found #{worksheets.count} worksheets"
|
|
13
|
+
|
|
14
|
+
worksheets.each do |worksheet|
|
|
15
|
+
puts "Reading: #{worksheet}"
|
|
16
|
+
num_rows = 0
|
|
17
|
+
|
|
18
|
+
workbook.sheet(worksheet).each_row_streaming do |row|
|
|
19
|
+
row_cells = row.map { |cell| cell.value }
|
|
20
|
+
#puts row_cells.inspect
|
|
21
|
+
num_rows += 1
|
|
22
|
+
|
|
23
|
+
# uncomment to print out row values
|
|
24
|
+
# puts row_cells.join ' '
|
|
25
|
+
end
|
|
26
|
+
puts "Read #{num_rows} rows"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end_time = Time.now
|
|
30
|
+
running_time = end_time - start_time
|
|
31
|
+
puts "time: #{running_time} sec."
|
|
32
|
+
|
|
33
|
+
puts 'Done'
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
require 'rubyXL'
|
|
3
|
+
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
# ============================================
|
|
7
|
+
# =========== Read Example ===============
|
|
8
|
+
# ============================================
|
|
9
|
+
|
|
10
|
+
workbook = RubyXL::Parser.parse './sample_excel_files/xlsx_500_rows.xlsx'
|
|
11
|
+
|
|
12
|
+
worksheets = workbook.worksheets
|
|
13
|
+
puts "Found #{worksheets.count} worksheets"
|
|
14
|
+
|
|
15
|
+
worksheets.each do |worksheet|
|
|
16
|
+
puts "Reading: #{worksheet.sheet_name}"
|
|
17
|
+
num_rows = 0
|
|
18
|
+
|
|
19
|
+
worksheet.each do |row|
|
|
20
|
+
row_cells = row.cells.map{ |cell| cell.value }
|
|
21
|
+
num_rows += 1
|
|
22
|
+
|
|
23
|
+
# uncomment to print out row values
|
|
24
|
+
# puts row_cells.join " "
|
|
25
|
+
end
|
|
26
|
+
puts "Read #{num_rows} rows"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end_time = Time.now
|
|
30
|
+
running_time = end_time - start_time
|
|
31
|
+
puts "time: #{running_time} sec."
|
|
32
|
+
|
|
33
|
+
puts 'Done'
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
puts 'Done'
|
|
Binary file
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
require 'simple_xlsx_reader'
|
|
3
|
+
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
# ============================================
|
|
7
|
+
# =========== Read Example ===============
|
|
8
|
+
# ============================================
|
|
9
|
+
|
|
10
|
+
workbook = SimpleXlsxReader.open './sample_excel_files/xlsx_500_rows.xlsx'
|
|
11
|
+
|
|
12
|
+
worksheets = workbook.sheets
|
|
13
|
+
puts "Found #{worksheets.count} worksheets"
|
|
14
|
+
|
|
15
|
+
worksheets.each do |worksheet|
|
|
16
|
+
puts "Reading: #{worksheet.name}"
|
|
17
|
+
num_rows = 0
|
|
18
|
+
|
|
19
|
+
worksheet.rows.each do |row|
|
|
20
|
+
row_cells = row
|
|
21
|
+
num_rows += 1
|
|
22
|
+
|
|
23
|
+
# uncomment to print out row values
|
|
24
|
+
# puts row_cells.join ' '
|
|
25
|
+
end
|
|
26
|
+
puts "Read #{num_rows} rows"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end_time = Time.now
|
|
30
|
+
running_time = end_time - start_time
|
|
31
|
+
puts "time: #{running_time} sec."
|
|
32
|
+
|
|
33
|
+
puts 'Done'
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
require 'spreadsheet'
|
|
3
|
+
|
|
4
|
+
start_time = Time.now
|
|
5
|
+
|
|
6
|
+
# ============================================
|
|
7
|
+
# =========== Read Example ===============
|
|
8
|
+
# ============================================
|
|
9
|
+
|
|
10
|
+
# Note: spreadsheet only supports .xls files (not .xlsx)
|
|
11
|
+
workbook = Spreadsheet.open './sample_excel_files/xls_500_rows.xls'
|
|
12
|
+
|
|
13
|
+
worksheets = workbook.worksheets
|
|
14
|
+
puts "Found #{worksheets.count} worksheets"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
worksheets.each do |worksheet|
|
|
18
|
+
puts "Reading: #{worksheet.name}"
|
|
19
|
+
num_rows = 0
|
|
20
|
+
|
|
21
|
+
worksheet.rows.each do |row|
|
|
22
|
+
row_cells = row.to_a.map{ |v| v.methods.include?(:value) ? v.value : v }
|
|
23
|
+
num_rows += 1
|
|
24
|
+
|
|
25
|
+
# uncomment to print out row values
|
|
26
|
+
# puts row_cells.join " "
|
|
27
|
+
end
|
|
28
|
+
puts "Read #{num_rows} rows"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end_time = Time.now
|
|
32
|
+
running_time = end_time - start_time
|
|
33
|
+
puts "time: #{running_time} sec."
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
puts 'Done'
|
data/bin/jreo.bat
ADDED
data/bin/reo.bat
ADDED
data/docs/README_ranges.rdoc
CHANGED
|
@@ -394,9 +394,14 @@ The methods Worksheet#each, Worksheet#each_row and Worksheet#each_column enable
|
|
|
394
394
|
# do something with column
|
|
395
395
|
end
|
|
396
396
|
|
|
397
|
-
The method Worksheet#
|
|
397
|
+
The method Worksheet#values yields all cell values of the used range of the worksheet into a 2-dimensional array. For example:
|
|
398
398
|
|
|
399
|
-
worksheet.
|
|
399
|
+
worksheet.values
|
|
400
|
+
=> [["foo", "workbook", "sheet1"], ["foo", nil, "foobaaa"], ["matz", "is", "nice"]]
|
|
401
|
+
|
|
402
|
+
The method Worksheet#each_rowvalue provides enable to access the values of each row.
|
|
403
|
+
|
|
404
|
+
worksheet.each_rowvalue do |row_values|
|
|
400
405
|
# do something with the row_values
|
|
401
406
|
end
|
|
402
407
|
|
|
@@ -405,6 +410,10 @@ You access a range of a row by giving the number of the row, and optionally, the
|
|
|
405
410
|
worksheet.row_range(1) # => first row
|
|
406
411
|
worksheet.row_range(1, 1..3 ) # => first three cells of the first row
|
|
407
412
|
|
|
413
|
+
Reading the values is enabled with help of #values:
|
|
414
|
+
|
|
415
|
+
worksheet.row_range(1).values
|
|
416
|
+
|
|
408
417
|
Simarly you can access a range of a column.
|
|
409
418
|
|
|
410
419
|
worksheet.col_range(3) # => third column
|
|
@@ -109,11 +109,10 @@ module RobustExcelOle
|
|
|
109
109
|
# @params row and column
|
|
110
110
|
# @returns value of the cell
|
|
111
111
|
def cellval(x,y)
|
|
112
|
-
xy = "#{x}_#{y}"
|
|
113
112
|
begin
|
|
114
113
|
@ole_worksheet.Cells.Item(x, y).Value
|
|
115
114
|
rescue
|
|
116
|
-
raise RangeNotEvaluatable, "cannot read cell (#{
|
|
115
|
+
raise RangeNotEvaluatable, "cannot read cell (#{x.inspect},#{y.inspect})"
|
|
117
116
|
end
|
|
118
117
|
end
|
|
119
118
|
|
|
@@ -122,7 +121,7 @@ module RobustExcelOle
|
|
|
122
121
|
xy = "#{x}_#{y}"
|
|
123
122
|
@cells = { }
|
|
124
123
|
begin
|
|
125
|
-
@cells[xy]
|
|
124
|
+
@cells[xy] ||= RobustExcelOle::Cell.new(@ole_worksheet.Cells.Item(x, y), @worksheet)
|
|
126
125
|
@cells[xy].Value
|
|
127
126
|
rescue
|
|
128
127
|
raise RangeNotEvaluatable, "cannot read cell (#{p1.inspect},#{p2.inspect})"
|
|
@@ -141,6 +140,10 @@ module RobustExcelOle
|
|
|
141
140
|
raise RangeNotEvaluatable, "cannot assign value #{value.inspect} to cell (#{y.inspect},#{x.inspect})"
|
|
142
141
|
end
|
|
143
142
|
|
|
143
|
+
def values
|
|
144
|
+
@ole_worksheet.UsedRange.Value
|
|
145
|
+
end
|
|
146
|
+
|
|
144
147
|
def each
|
|
145
148
|
each_row do |row_range|
|
|
146
149
|
row_range.each do |cell|
|
|
@@ -159,13 +162,17 @@ module RobustExcelOle
|
|
|
159
162
|
end
|
|
160
163
|
end
|
|
161
164
|
|
|
162
|
-
def
|
|
165
|
+
def each_rowvalue
|
|
163
166
|
@ole_worksheet.UsedRange.Value.each do |row_values|
|
|
164
167
|
yield row_values
|
|
165
168
|
end
|
|
166
169
|
end
|
|
167
170
|
|
|
168
|
-
def
|
|
171
|
+
def each_value # :deprecated: #
|
|
172
|
+
each_rowvalue
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def each_rowvalue_with_index(offset = 0)
|
|
169
176
|
i = offset
|
|
170
177
|
@ole_worksheet.UsedRange.Value.each do |row_values|
|
|
171
178
|
yield row_values, i
|
data/robust_excel_ole.gemspec
CHANGED
|
@@ -34,6 +34,5 @@ Gem::Specification.new do |s|
|
|
|
34
34
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
35
35
|
s.require_paths = ["lib"]
|
|
36
36
|
s.add_development_dependency "rspec", '>= 2.6.0'
|
|
37
|
-
s.required_ruby_version = '>= 1
|
|
38
|
-
#s.extensions << 'extconf.rb'
|
|
37
|
+
s.required_ruby_version = '>= 2.1'
|
|
39
38
|
end
|
data/spec/worksheet_spec.rb
CHANGED
|
@@ -295,17 +295,25 @@ describe Worksheet do
|
|
|
295
295
|
|
|
296
296
|
end
|
|
297
297
|
|
|
298
|
-
describe "#
|
|
298
|
+
describe "#values" do
|
|
299
|
+
|
|
300
|
+
it "should yield cell values of the used range" do
|
|
301
|
+
@sheet.values.should == [["foo", "workbook", "sheet1"], ["foo", nil, "foobaaa"], ["matz", "is", "nice"]]
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
describe "#each_rowvalue" do
|
|
299
307
|
|
|
300
308
|
it "should yield arrays" do
|
|
301
|
-
@sheet.
|
|
309
|
+
@sheet.each_rowvalue do |row_value|
|
|
302
310
|
row_value.should be_kind_of Array
|
|
303
311
|
end
|
|
304
312
|
end
|
|
305
313
|
|
|
306
314
|
it "should read the rows" do
|
|
307
315
|
i = 0
|
|
308
|
-
@sheet.
|
|
316
|
+
@sheet.each_rowvalue do |row_values|
|
|
309
317
|
case i
|
|
310
318
|
when 0
|
|
311
319
|
row_values.should == ['foo', 'workbook', 'sheet1']
|
|
@@ -317,7 +325,7 @@ describe Worksheet do
|
|
|
317
325
|
end
|
|
318
326
|
|
|
319
327
|
it "should read the rows with index" do
|
|
320
|
-
@sheet.
|
|
328
|
+
@sheet.each_rowvalue_with_index do |row_values, i|
|
|
321
329
|
case i
|
|
322
330
|
when 0
|
|
323
331
|
row_values.should == ['foo', 'workbook', 'sheet1']
|
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.18.
|
|
4
|
+
version: 1.18.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- traths
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-06-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -33,7 +33,9 @@ description: "RobustExcelOle helps controlling Excel. \n This
|
|
|
33
33
|
are supported.\n It runs on Windows and uses the win32ole library."
|
|
34
34
|
email:
|
|
35
35
|
- Thomas.Raths@gmx.net
|
|
36
|
-
executables:
|
|
36
|
+
executables:
|
|
37
|
+
- jreo.bat
|
|
38
|
+
- reo.bat
|
|
37
39
|
extensions: []
|
|
38
40
|
extra_rdoc_files:
|
|
39
41
|
- README.rdoc
|
|
@@ -50,6 +52,20 @@ files:
|
|
|
50
52
|
- Rakefile
|
|
51
53
|
- TodoList.md
|
|
52
54
|
- ___dummy_workbook.xls
|
|
55
|
+
- benchmarking/Gemfile
|
|
56
|
+
- benchmarking/README.md
|
|
57
|
+
- benchmarking/creek_example.rb
|
|
58
|
+
- benchmarking/generating_excel_files.rb
|
|
59
|
+
- benchmarking/reo_example.rb
|
|
60
|
+
- benchmarking/reo_example1.rb
|
|
61
|
+
- benchmarking/reo_example2.rb
|
|
62
|
+
- benchmarking/roo_example.rb
|
|
63
|
+
- benchmarking/ruby_xl_example.rb
|
|
64
|
+
- benchmarking/sample_excel_files/xlsx_500_rows.xlsx
|
|
65
|
+
- benchmarking/simple_xlsx_reader_example.rb
|
|
66
|
+
- benchmarking/spreadsheet_example.rb
|
|
67
|
+
- bin/jreo.bat
|
|
68
|
+
- bin/reo.bat
|
|
53
69
|
- docs/README_excel.rdoc
|
|
54
70
|
- docs/README_open.rdoc
|
|
55
71
|
- docs/README_ranges.rdoc
|
|
@@ -82,7 +98,6 @@ files:
|
|
|
82
98
|
- examples/open_save_close/example_reuse.rb
|
|
83
99
|
- examples/open_save_close/example_simple.rb
|
|
84
100
|
- examples/open_save_close/example_unobtrusively.rb
|
|
85
|
-
- extconf.rb
|
|
86
101
|
- jreo.bat
|
|
87
102
|
- lib/jreo_console.rb
|
|
88
103
|
- lib/reo_console.rb
|
|
@@ -159,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
159
174
|
requirements:
|
|
160
175
|
- - ">="
|
|
161
176
|
- !ruby/object:Gem::Version
|
|
162
|
-
version: 1
|
|
177
|
+
version: '2.1'
|
|
163
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
179
|
requirements:
|
|
165
180
|
- - ">="
|