wrap_excel 0.0.5 → 0.0.6

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/Guardfile ADDED
@@ -0,0 +1,10 @@
1
+ # -*- mode: ruby -*-
2
+ # A sample Guardfile
3
+ # More info at https://github.com/guard/guard#readme
4
+
5
+ guard 'rspec', :version => 2 do
6
+ watch(%r{^spec/.+_spec\.rb$})
7
+ watch(%r{^lib/wrap_excel/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
8
+ watch('lib/wrap_excel.rb') { "spec" }
9
+ watch('spec/spec_helper.rb') { "spec" }
10
+ end
data/README.ja.rdoc CHANGED
@@ -28,13 +28,13 @@ WrapExcelはwin32oleをラップし、rubyによるExcelオペレーションを
28
28
 
29
29
  オプションは以下の通りです。
30
30
 
31
- * read_only:: boolean default true
32
- * displayalerts:: boolean default false
33
- * visible:: boolean false
31
+ [read_only] boolean(default true)
32
+ [displayalerts] boolean(default false)
33
+ [visible] boolean(default false)
34
34
 
35
35
  === sheetへのアクセス
36
36
 
37
- sheetオブジェクトへは #[] メソッドでアクセス出来ます。
37
+ sheetオブジェクトへは Book#[] メソッドでアクセス出来ます。
38
38
 
39
39
  sheet = book[0]
40
40
 
@@ -44,7 +44,7 @@ sheetオブジェクトへは #[] メソッドでアクセス出来ます。
44
44
 
45
45
  === 行または列へのアクセス
46
46
 
47
- sheetオブジェクトはenumerableをインクルードしています。#each_column or #each_row or #each メソッドが使用できます。
47
+ sheetオブジェクトはenumerableをインクルードしています。Sheet#each_column or Sheet#each_row or Sheet#each メソッドが使用できます。
48
48
 
49
49
  sheet.each do |cell|
50
50
  # do something with cell
@@ -93,7 +93,7 @@ rangeオブジェクトからのアクセス。
93
93
 
94
94
  == サポート
95
95
 
96
- 問題を報告したり、機能追加の要望する場合はgithubのIssuesに登録してください。 [https://github.com/tomiacannondale/wrap_excel/issues]
96
+ 問題を報告したり、機能追加の要望する場合はgithubのIssuesに登録してください。 https://github.com/tomiacannondale/wrap_excel/issues
97
97
 
98
98
  == 共同作業
99
99
 
@@ -101,8 +101,8 @@ githubのpull requestをしてください。
101
101
 
102
102
  == 開発者
103
103
 
104
- tomi [tomiacannondale@gmail.com]
104
+ tomi mailto:tomiacannondale@gmail.com
105
105
 
106
106
  == ライセンス
107
107
 
108
- MITライセンスです。詳細はLICENSEを参照してください。
108
+ MITライセンスです。詳細は LICENSE を参照してください。
data/README.rdoc CHANGED
@@ -28,13 +28,13 @@ Read without block.
28
28
 
29
29
  Options are the following.
30
30
 
31
- * read_only:: boolean default true
32
- * displayalerts:: boolean default false
33
- * visible:: boolean false
31
+ [read_only] boolean(default true)
32
+ [displayalerts] boolean(default false)
33
+ [visible] boolean(default false)
34
34
 
35
35
  === access sheet
36
36
 
37
- Sheet object can access with #[] method.
37
+ Sheet object can access with Book#[] method.
38
38
 
39
39
  sheet = book[0]
40
40
 
@@ -44,7 +44,7 @@ Access with sheet name.
44
44
 
45
45
  === access row or column
46
46
 
47
- Sheet object is included enumerable. Use #each_column or #each_row or #each method.
47
+ Sheet object is included enumerable. Use Sheet#each_column or Sheet#each_row or Sheet#each method.
48
48
 
49
49
  sheet.each do |cell|
50
50
  # do something with cell
@@ -93,7 +93,7 @@ All WrapExcel object include win32ole instance. If you want to do something that
93
93
 
94
94
  == Support
95
95
 
96
- Report issues and feature requests to github Issues. [https://github.com/tomiacannondale/wrap_excel/issues]
96
+ Report issues and feature requests to github Issues. https://github.com/tomiacannondale/wrap_excel/issues
97
97
 
98
98
  == Collaborate
99
99
 
@@ -101,7 +101,7 @@ Please pull request on github.
101
101
 
102
102
  == Author
103
103
 
104
- tomi [tomiacannondale@gmail.com]
104
+ tomi mailto:tomiacannondale@gmail.com
105
105
 
106
106
  == License
107
107
 
@@ -15,6 +15,7 @@ module WrapExcel
15
15
  @winapp = WIN32OLE.new('Excel.Application')
16
16
  @winapp.DisplayAlerts = options[:displayalerts]
17
17
  @winapp.Visible = options[:visible]
18
+ WIN32OLE.const_load(@winapp, WrapExcel) unless WrapExcel.const_defined?(:CONSTANTS)
18
19
  @book = @winapp.Workbooks.Open(file,{ 'ReadOnly' => options[:read_only] })
19
20
 
20
21
  if block
@@ -6,6 +6,15 @@ module WrapExcel
6
6
 
7
7
  def initialize(win32_worksheet)
8
8
  @sheet = win32_worksheet
9
+ if @sheet.ProtectContents
10
+ @sheet.Unprotect
11
+ @end_row = @sheet.UsedRange.SpecialCells(WrapExcel::XlLastCell).Row
12
+ @end_column = @sheet.UsedRange.SpecialCells(WrapExcel::XlLastCell).Column
13
+ @sheet.Protect
14
+ else
15
+ @end_row = @sheet.UsedRange.SpecialCells(WrapExcel::XlLastCell).Row
16
+ @end_column = @sheet.UsedRange.SpecialCells(WrapExcel::XlLastCell).Column
17
+ end
9
18
  end
10
19
 
11
20
  def name
@@ -27,18 +36,18 @@ module WrapExcel
27
36
  end
28
37
 
29
38
  def each
30
- @sheet.UsedRange.Rows.each do |row_range|
31
- row_range.Cells.each do |cell|
32
- yield WrapExcel::Cell.new(cell)
39
+ each_row do |row_range|
40
+ row_range.each do |cell|
41
+ yield cell
33
42
  end
34
43
  end
35
44
  end
36
45
 
37
46
  def each_row(offset = 0)
38
47
  offset += 1
39
- @sheet.UsedRange.Rows.each do |row_range|
40
- next if row_range.row < offset
41
- yield WrapExcel::Range.new(row_range)
48
+ 1.upto(@end_row) do |row|
49
+ next if row < offset
50
+ yield WrapExcel::Range.new(@sheet.Range(@sheet.Cells(row, 1), @sheet.Cells(row, @end_column)))
42
51
  end
43
52
  end
44
53
 
@@ -50,9 +59,9 @@ module WrapExcel
50
59
 
51
60
  def each_column(offset = 0)
52
61
  offset += 1
53
- @sheet.UsedRange.Columns.each do |column_range|
54
- next if column_range.column < offset
55
- yield WrapExcel::Range.new(column_range)
62
+ 1.upto(@end_column) do |column|
63
+ next if column < offset
64
+ yield WrapExcel::Range.new(@sheet.Range(@sheet.Cells(1, column), @sheet.Cells(@end_row, column)))
56
65
  end
57
66
  end
58
67
 
@@ -61,5 +70,9 @@ module WrapExcel
61
70
  yield WrapExcel::Range.new(column_range), (column_range.column - 1 - offset)
62
71
  end
63
72
  end
73
+
74
+ def method_missing(id, *args)
75
+ @sheet.send(id, *args)
76
+ end
64
77
  end
65
78
  end
@@ -1,3 +1,3 @@
1
1
  module WrapExcel
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/spec/cell_spec.rb CHANGED
@@ -33,6 +33,13 @@ describe WrapExcel::Cell do
33
33
  @cell.value.should eq 'fooooo'
34
34
  end
35
35
  end
36
+
37
+ describe "#method_missing" do
38
+ context "unknown method" do
39
+ it { expect { @cell.hogehogefoo }.to raise_error }
40
+ end
41
+ end
42
+
36
43
  end
37
44
 
38
45
  context "open merge_cells.xls" do
Binary file
Binary file
data/spec/range_spec.rb CHANGED
@@ -66,4 +66,14 @@ describe WrapExcel::Range do
66
66
  end
67
67
  end
68
68
  end
69
+
70
+ describe "#method_missing" do
71
+ it "can access COM method" do
72
+ @range.Range(@range.Cells.Item(1), @range.Cells.Item(3)).value.should eq [@range.values(0..2)]
73
+ end
74
+
75
+ context "unknown method" do
76
+ it { expect { @range.hogehogefoo}.to raise_error }
77
+ end
78
+ end
69
79
  end
data/spec/sheet_spec.rb CHANGED
@@ -13,6 +13,37 @@ describe WrapExcel::Sheet do
13
13
  rm_tmp(@dir)
14
14
  end
15
15
 
16
+ describe ".initialize" do
17
+ context "when open sheet protected(with password is 'protect')" do
18
+ before do
19
+ @book_protect = WrapExcel::Book.new(@dir + '/protected_sheet.xls', :visible => true)
20
+ @protected_sheet = @book_protect['protect']
21
+ end
22
+
23
+ after do
24
+ @book_protect.close
25
+ end
26
+
27
+ it { @protected_sheet.ProtectContents.should be_true }
28
+
29
+ it "protected sheet can't be write" do
30
+ expect { @protected_sheet[0,0] = 'write' }.to raise_error
31
+ end
32
+ end
33
+
34
+ end
35
+
36
+ shared_context "sheet 'open book with blank'" do
37
+ before do
38
+ @book_with_blank = WrapExcel::Book.open(@dir + '/book_with_blank.xls')
39
+ @sheet_with_blank = @book_with_blank[0]
40
+ end
41
+
42
+ after do
43
+ @book_with_blank.close
44
+ end
45
+ end
46
+
16
47
  describe "access sheet name" do
17
48
  describe "#name" do
18
49
  it 'get sheet1 name' do
@@ -68,6 +99,28 @@ describe WrapExcel::Sheet do
68
99
  end
69
100
  end
70
101
  end
102
+
103
+ context "read sheet with blank" do
104
+ include_context "sheet 'open book with blank'"
105
+
106
+ it 'should get from ["A1"]' do
107
+ @sheet_with_blank.each_with_index do |cell, i|
108
+ case i
109
+ when 5
110
+ cell.value.should be_nil
111
+ when 6
112
+ cell.value.should eq 'simple'
113
+ when 7
114
+ cell.value.should be_nil
115
+ when 8
116
+ cell.value.should eq 'workbook'
117
+ when 9
118
+ cell.value.should eq 'sheet1'
119
+ end
120
+ end
121
+ end
122
+ end
123
+
71
124
  end
72
125
 
73
126
  describe "#each_row" do
@@ -89,6 +142,28 @@ describe WrapExcel::Sheet do
89
142
  end
90
143
  end
91
144
  end
145
+
146
+ context "read sheet with blank" do
147
+ include_context "sheet 'open book with blank'"
148
+
149
+ it 'should get from ["A1"]' do
150
+ @sheet_with_blank.each_row do |rows|
151
+ case rows.row - 1
152
+ when 0
153
+ rows.values.should eq [nil, nil, nil, nil, nil]
154
+ when 1
155
+ rows.values.should eq [nil, 'simple', nil, 'workbook', 'sheet1']
156
+ when 2
157
+ rows.values.should eq [nil, 'foo', nil, nil, 'foobaaa']
158
+ when 3
159
+ rows.values.should eq [nil, nil, nil, nil, nil]
160
+ when 4
161
+ rows.values.should eq [nil, 'matz', nil, 'is', 'nice']
162
+ end
163
+ end
164
+ end
165
+ end
166
+
92
167
  end
93
168
 
94
169
  describe "#each_row_with_index" do
@@ -139,6 +214,27 @@ describe WrapExcel::Sheet do
139
214
  end
140
215
  end
141
216
  end
217
+
218
+ context "read sheet with blank" do
219
+ include_context "sheet 'open book with blank'"
220
+
221
+ it 'should get from ["A1"]' do
222
+ @sheet_with_blank.each_column do |columns|
223
+ case columns.column- 1
224
+ when 0
225
+ columns.values.should eq [nil, nil, nil, nil, nil]
226
+ when 1
227
+ columns.values.should eq [nil, 'simple', 'foo', nil, 'matz']
228
+ when 2
229
+ columns.values.should eq [nil, nil, nil, nil, nil]
230
+ when 3
231
+ columns.values.should eq [nil, 'workbook', nil, nil, 'is']
232
+ when 4
233
+ columns.values.should eq [nil, 'sheet1', 'foobaaa', nil, 'nice']
234
+ end
235
+ end
236
+ end
237
+ end
142
238
  end
143
239
 
144
240
  describe "#each_column_with_index" do
@@ -169,5 +265,15 @@ describe WrapExcel::Sheet do
169
265
  end
170
266
  end
171
267
 
268
+ describe "#method_missing" do
269
+ it "can access COM method" do
270
+ @sheet.Cells(1,1).Value.should eq 'simple'
271
+ end
272
+
273
+ context "unknown method" do
274
+ it { expect { @sheet.hogehogefoo }.to raise_error }
275
+ end
276
+ end
277
+
172
278
  end
173
279
  end
data/wrap_excel.gemspec CHANGED
@@ -25,4 +25,8 @@ Gem::Specification.new do |s|
25
25
  s.require_paths = ["lib"]
26
26
  s.add_development_dependency "rake", '>= 0.9.2'
27
27
  s.add_development_dependency "rspec", '>= 2.6.0'
28
+ s.add_development_dependency "rb-fchange"
29
+ s.add_development_dependency "rb-notifu"
30
+ s.add_development_dependency "win32console"
31
+ s.add_development_dependency "guard-rspec"
28
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wrap_excel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-08 00:00:00.000000000Z
12
+ date: 2011-12-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70322277204940 !ruby/object:Gem::Requirement
16
+ requirement: &25478484 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.9.2
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70322277204940
24
+ version_requirements: *25478484
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70322277204440 !ruby/object:Gem::Requirement
27
+ requirement: &25494132 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,51 @@ dependencies:
32
32
  version: 2.6.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70322277204440
35
+ version_requirements: *25494132
36
+ - !ruby/object:Gem::Dependency
37
+ name: rb-fchange
38
+ requirement: &25493820 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *25493820
47
+ - !ruby/object:Gem::Dependency
48
+ name: rb-notifu
49
+ requirement: &25493496 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *25493496
58
+ - !ruby/object:Gem::Dependency
59
+ name: win32console
60
+ requirement: &25493172 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *25493172
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: &25492884 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *25492884
36
80
  description: WrapExcel is to wrap the win32ole, and easy to use Excel operations with
37
81
  ruby. Detailed description please see the README.
38
82
  email:
@@ -47,6 +91,7 @@ files:
47
91
  - .gitignore
48
92
  - .rspec
49
93
  - Gemfile
94
+ - Guardfile
50
95
  - LICENSE
51
96
  - README.ja.rdoc
52
97
  - README.rdoc
@@ -60,7 +105,9 @@ files:
60
105
  - spec/book_spec.rb
61
106
  - spec/cell_spec.rb
62
107
  - spec/cygwin_spec.rb
108
+ - spec/data/book_with_blank.xls
63
109
  - spec/data/merge_cells.xls
110
+ - spec/data/protected_sheet.xls
64
111
  - spec/data/simple.xls
65
112
  - spec/range_spec.rb
66
113
  - spec/sheet_spec.rb
@@ -90,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
137
  version: '0'
91
138
  requirements: []
92
139
  rubyforge_project: wrap_excel
93
- rubygems_version: 1.8.10
140
+ rubygems_version: 1.8.11
94
141
  signing_key:
95
142
  specification_version: 3
96
143
  summary: WrapExcel is a wrapper library that specializes in the operation of Excel
@@ -99,7 +146,9 @@ test_files:
99
146
  - spec/book_spec.rb
100
147
  - spec/cell_spec.rb
101
148
  - spec/cygwin_spec.rb
149
+ - spec/data/book_with_blank.xls
102
150
  - spec/data/merge_cells.xls
151
+ - spec/data/protected_sheet.xls
103
152
  - spec/data/simple.xls
104
153
  - spec/range_spec.rb
105
154
  - spec/sheet_spec.rb