spreadsheet 1.2.6 → 1.2.7
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 +5 -5
- data/bin/bundler +17 -0
- data/bin/oletool +17 -0
- data/bin/rake +17 -0
- data/bin/sow +17 -0
- data/bin/xlsopcodes +13 -14
- data/lib/spreadsheet/excel.rb +0 -6
- data/lib/spreadsheet/version.rb +1 -1
- data/test/data/test_compact_format_date.xls +0 -0
- data/test/data/test_compact_many_rows.xls +0 -0
- data/test/data/test_missing_format.xls +0 -0
- data/test/data/test_sizes.xls +0 -0
- data/test/suite.rb +2 -0
- metadata +42 -48
- data/.gitignore +0 -3
- data/.travis.yml +0 -46
- data/Excel97-2007BinaryFileFormatSpecification.pdf +0 -0
- data/GUIDE.md +0 -339
- data/Gemfile +0 -11
- data/History.md +0 -849
- data/README.md +0 -114
- data/Rakefile +0 -24
- data/excelfileformat.pdf +0 -0
- data/spreadsheet.gemspec +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f3838959e9ca05cea64d92732af76a16989f192dee2ae8d6faa78f43f3148858
|
4
|
+
data.tar.gz: 6655bef2181febca0c1f052b557012f8ac08c35e1aa5a69d360e0b006b8231df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d215eec2e59d1e51a3d895b2dde467b48e3c807fedb871cd08c2f014fda0ddfb13af7629e1cfd4b72a65e56816fd2c635ce9f57ed744c156be11601aaa0fc3dc
|
7
|
+
data.tar.gz: 39963a66c937f064717bdbbe861ac786a2b3a3541409c0852da17f13d63c1c3dc449fc4f9b40bc1e31ca68bedc3a1fe0c43bdba8a32091249eec8d7240ce1140
|
data/bin/bundler
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'bundler' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("bundler", "bundler")
|
data/bin/oletool
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'oletool' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("ruby-ole", "oletool")
|
data/bin/rake
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'rake' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("rake", "rake")
|
data/bin/sow
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'sow' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
9
|
+
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
13
|
+
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
16
|
+
|
17
|
+
load Gem.bin_path("hoe", "sow")
|
data/bin/xlsopcodes
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
#
|
4
|
+
# This file was generated by Bundler.
|
5
|
+
#
|
6
|
+
# The application 'xlsopcodes' is installed as part of a gem, and
|
7
|
+
# this file is here to facilitate running it.
|
8
|
+
#
|
2
9
|
|
3
|
-
require
|
10
|
+
require "pathname"
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
12
|
+
Pathname.new(__FILE__).realpath)
|
4
13
|
|
5
|
-
|
14
|
+
require "rubygems"
|
15
|
+
require "bundler/setup"
|
6
16
|
|
7
|
-
|
8
|
-
puts "Usage: #{$0} <source> [<target>]"
|
9
|
-
exit -1
|
10
|
-
end
|
11
|
-
|
12
|
-
target = target ? File.open(target, 'w') : STDOUT
|
13
|
-
|
14
|
-
reader = Spreadsheet::Excel::Reader.new :print_opcodes => target
|
15
|
-
reader.setup File.open(source)
|
16
|
-
|
17
|
-
while tuple = reader.get_next_chunk
|
18
|
-
end
|
17
|
+
load Gem.bin_path("spreadsheet", "xlsopcodes")
|
data/lib/spreadsheet/excel.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
require 'spreadsheet'
|
2
2
|
|
3
|
-
warn <<-EOS
|
4
|
-
[DEPRECATED] By requiring 'spreadsheet/excel' you are loading a Compatibility
|
5
|
-
layer which provides a drop-in replacement for Spreadsheet::Excel
|
6
|
-
versions <= 0.3.5.1. This code will be removed in Spreadsheet
|
7
|
-
version 1.0.0
|
8
|
-
EOS
|
9
3
|
##
|
10
4
|
# Spreadsheet::Excel Compatibility Layer.
|
11
5
|
# Drop-in replacement for Spreadsheet::Excel version <= 0.3.5.1
|
data/lib/spreadsheet/version.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/suite.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spreadsheet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hannes F. Wyss, Masaomi Hatakeyama, Zeno R.R. Davatz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-ole
|
@@ -16,78 +16,71 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
- - "<"
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: '7'
|
33
|
+
version: '0'
|
37
34
|
type: :development
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - ">="
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
44
|
-
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
45
53
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
54
|
+
version: '0'
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
56
|
+
name: simplecov
|
49
57
|
requirement: !ruby/object:Gem::Requirement
|
50
58
|
requirements:
|
51
|
-
- - "
|
59
|
+
- - ">="
|
52
60
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
61
|
+
version: '0'
|
54
62
|
type: :development
|
55
63
|
prerelease: false
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
65
|
requirements:
|
58
|
-
- - "
|
66
|
+
- - ">="
|
59
67
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
61
|
-
description:
|
62
|
-
|
63
|
-
|
64
|
-
supported. Spreadsheet is a combination/complete rewrite of the
|
65
|
-
Spreadsheet::Excel Library by Daniel J. Berger and the ParseExcel Library by
|
66
|
-
Hannes Wyss. Spreadsheet can read, write and modify Spreadsheet Documents.
|
67
|
-
email: zdavatz@ywesee.com
|
68
|
+
version: '0'
|
69
|
+
description: As of version 0.6.0, only Microsoft Excel compatible spreadsheets are
|
70
|
+
supported
|
71
|
+
email: hannes.wyss@gmail.com, mhatakeyama@ywesee.com, zdavatz@ywesee.com
|
68
72
|
executables:
|
69
73
|
- xlsopcodes
|
70
74
|
extensions: []
|
71
|
-
extra_rdoc_files:
|
72
|
-
- GUIDE.md
|
73
|
-
- History.md
|
74
|
-
- LICENSE.txt
|
75
|
-
- Manifest.txt
|
76
|
-
- README.md
|
75
|
+
extra_rdoc_files: []
|
77
76
|
files:
|
78
|
-
- ".gitignore"
|
79
|
-
- ".travis.yml"
|
80
|
-
- Excel97-2007BinaryFileFormatSpecification.pdf
|
81
|
-
- GUIDE.md
|
82
|
-
- Gemfile
|
83
|
-
- Gemfile.lock
|
84
|
-
- History.md
|
85
77
|
- LICENSE.txt
|
86
78
|
- Manifest.txt
|
87
|
-
-
|
88
|
-
-
|
79
|
+
- bin/bundler
|
80
|
+
- bin/oletool
|
81
|
+
- bin/rake
|
82
|
+
- bin/sow
|
89
83
|
- bin/xlsopcodes
|
90
|
-
- excelfileformat.pdf
|
91
84
|
- lib/parseexcel.rb
|
92
85
|
- lib/parseexcel/parseexcel.rb
|
93
86
|
- lib/parseexcel/parser.rb
|
@@ -130,11 +123,12 @@ files:
|
|
130
123
|
- lib/spreadsheet/workbook.rb
|
131
124
|
- lib/spreadsheet/worksheet.rb
|
132
125
|
- lib/spreadsheet/writer.rb
|
133
|
-
- spreadsheet.gemspec
|
134
126
|
- test/data/test_adding_data_to_existing_file.xls
|
135
127
|
- test/data/test_borders.xls
|
136
128
|
- test/data/test_changes.xls
|
137
129
|
- test/data/test_comment.xls
|
130
|
+
- test/data/test_compact_format_date.xls
|
131
|
+
- test/data/test_compact_many_rows.xls
|
138
132
|
- test/data/test_copy.xls
|
139
133
|
- test/data/test_datetime.xls
|
140
134
|
- test/data/test_empty.xls
|
@@ -143,8 +137,10 @@ files:
|
|
143
137
|
- test/data/test_margin.xls
|
144
138
|
- test/data/test_merged_and_protected.xls
|
145
139
|
- test/data/test_merged_cells.xls
|
140
|
+
- test/data/test_missing_format.xls
|
146
141
|
- test/data/test_missing_row.xls
|
147
142
|
- test/data/test_pagesetup.xls
|
143
|
+
- test/data/test_sizes.xls
|
148
144
|
- test/data/test_text_drawing.xls
|
149
145
|
- test/data/test_version_excel5.xls
|
150
146
|
- test/data/test_version_excel95.xls
|
@@ -163,14 +159,12 @@ files:
|
|
163
159
|
- test/workbook.rb
|
164
160
|
- test/workbook_protection.rb
|
165
161
|
- test/worksheet.rb
|
166
|
-
homepage: https://github.com/zdavatz/spreadsheet
|
162
|
+
homepage: https://github.com/zdavatz/spreadsheet/
|
167
163
|
licenses:
|
168
164
|
- GPL-3.0
|
169
165
|
metadata: {}
|
170
166
|
post_install_message:
|
171
|
-
rdoc_options:
|
172
|
-
- "--main"
|
173
|
-
- README.md
|
167
|
+
rdoc_options: []
|
174
168
|
require_paths:
|
175
169
|
- lib
|
176
170
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -184,9 +178,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
178
|
- !ruby/object:Gem::Version
|
185
179
|
version: '0'
|
186
180
|
requirements: []
|
187
|
-
|
188
|
-
rubygems_version: 2.6.8
|
181
|
+
rubygems_version: 3.2.3
|
189
182
|
signing_key:
|
190
183
|
specification_version: 4
|
191
184
|
summary: The Spreadsheet Library is designed to read and write Spreadsheet Documents
|
192
|
-
test_files:
|
185
|
+
test_files:
|
186
|
+
- test/suite.rb
|
data/.gitignore
DELETED
data/.travis.yml
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
dist: trusty
|
3
|
-
sudo: false
|
4
|
-
cache: bundler
|
5
|
-
before_install:
|
6
|
-
- "if $(ruby -e 'exit(RUBY_VERSION >= \"2.3.0\")'); then env -u RUBYOPT gem update --system; fi"
|
7
|
-
- "if $(ruby -e 'exit(RUBY_VERSION >= \"2.3.0\")'); then env -u RUBYOPT gem install bundler --no-document; fi"
|
8
|
-
- "if $(ruby -e 'exit(RUBY_VERSION < \"2.3.0\")'); then gem install bundler -v 1.17.3 --no-document; fi"
|
9
|
-
bundler_args: --binstubs
|
10
|
-
script: "bundle exec ruby test/suite.rb"
|
11
|
-
rvm:
|
12
|
-
- ruby-head
|
13
|
-
- 2.6.3
|
14
|
-
- 2.5.5
|
15
|
-
- 2.4.5
|
16
|
-
- 2.3.8
|
17
|
-
- 2.2.10
|
18
|
-
- 2.1.10
|
19
|
-
- 2.0.0
|
20
|
-
- 1.9.3
|
21
|
-
- 1.9.2
|
22
|
-
- 1.8.7
|
23
|
-
- rbx-19mode
|
24
|
-
- rbx-18mode
|
25
|
-
- jruby-head
|
26
|
-
- jruby-19mode
|
27
|
-
- jruby-18mode
|
28
|
-
- ree
|
29
|
-
matrix:
|
30
|
-
include:
|
31
|
-
- rvm: 2.4.5
|
32
|
-
env: RUBYOPT='--enable-frozen-string-literal --debug-frozen-string-literal' USE_LATEST_RUBY_OLE=yes
|
33
|
-
- rvm: 2.5.5
|
34
|
-
env: RUBYOPT='--enable-frozen-string-literal --debug-frozen-string-literal' USE_LATEST_RUBY_OLE=yes
|
35
|
-
- rvm: 2.6.3
|
36
|
-
env: RUBYOPT='--enable-frozen-string-literal --debug-frozen-string-literal' USE_LATEST_RUBY_OLE=yes
|
37
|
-
allow_failures:
|
38
|
-
- rvm: ruby-head
|
39
|
-
- rvm: rbx-19mode
|
40
|
-
- rvm: rbx-18mode
|
41
|
-
- rvm: jruby-head
|
42
|
-
- rvm: jruby-19mode
|
43
|
-
- rvm: jruby-18mode
|
44
|
-
- rvm: ree
|
45
|
-
email:
|
46
|
-
false
|
Binary file
|
data/GUIDE.md
DELETED
@@ -1,339 +0,0 @@
|
|
1
|
-
# Getting Started with Spreadsheet
|
2
|
-
This guide is meant to get you started using Spreadsheet. By the end of it,
|
3
|
-
you should be able to read and write Spreadsheets.
|
4
|
-
|
5
|
-
Before you can do anything, you first need to make sure all that code is
|
6
|
-
loaded:
|
7
|
-
|
8
|
-
```ruby
|
9
|
-
require 'spreadsheet'
|
10
|
-
```
|
11
|
-
|
12
|
-
## Reading is easy!
|
13
|
-
|
14
|
-
Worksheets come in various encodings. You need to tell Spreadsheet which
|
15
|
-
encoding you want to deal with. The default is UTF-8
|
16
|
-
|
17
|
-
```ruby
|
18
|
-
Spreadsheet.client_encoding = 'UTF-8'
|
19
|
-
```
|
20
|
-
|
21
|
-
Let's open a workbook:
|
22
|
-
|
23
|
-
```ruby
|
24
|
-
book = Spreadsheet.open '/path/to/an/excel-file.xls'
|
25
|
-
```
|
26
|
-
|
27
|
-
We can either access all the worksheets in a workbook...
|
28
|
-
|
29
|
-
```ruby
|
30
|
-
book.worksheets
|
31
|
-
```
|
32
|
-
|
33
|
-
...or access them by index or name (encoded in your `client_encoding`).
|
34
|
-
|
35
|
-
```ruby
|
36
|
-
sheet1 = book.worksheet 0
|
37
|
-
sheet2 = book.worksheet 'Sheet1'
|
38
|
-
```
|
39
|
-
|
40
|
-
Now you can either iterate over all rows that contain some data. A call to
|
41
|
-
`Worksheet.each` without arguments will omit empty rows at the beginning of the
|
42
|
-
worksheet:
|
43
|
-
|
44
|
-
```ruby
|
45
|
-
sheet1.each do |row|
|
46
|
-
# do something interesting with a row
|
47
|
-
end
|
48
|
-
```
|
49
|
-
|
50
|
-
Or you can tell a worksheet how many rows should be omitted at the beginning.
|
51
|
-
The following starts at the 3rd row, regardless of whether or not it or the
|
52
|
-
preceding rows contain any data:
|
53
|
-
|
54
|
-
```ruby
|
55
|
-
sheet2.each 2 do |row|
|
56
|
-
# do something interesting with a row
|
57
|
-
end
|
58
|
-
```
|
59
|
-
|
60
|
-
Or you can access rows directly, by their index (0-based):
|
61
|
-
|
62
|
-
```ruby
|
63
|
-
row = sheet1.row(3)
|
64
|
-
```
|
65
|
-
|
66
|
-
To access the values stored in a row, treat the row like an array.
|
67
|
-
|
68
|
-
```ruby
|
69
|
-
row[0]
|
70
|
-
```
|
71
|
-
|
72
|
-
This will return a `String`, a `Float`, an `Integer`, a `Formula`, a `Link` or a `Date`
|
73
|
-
or `DateTime` object - or `nil` if the cell is empty.
|
74
|
-
|
75
|
-
More information about the formatting of a cell can be found in the format
|
76
|
-
with the equivalent index:
|
77
|
-
|
78
|
-
```ruby
|
79
|
-
row.format 2
|
80
|
-
```
|
81
|
-
|
82
|
-
## Writing is easy
|
83
|
-
As before, make sure you have Spreadsheet required and the client_encoding
|
84
|
-
set. Then make a new Workbook:
|
85
|
-
|
86
|
-
```ruby
|
87
|
-
book = Spreadsheet::Workbook.new
|
88
|
-
```
|
89
|
-
|
90
|
-
Add a Worksheet and you're good to go:
|
91
|
-
|
92
|
-
```ruby
|
93
|
-
sheet1 = book.create_worksheet
|
94
|
-
```
|
95
|
-
|
96
|
-
This will create a Worksheet with the Name "Worksheet1". If you prefer another
|
97
|
-
name, you may do either of the following:
|
98
|
-
|
99
|
-
```ruby
|
100
|
-
sheet2 = book.create_worksheet :name => 'My Second Worksheet'
|
101
|
-
sheet1.name = 'My First Worksheet'
|
102
|
-
```
|
103
|
-
|
104
|
-
Now, add data to the Worksheet, using either Worksheet#[]=,
|
105
|
-
Worksheet#update_row, or work directly on Row using any of the Array-Methods
|
106
|
-
that modify an Array in place:
|
107
|
-
|
108
|
-
```ruby
|
109
|
-
sheet1.row(0).concat %w{Name Country Acknowlegement}
|
110
|
-
sheet1[1,0] = 'Japan'
|
111
|
-
row = sheet1.row(1)
|
112
|
-
row.push 'Creator of Ruby'
|
113
|
-
row.unshift 'Yukihiro Matsumoto'
|
114
|
-
sheet1.row(2).replace [ 'Daniel J. Berger', 'U.S.A.',
|
115
|
-
'Author of original code for Spreadsheet::Excel' ]
|
116
|
-
sheet1.row(3).push 'Charles Lowe', 'Author of the ruby-ole Library'
|
117
|
-
sheet1.row(3).insert 1, 'Unknown'
|
118
|
-
sheet1.update_row 4, 'Hannes Wyss', 'Switzerland', 'Author'
|
119
|
-
```
|
120
|
-
|
121
|
-
Add some Formatting for flavour:
|
122
|
-
|
123
|
-
```ruby
|
124
|
-
sheet1.row(0).height = 18
|
125
|
-
|
126
|
-
format = Spreadsheet::Format.new :color => :blue,
|
127
|
-
:weight => :bold,
|
128
|
-
:size => 18
|
129
|
-
sheet1.row(0).default_format = format
|
130
|
-
|
131
|
-
bold = Spreadsheet::Format.new :weight => :bold
|
132
|
-
4.times do |x| sheet1.row(x + 1).set_format(0, bold) end
|
133
|
-
```
|
134
|
-
|
135
|
-
And finally, write the Excel File:
|
136
|
-
|
137
|
-
```ruby
|
138
|
-
book.write '/path/to/output/excel-file.xls'
|
139
|
-
```
|
140
|
-
|
141
|
-
## Modifying an existing Document
|
142
|
-
|
143
|
-
Spreadsheet has some limited support for modifying an existing Document. This
|
144
|
-
is done by copying verbatim those parts of an Excel-document which Spreadsheet
|
145
|
-
can't modify (yet), recalculating relevant offsets, and writing the data that
|
146
|
-
can be changed.
|
147
|
-
Here's what should work:
|
148
|
-
|
149
|
-
* Adding, changing and deleting cells.
|
150
|
-
* You should be able to fill in Data to be evaluated by predefined Formulas
|
151
|
-
|
152
|
-
Limitations:
|
153
|
-
|
154
|
-
* Spreadsheet can only write BIFF8 (Excel97 and higher). The results of
|
155
|
-
modifying an earlier version of Excel are undefined.
|
156
|
-
* Spreadsheet does not modify Formatting at present. That means in particular
|
157
|
-
that if you set the Value of a Cell to a Date, it can only be read as a
|
158
|
-
Date if its Format was set correctly prior to the change.
|
159
|
-
* Although it is theoretically possible, it is not recommended to write the
|
160
|
-
resulting Document back to the same File/IO that it was read from.
|
161
|
-
|
162
|
-
And here's how it works:
|
163
|
-
|
164
|
-
```ruby
|
165
|
-
book = Spreadsheet.open '/path/to/an/excel-file.xls'
|
166
|
-
sheet = book.worksheet 0
|
167
|
-
sheet.each do |row|
|
168
|
-
row[0] *= 2
|
169
|
-
end
|
170
|
-
book.write '/path/to/output/excel-file.xls'
|
171
|
-
```
|
172
|
-
|
173
|
-
Or you can directly access the cell that you want and add your text on it:
|
174
|
-
|
175
|
-
```ruby
|
176
|
-
sheet.rows[2][1] = "X"
|
177
|
-
```
|
178
|
-
|
179
|
-
## Date and DateTime
|
180
|
-
Excel does not know a separate Datatype for Dates. Instead it encodes Dates
|
181
|
-
into standard floating-point numbers and recognizes a Date-Cell by its
|
182
|
-
formatting-string:
|
183
|
-
|
184
|
-
```ruby
|
185
|
-
row.format(3).number_format
|
186
|
-
```
|
187
|
-
|
188
|
-
Whenever a Cell's Format describes a Date or Time, Spreadsheet will give you
|
189
|
-
the decoded Date or DateTime value. Should you need to access the underlying
|
190
|
-
Float, you may do the following:
|
191
|
-
|
192
|
-
```ruby
|
193
|
-
row.at(3)
|
194
|
-
```
|
195
|
-
|
196
|
-
If for some reason the Date-recognition fails, you may force Date-decoding:
|
197
|
-
|
198
|
-
```ruby
|
199
|
-
row.date(3)
|
200
|
-
row.datetime(3)
|
201
|
-
```
|
202
|
-
|
203
|
-
When you set the value of a Cell to a Date, Time or DateTime, Spreadsheet will
|
204
|
-
try to set the cell's number-format to a corresponding value (one of Excel's
|
205
|
-
builtin formats). If you have already defined a Date- or DateTime-format,
|
206
|
-
Spreadsheet will use that instead. If a format has already been applied to
|
207
|
-
a particular Cell, Spreadsheet will leave it untouched:
|
208
|
-
|
209
|
-
```ruby
|
210
|
-
row[4] = Date.new 1975, 8, 21
|
211
|
-
# -> assigns the builtin Date-Format: 'M/D/YY'
|
212
|
-
book.add_format Format.new(:number_format => 'DD.MM.YYYY hh:mm:ss')
|
213
|
-
row[5] = DateTime.new 2008, 10, 12, 11, 59
|
214
|
-
# -> assigns the added DateTime-Format: 'DD.MM.YYYY hh:mm:ss'
|
215
|
-
row.set_format 6, Format.new(:number_format => 'D-MMM-YYYY')
|
216
|
-
row[6] = Time.new 2008, 10, 12
|
217
|
-
# -> the Format of cell 6 is left unchanged.
|
218
|
-
```
|
219
|
-
|
220
|
-
## Outline (Grouping) and Hiding
|
221
|
-
Spreadsheet supports outline (grouping) and hiding functions from version
|
222
|
-
0.6.5. In order to hide rows or columns, you can use 'hidden' property.
|
223
|
-
As for outline, 'outline_level' property is also available. You can use
|
224
|
-
both 'hidden' and 'outline_level' at the same time.
|
225
|
-
|
226
|
-
You can create a new file with outline and hiding rows and columns as
|
227
|
-
follows:
|
228
|
-
|
229
|
-
```ruby
|
230
|
-
require 'spreadsheet'
|
231
|
-
|
232
|
-
# create a new book and sheet
|
233
|
-
book = Spreadsheet::Workbook.new
|
234
|
-
sheet = book.create_worksheet
|
235
|
-
5.times {|j| 5.times {|i| sheet[j,i] = (i+1)*10**j}}
|
236
|
-
|
237
|
-
# column
|
238
|
-
sheet.column(2).hidden = true
|
239
|
-
sheet.column(3).hidden = true
|
240
|
-
sheet.column(2).outline_level = 1
|
241
|
-
sheet.column(3).outline_level = 1
|
242
|
-
|
243
|
-
# row
|
244
|
-
sheet.row(2).hidden = true
|
245
|
-
sheet.row(3).hidden = true
|
246
|
-
sheet.row(2).outline_level = 1
|
247
|
-
sheet.row(3).outline_level = 1
|
248
|
-
|
249
|
-
# save file
|
250
|
-
book.write 'out.xls'
|
251
|
-
```
|
252
|
-
|
253
|
-
Also you can read an existing file and change the hidden and outline
|
254
|
-
properties. Here is the example below:
|
255
|
-
|
256
|
-
```ruby
|
257
|
-
require 'spreadsheet'
|
258
|
-
|
259
|
-
# read an existing file
|
260
|
-
file = ARGV[0]
|
261
|
-
book = Spreadsheet.open(file, 'rb')
|
262
|
-
sheet= book.worksheet(0)
|
263
|
-
|
264
|
-
# column
|
265
|
-
sheet.column(2).hidden = true
|
266
|
-
sheet.column(3).hidden = true
|
267
|
-
sheet.column(2).outline_level = 1
|
268
|
-
sheet.column(3).outline_level = 1
|
269
|
-
|
270
|
-
# row
|
271
|
-
sheet.row(2).hidden = true
|
272
|
-
sheet.row(3).hidden = true
|
273
|
-
sheet.row(2).outline_level = 1
|
274
|
-
sheet.row(3).outline_level = 1
|
275
|
-
|
276
|
-
# save file
|
277
|
-
book.write "out.xls"
|
278
|
-
```
|
279
|
-
|
280
|
-
Notes
|
281
|
-
* The outline_level should be under 8, which is due to the Excel data format.
|
282
|
-
|
283
|
-
## Allow access to rendered output instead of just writing a file
|
284
|
-
|
285
|
-
```ruby
|
286
|
-
file_contents = StringIO.new
|
287
|
-
book.write file_contents # => Now file_contents contains the rendered file output
|
288
|
-
```
|
289
|
-
|
290
|
-
Also see: https://github.com/zdavatz/spreadsheet/issues/125#issuecomment-75541041
|
291
|
-
|
292
|
-
## More about Encodings
|
293
|
-
Spreadsheet assumes it's running on Ruby 1.8 with Iconv-support. It is your
|
294
|
-
responsibility to handle Conversion Errors, or to prevent them e.g. by using
|
295
|
-
the Iconv Transliteration and Ignore flags:
|
296
|
-
Spreadsheet.client_encoding = 'LATIN1//TRANSLIT//IGNORE'
|
297
|
-
|
298
|
-
## Page setup (for printing)
|
299
|
-
|
300
|
-
```ruby
|
301
|
-
sheet.pagesetup[:orientation] = :landscape # or :portrait (default)
|
302
|
-
sheet.pagesetup[:adjust_to] = 85 # default 100
|
303
|
-
```
|
304
|
-
|
305
|
-
## Backward Compatibility
|
306
|
-
Spreadsheet is designed to be a drop-in replacement for both ParseExcel and
|
307
|
-
Spreadsheet::Excel. It provides a number of require-paths for backward
|
308
|
-
compatibility with its predecessors. If you have been working with ParseExcel,
|
309
|
-
you have probably used one or more of the following:
|
310
|
-
|
311
|
-
```ruby
|
312
|
-
require 'parseexcel'
|
313
|
-
require 'parseexcel/parseexcel'
|
314
|
-
require 'parseexcel/parser'
|
315
|
-
```
|
316
|
-
|
317
|
-
Either of the above will define the ParseExcel.parse method as a facade to
|
318
|
-
Spreadsheet.open. Additionally, this will alter Spreadsheets behavior to define
|
319
|
-
the ParseExcel::Worksheet::Cell class and fill each parsed Row with instances
|
320
|
-
thereof, which in turn provide ParseExcel's Cell#to_s(encoding) and Cell#date
|
321
|
-
methods.
|
322
|
-
You will have to manually uninstall the parseexcel library.
|
323
|
-
|
324
|
-
If you are upgrading from Spreadsheet::Excel, you were probably using
|
325
|
-
Workbook#add_worksheet and Worksheet#write, write_row or write_column.
|
326
|
-
Use the following to load the code which provides them:
|
327
|
-
|
328
|
-
```ruby
|
329
|
-
require 'spreadsheet/excel'
|
330
|
-
```
|
331
|
-
|
332
|
-
Again, you will have to manually uninstall the spreadsheet-excel library.
|
333
|
-
|
334
|
-
If you perform fancy formatting, you may run into trouble as the
|
335
|
-
Format implementation has changed considerably. If that is the case, please
|
336
|
-
drop me a line at "zdavatz at ywesee dot com" and I will try to help you. Don't
|
337
|
-
forget to include the offending code-snippet!
|
338
|
-
|
339
|
-
All compatibility code is deprecated and will be removed in version 1.0.0
|