spreadsheet 0.6.9 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/lib/spreadsheet.rb +1 -1
- data/lib/spreadsheet/excel/reader.rb +10 -0
- data/lib/spreadsheet/excel/writer/worksheet.rb +11 -0
- data/lib/spreadsheet/worksheet.rb +21 -1
- data/spreadsheet.gemspec +3 -1
- data/test/integration.rb +26 -0
- metadata +51 -75
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 0.7.0 / 07.05.2012
|
2
|
+
|
3
|
+
* Author: Artem Ignatiev <zazubrik@gmail.com>
|
4
|
+
* use both ruby 1.8 and 1.9 compatible way of getting character code when hashing
|
5
|
+
* Fix syntax for ruby-1.9
|
6
|
+
* return gemspec so that bundler can find it
|
7
|
+
When bundler loads gemspec, it evaluates it, and if the return value is
|
8
|
+
not a gem specification built, refuses to load the gem.
|
9
|
+
* Testing worksheet protection
|
10
|
+
|
1
11
|
=== 0.6.9 / 28.04.2012
|
2
12
|
|
3
13
|
* Yield is more simple here too.
|
data/lib/spreadsheet.rb
CHANGED
@@ -866,6 +866,8 @@ class Reader
|
|
866
866
|
read_window2 worksheet, work, pos, len
|
867
867
|
when :mergedcells # ○○ MERGEDCELLS ➜ 5.67
|
868
868
|
read_merged_cells worksheet, work, pos, len
|
869
|
+
when :protect, :password
|
870
|
+
read_sheet_protection worksheet, op, work
|
869
871
|
else
|
870
872
|
if ROW_BLOCK_OPS.include?(op)
|
871
873
|
set_missing_row_address worksheet, work, pos, len
|
@@ -1063,6 +1065,14 @@ class Reader
|
|
1063
1065
|
fmt.pattern_bg_color = COLOR_CODES[xf_pattern & 0x3f80] || :pattern_bg
|
1064
1066
|
@workbook.add_format fmt
|
1065
1067
|
end
|
1068
|
+
def read_sheet_protection worksheet, op, data
|
1069
|
+
case op
|
1070
|
+
when :protect
|
1071
|
+
worksheet.protect! if data.unpack('v').first == 1
|
1072
|
+
when :password
|
1073
|
+
worksheet.password_hash = data.unpack('v').first
|
1074
|
+
end
|
1075
|
+
end
|
1066
1076
|
def set_cell worksheet, row, column, xf, value=nil
|
1067
1077
|
cells = @current_row_block[[worksheet, row]] ||= Row.new(nil, row)
|
1068
1078
|
cells.formats[column] = @workbook.format(xf) unless xf == 0
|
@@ -471,6 +471,7 @@ and minimal code that generates this warning. Thanks!
|
|
471
471
|
write_wsbool
|
472
472
|
# ○ Page Settings Block ➜ 4.4
|
473
473
|
# ○ Worksheet Protection Block ➜ 4.18
|
474
|
+
write_proctection
|
474
475
|
# ○ DEFCOLWIDTH ➜ 5.32
|
475
476
|
write_defcolwidth
|
476
477
|
# ○○ COLINFO ➜ 5.18
|
@@ -856,6 +857,16 @@ and minimal code that generates this warning. Thanks!
|
|
856
857
|
end
|
857
858
|
end
|
858
859
|
|
860
|
+
def write_proctection
|
861
|
+
return unless @worksheet.protected?
|
862
|
+
# ○ PROTECT Worksheet contents: 1 = protected (➜ 5.82)
|
863
|
+
write_op opcode(:protect), [1].pack('v')
|
864
|
+
# ○ OBJECTPROTECT Embedded objects: 1 = protected (➜ 5.72)
|
865
|
+
# ○ SCENPROTECT Scenarios: 1 = protected (➜ 5.91)
|
866
|
+
# ○ PASSWORD Hash value of the password; 0 = no password (➜ 5.76)
|
867
|
+
write_op opcode(:password), [@worksheet.password_hash].pack('v')
|
868
|
+
end
|
869
|
+
|
859
870
|
def write_wsbool
|
860
871
|
bits = [
|
861
872
|
# Bit Mask Contents
|
@@ -2,6 +2,7 @@ require 'date'
|
|
2
2
|
require 'spreadsheet/column'
|
3
3
|
require 'spreadsheet/encodings'
|
4
4
|
require 'spreadsheet/row'
|
5
|
+
require 'spreadsheet/excel/password_hash'
|
5
6
|
|
6
7
|
module Spreadsheet
|
7
8
|
##
|
@@ -26,7 +27,7 @@ module Spreadsheet
|
|
26
27
|
class Worksheet
|
27
28
|
include Spreadsheet::Encodings
|
28
29
|
include Enumerable
|
29
|
-
attr_accessor :name, :selected, :workbook
|
30
|
+
attr_accessor :name, :selected, :workbook, :password_hash
|
30
31
|
attr_reader :rows, :columns, :merged_cells
|
31
32
|
def initialize opts={}
|
32
33
|
@default_format = nil
|
@@ -38,6 +39,8 @@ module Spreadsheet
|
|
38
39
|
@columns = []
|
39
40
|
@links = {}
|
40
41
|
@merged_cells = []
|
42
|
+
@protected = false
|
43
|
+
@password_hash = 0
|
41
44
|
end
|
42
45
|
def active # :nodoc:
|
43
46
|
warn "Worksheet#active is deprecated. Please use Worksheet#selected instead."
|
@@ -92,6 +95,23 @@ module Spreadsheet
|
|
92
95
|
add_format format
|
93
96
|
format
|
94
97
|
end
|
98
|
+
##
|
99
|
+
# Is the worksheet protected?
|
100
|
+
def protected?
|
101
|
+
@protected
|
102
|
+
end
|
103
|
+
##
|
104
|
+
# Set worklist protection
|
105
|
+
def protect! password = ''
|
106
|
+
@protected = true
|
107
|
+
password = password.to_s
|
108
|
+
if password.size == 0
|
109
|
+
@password_hash = 0
|
110
|
+
else
|
111
|
+
@password_hash = Excel::Password.password_hash password
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
95
115
|
##
|
96
116
|
# Dimensions:: [ first used row, first unused row,
|
97
117
|
# first used column, first unused column ]
|
data/spreadsheet.gemspec
CHANGED
@@ -3,7 +3,7 @@ require "rake"
|
|
3
3
|
|
4
4
|
spec = Gem::Specification.new do |s|
|
5
5
|
s.name = "spreadsheet"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.7.0"
|
7
7
|
s.summary = "The Spreadsheet Library is designed to read and write Spreadsheet Documents"
|
8
8
|
s.description = "As of version 0.6.0, only Microsoft Excel compatible spreadsheets are supported"
|
9
9
|
s.author = "Masaomi Hatakeyama, Zeno R.R. Davatz"
|
@@ -19,4 +19,6 @@ end
|
|
19
19
|
if $0 == __FILE__
|
20
20
|
Gem.manage_gems
|
21
21
|
Gem::Builder.new(spec).build
|
22
|
+
else
|
23
|
+
spec
|
22
24
|
end
|
data/test/integration.rb
CHANGED
@@ -1310,6 +1310,32 @@ module Spreadsheet
|
|
1310
1310
|
book.write StringIO.new("", "w+")
|
1311
1311
|
end
|
1312
1312
|
end
|
1313
|
+
|
1314
|
+
def test_read_protected_sheet
|
1315
|
+
path = File.join @data, "test_merged_and_protected.xls"
|
1316
|
+
book = Spreadsheet.open path
|
1317
|
+
sheet = book.worksheet(0)
|
1318
|
+
sheet.ensure_rows_read # FIXME HACK
|
1319
|
+
assert sheet.protected?, "Expected sheet to be protected"
|
1320
|
+
assert_equal Spreadsheet::Excel::Password.password_hash('testing'), sheet.password_hash
|
1321
|
+
end
|
1322
|
+
|
1323
|
+
def test_write_protected_sheet
|
1324
|
+
path = File.join @var, 'test_protected.xls'
|
1325
|
+
book = Spreadsheet::Workbook.new
|
1326
|
+
sheet = book.create_worksheet
|
1327
|
+
sheet.protect! 'secret'
|
1328
|
+
assert_nothing_raised do
|
1329
|
+
book.write path
|
1330
|
+
end
|
1331
|
+
|
1332
|
+
read_back = Spreadsheet.open path
|
1333
|
+
sheet = read_back.worksheet(0)
|
1334
|
+
sheet.ensure_rows_read # FIXME HACK
|
1335
|
+
assert sheet.protected?, "Expected sheet to be proteced"
|
1336
|
+
assert_equal Spreadsheet::Excel::Password.password_hash('secret'), sheet.password_hash
|
1337
|
+
end
|
1338
|
+
|
1313
1339
|
=begin
|
1314
1340
|
def test_read_baltic
|
1315
1341
|
path = File.join @data, 'test_baltic.xls'
|
metadata
CHANGED
@@ -1,86 +1,71 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: spreadsheet
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 6
|
9
|
-
- 9
|
10
|
-
version: 0.6.9
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Masaomi Hatakeyama, Zeno R.R. Davatz
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-05-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: ruby-ole
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &11528100 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
version: "1.0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: rdoc
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *11528100
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rdoc
|
27
|
+
requirement: &11525080 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
29
|
+
requirements:
|
41
30
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 3
|
46
|
-
- 10
|
47
|
-
version: "3.10"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.10'
|
48
33
|
type: :development
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: hoe
|
52
34
|
prerelease: false
|
53
|
-
|
35
|
+
version_requirements: *11525080
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: hoe
|
38
|
+
requirement: &11523960 !ruby/object:Gem::Requirement
|
54
39
|
none: false
|
55
|
-
requirements:
|
40
|
+
requirements:
|
56
41
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 2
|
61
|
-
- 13
|
62
|
-
version: "2.13"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.13'
|
63
44
|
type: :development
|
64
|
-
|
65
|
-
|
66
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *11523960
|
47
|
+
description: ! 'The Spreadsheet Library is designed to read and write Spreadsheet
|
48
|
+
Documents.
|
49
|
+
|
67
50
|
As of version 0.6.0, only Microsoft Excel compatible spreadsheets are
|
51
|
+
|
68
52
|
supported. Spreadsheet is a combination/complete rewrite of the
|
53
|
+
|
69
54
|
Spreadsheet::Excel Library by Daniel J. Berger and the ParseExcel Library by
|
70
|
-
|
71
|
-
|
55
|
+
|
56
|
+
Hannes Wyss. Spreadsheet can read, write and modify Spreadsheet Documents.'
|
57
|
+
email:
|
72
58
|
- mhatakeyama@ywesee.com, zdavatz@ywesee.com
|
73
|
-
executables:
|
59
|
+
executables:
|
74
60
|
- xlsopcodes
|
75
61
|
extensions: []
|
76
|
-
|
77
|
-
extra_rdoc_files:
|
62
|
+
extra_rdoc_files:
|
78
63
|
- GUIDE.txt
|
79
64
|
- History.txt
|
80
65
|
- LICENSE.txt
|
81
66
|
- Manifest.txt
|
82
67
|
- README.txt
|
83
|
-
files:
|
68
|
+
files:
|
84
69
|
- .gitignore
|
85
70
|
- GUIDE.txt
|
86
71
|
- History.txt
|
@@ -150,37 +135,28 @@ files:
|
|
150
135
|
- .gemtest
|
151
136
|
homepage: http://spreadsheet.rubyforge.org
|
152
137
|
licenses: []
|
153
|
-
|
154
138
|
post_install_message:
|
155
|
-
rdoc_options:
|
139
|
+
rdoc_options:
|
156
140
|
- --main
|
157
141
|
- README.txt
|
158
|
-
require_paths:
|
142
|
+
require_paths:
|
159
143
|
- lib
|
160
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
145
|
none: false
|
162
|
-
requirements:
|
163
|
-
- -
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
|
166
|
-
|
167
|
-
- 0
|
168
|
-
version: "0"
|
169
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
151
|
none: false
|
171
|
-
requirements:
|
172
|
-
- -
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
|
175
|
-
segments:
|
176
|
-
- 0
|
177
|
-
version: "0"
|
152
|
+
requirements:
|
153
|
+
- - ! '>='
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
178
156
|
requirements: []
|
179
|
-
|
180
157
|
rubyforge_project: spreadsheet
|
181
158
|
rubygems_version: 1.8.15
|
182
159
|
signing_key:
|
183
160
|
specification_version: 3
|
184
161
|
summary: The Spreadsheet Library is designed to read and write Spreadsheet Documents
|
185
162
|
test_files: []
|
186
|
-
|