winexcel 0.0.1
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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +156 -0
- data/Rakefile +7 -0
- data/examples/basic.rb +49 -0
- data/examples/extended.rb +73 -0
- data/examples/fixtures/a.xls +0 -0
- data/examples/fixtures/b.xlsx +0 -0
- data/examples/fixtures/template.xls +0 -0
- data/examples/my_basic_file.xls +0 -0
- data/examples/my_extended_file.xls +0 -0
- data/features/connect_to_open_excel_file.feature +32 -0
- data/features/create_excel_file_from_template_and_open.feature +35 -0
- data/features/fixtures/a.xls +0 -0
- data/features/fixtures/b.xlsx +0 -0
- data/features/open_excel_file.feature +41 -0
- data/features/step_definitions/excel_file_steps.rb +71 -0
- data/features/support/common.rb +37 -0
- data/features/support/env.rb +14 -0
- data/features/support/matchers.rb +9 -0
- data/lib/winexcel.rb +12 -0
- data/lib/winexcel/core_ext/object.rb +34 -0
- data/lib/winexcel/core_ext/ordered_hash.rb +100 -0
- data/lib/winexcel/excel/xl_file_format.rb +74 -0
- data/lib/winexcel/excel_file.rb +255 -0
- data/lib/winexcel/excel_file/common_methods.rb +422 -0
- data/lib/winexcel/excel_file/other_methods.rb +315 -0
- data/lib/winexcel/excel_file/write_2D_array.rb +169 -0
- data/lib/winexcel/fileutils_ext/backup_file.rb +25 -0
- data/lib/winexcel/fileutils_ext/create_dir_if_missing.rb +18 -0
- data/lib/winexcel/version.rb +3 -0
- data/lib/winexcel/win32olerot_ext/win32olerot.so +0 -0
- data/tasks/cucumber.rake +23 -0
- data/tasks/rspec.rake +9 -0
- data/winexcel.gemspec +26 -0
- metadata +163 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
winexcel
|
2
|
+
========
|
3
|
+
|
4
|
+
[WinExcel] Makes it possible to access MS Excel from Ruby via Excel COM/Win32OLE interface. Enables to read and write from/to Excel files with the use of Excel's API. Requires MS Excel application to be installed.
|
5
|
+
|
6
|
+
Install
|
7
|
+
=======
|
8
|
+
|
9
|
+
gem install winexcel
|
10
|
+
|
11
|
+
Usage
|
12
|
+
=====
|
13
|
+
|
14
|
+
Basic example script
|
15
|
+
|
16
|
+
require 'rubygems'
|
17
|
+
require 'winexcel'
|
18
|
+
include WinExcel
|
19
|
+
|
20
|
+
#
|
21
|
+
# Opening existing file and reading all data
|
22
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "fixtures\\a.xls"))
|
23
|
+
xls = ExcelFile.new(file_full_path)
|
24
|
+
arrRecords = xls.get2DArray('A1')
|
25
|
+
puts arrRecords
|
26
|
+
#
|
27
|
+
# reading specified data
|
28
|
+
arrRecords = xls.get2DArray('A1:B2')
|
29
|
+
puts arrRecords
|
30
|
+
xls.close
|
31
|
+
#
|
32
|
+
# Writing some data to existing file
|
33
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "my_basic_file.xls"))
|
34
|
+
xls = ExcelFile.new(file_full_path)
|
35
|
+
arrRecords = []
|
36
|
+
arrRecords << ['ID', 'NAME', 'NICKNAME']
|
37
|
+
arrRecords << ['001', 'Fredrick White', 'fred']
|
38
|
+
arrRecords << ['002', 'Robert Green', 'bob']
|
39
|
+
xls.write2DArray(arrRecords, 'A1')
|
40
|
+
xls.save
|
41
|
+
xls.close
|
42
|
+
#
|
43
|
+
# Creating a new file from template
|
44
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "my_2nd_new_file.xls"))
|
45
|
+
template_full_path = File.expand_path(File.join(File.dirname(__FILE__), "fixtures\\template.xls"))
|
46
|
+
xls = ExcelFile.new(file_full_path, false, template_full_path)
|
47
|
+
arrRecords = []
|
48
|
+
arrRecords << ['Patrick Red', 'xyz', 'mail@xyz.com']
|
49
|
+
arrRecords << ['Martin Blue', 'abc']
|
50
|
+
xls.append2DArray(arrRecords)
|
51
|
+
xls.save
|
52
|
+
xls.close # not necessary as it would be handled by finalize
|
53
|
+
#
|
54
|
+
# Close any open file by calling finalize
|
55
|
+
ExcelFile.finalize # always call finalize at the end of a script
|
56
|
+
|
57
|
+
Extended example script
|
58
|
+
|
59
|
+
require 'rubygems'
|
60
|
+
require 'winexcel'
|
61
|
+
include WinExcel
|
62
|
+
|
63
|
+
arrRecords = []
|
64
|
+
|
65
|
+
# path to already created empty Excel file that we will write to
|
66
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "my_extended_file.xls"))
|
67
|
+
|
68
|
+
xls = ExcelFile.new(file_full_path)
|
69
|
+
|
70
|
+
begin
|
71
|
+
|
72
|
+
#### writing data
|
73
|
+
|
74
|
+
# writing array of arrays
|
75
|
+
arrRecords << ['ID', 'NAME', 'NICKNAME']
|
76
|
+
arrRecords << ['001', 'Fredrick White', 'fred']
|
77
|
+
arrRecords << ['002', 'Robert Green', 'bob']
|
78
|
+
xls.write2DArray(arrRecords, 'A1')
|
79
|
+
|
80
|
+
# appending array of arrays
|
81
|
+
arrRecords.clear
|
82
|
+
arrRecords << ['003', 'Patrick Red', 'pati']
|
83
|
+
arrRecords << ['004', 'Martin Blue', 'mati']
|
84
|
+
xls.append2DArray(arrRecords)
|
85
|
+
|
86
|
+
# lets delete the current sheet for now
|
87
|
+
xls.addSheet('hashesSheet')
|
88
|
+
|
89
|
+
# writing array of hashes
|
90
|
+
arrRecords.clear
|
91
|
+
arrRecords << {'ID'=>'001', 'NAME'=>'Fredrick White', 'NICKNAME'=>'fred'}
|
92
|
+
arrRecords << {'ID'=>'002', 'NAME'=>'Robert Green', 'NICKNAME'=>'bob'}
|
93
|
+
xls.writeArrayHash(arrRecords, 'A1')
|
94
|
+
|
95
|
+
# appending array of hashes
|
96
|
+
arrRecords.clear
|
97
|
+
arrRecords << {'ID'=>'003', 'NAME'=>'Patrick Red', 'NICKNAME'=>'pati'}
|
98
|
+
arrRecords << {'ID'=>'004', 'NAME'=>'Martin Blue', 'NICKNAME'=>'mati'}
|
99
|
+
xls.appendArrayHash(arrRecords)
|
100
|
+
|
101
|
+
# lets delete it to switch to the previous, default sheet
|
102
|
+
xls.deleteSheet('hashesSheet')
|
103
|
+
|
104
|
+
#### reading data
|
105
|
+
|
106
|
+
# we can specify a range of data to retrieve
|
107
|
+
arrRecords = xls.get2DArray('A1:C3')
|
108
|
+
p arrRecords
|
109
|
+
|
110
|
+
# if there is no range argument specified, then all occupied rows will be returned,
|
111
|
+
# giving us the whole file contents
|
112
|
+
arrRecords = xls.get2DArray()
|
113
|
+
p arrRecords
|
114
|
+
|
115
|
+
ensure
|
116
|
+
xls.save
|
117
|
+
xls.close # not necessary as it would be handled by finalize
|
118
|
+
# close any open file by calling finalize
|
119
|
+
ExcelFile.finalize # finalize it at the end of a script
|
120
|
+
end
|
121
|
+
|
122
|
+
For more examples please look at Cucumber features.
|
123
|
+
|
124
|
+
License
|
125
|
+
=======
|
126
|
+
|
127
|
+
Copyright (c) 2011 Kamil Sobieraj, ksob@dslowl.com
|
128
|
+
|
129
|
+
(New BSD License)
|
130
|
+
|
131
|
+
New BSD License claims:
|
132
|
+
Redistribution and use in source and binary forms, with or without
|
133
|
+
modification, are permitted provided that the following conditions
|
134
|
+
are met:
|
135
|
+
|
136
|
+
1. Redistributions of source code must retain the above copyright notice,
|
137
|
+
this list of conditions and the following disclaimer.
|
138
|
+
|
139
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
140
|
+
this list of conditions and the following disclaimer in the documentation
|
141
|
+
and/or other materials provided with the distribution.
|
142
|
+
|
143
|
+
3. Neither the name of Zend Technologies USA, Inc. nor the names of its
|
144
|
+
contributors may be used to endorse or promote products derived from this
|
145
|
+
software without specific prior written permission.
|
146
|
+
|
147
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
148
|
+
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
149
|
+
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
150
|
+
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
151
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
152
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
153
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
154
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
155
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
156
|
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/Rakefile
ADDED
data/examples/basic.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# code created for testing purposes
|
3
|
+
# and to demonstrate example usage
|
4
|
+
#
|
5
|
+
# Note: the library assumes that specified Excel file is already created
|
6
|
+
#
|
7
|
+
# For examples working out of the box please look at Cucumber/RSpec files
|
8
|
+
#
|
9
|
+
|
10
|
+
require 'rubygems'
|
11
|
+
require 'winexcel'
|
12
|
+
include WinExcel
|
13
|
+
|
14
|
+
#
|
15
|
+
# Opening existing file and reading all data
|
16
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "fixtures\\a.xls"))
|
17
|
+
xls = ExcelFile.new(file_full_path)
|
18
|
+
arrRecords = xls.get2DArray('A1')
|
19
|
+
puts arrRecords
|
20
|
+
#
|
21
|
+
# reading specified data
|
22
|
+
arrRecords = xls.get2DArray('A1:B2')
|
23
|
+
puts arrRecords
|
24
|
+
xls.close
|
25
|
+
#
|
26
|
+
# Writing some data to existing file
|
27
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "my_basic_file.xls"))
|
28
|
+
xls = ExcelFile.new(file_full_path)
|
29
|
+
arrRecords = []
|
30
|
+
arrRecords << ['ID', 'NAME', 'NICKNAME']
|
31
|
+
arrRecords << ['001', 'Fredrick White', 'fred']
|
32
|
+
arrRecords << ['002', 'Robert Green', 'bob']
|
33
|
+
xls.write2DArray(arrRecords, 'A1')
|
34
|
+
xls.save
|
35
|
+
xls.close
|
36
|
+
#
|
37
|
+
# Creating a new file from template
|
38
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "my_2nd_new_file.xls"))
|
39
|
+
template_full_path = File.expand_path(File.join(File.dirname(__FILE__), "fixtures\\template.xls"))
|
40
|
+
xls = ExcelFile.new(file_full_path, false, template_full_path)
|
41
|
+
arrRecords = []
|
42
|
+
arrRecords << ['Patrick Red', 'xyz', 'mail@xyz.com']
|
43
|
+
arrRecords << ['Martin Blue', 'abc']
|
44
|
+
xls.append2DArray(arrRecords)
|
45
|
+
xls.save
|
46
|
+
xls.close # not necessary as it would be handled by finalize
|
47
|
+
#
|
48
|
+
# Close any open file by calling finalize
|
49
|
+
ExcelFile.finalize # always call finalize at the end of a script
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#
|
2
|
+
# code created for testing purposes
|
3
|
+
# and to demonstrate example usage
|
4
|
+
#
|
5
|
+
# Note: the library assumes that specified Excel file is already created
|
6
|
+
#
|
7
|
+
# For examples working out of the box please look at Cucumber/RSpec files
|
8
|
+
#
|
9
|
+
|
10
|
+
require 'rubygems'
|
11
|
+
require 'winexcel'
|
12
|
+
include WinExcel
|
13
|
+
|
14
|
+
arrRecords = []
|
15
|
+
|
16
|
+
# path to already created empty Excel file that we will write to
|
17
|
+
file_full_path = File.expand_path(File.join(File.dirname(__FILE__), "my_extended_file.xls"))
|
18
|
+
|
19
|
+
xls = ExcelFile.new(file_full_path)
|
20
|
+
|
21
|
+
begin
|
22
|
+
|
23
|
+
#### writing data
|
24
|
+
|
25
|
+
# writing array of arrays
|
26
|
+
arrRecords << ['ID', 'NAME', 'NICKNAME']
|
27
|
+
arrRecords << ['001', 'Fredrick White', 'fred']
|
28
|
+
arrRecords << ['002', 'Robert Green', 'bob']
|
29
|
+
xls.write2DArray(arrRecords, 'A1')
|
30
|
+
|
31
|
+
# appending array of arrays
|
32
|
+
arrRecords.clear
|
33
|
+
arrRecords << ['003', 'Patrick Red', 'pati']
|
34
|
+
arrRecords << ['004', 'Martin Blue', 'mati']
|
35
|
+
xls.append2DArray(arrRecords)
|
36
|
+
|
37
|
+
# lets delete the current sheet for now
|
38
|
+
xls.addSheet('hashesSheet')
|
39
|
+
|
40
|
+
# writing array of hashes
|
41
|
+
arrRecords.clear
|
42
|
+
arrRecords << {'ID'=>'001', 'NAME'=>'Fredrick White', 'NICKNAME'=>'fred'}
|
43
|
+
arrRecords << {'ID'=>'002', 'NAME'=>'Robert Green', 'NICKNAME'=>'bob'}
|
44
|
+
xls.writeArrayHash(arrRecords, 'A1')
|
45
|
+
|
46
|
+
# appending array of hashes
|
47
|
+
arrRecords.clear
|
48
|
+
arrRecords << {'ID'=>'003', 'NAME'=>'Patrick Red', 'NICKNAME'=>'pati'}
|
49
|
+
arrRecords << {'ID'=>'004', 'NAME'=>'Martin Blue', 'NICKNAME'=>'mati'}
|
50
|
+
xls.appendArrayHash(arrRecords)
|
51
|
+
|
52
|
+
# lets delete it to switch to the previous, default sheet
|
53
|
+
xls.deleteSheet('hashesSheet')
|
54
|
+
|
55
|
+
#### reading data
|
56
|
+
|
57
|
+
# we can specify a range of data to retrieve
|
58
|
+
arrRecords = xls.get2DArray('A1:C3')
|
59
|
+
p arrRecords
|
60
|
+
|
61
|
+
# if there is no range argument specified, then all occupied rows will be returned,
|
62
|
+
# giving us the whole file contents
|
63
|
+
arrRecords = xls.get2DArray()
|
64
|
+
p arrRecords
|
65
|
+
|
66
|
+
ensure
|
67
|
+
xls.save
|
68
|
+
xls.close # not necessary as it would be handled by finalize
|
69
|
+
# close any open file by calling finalize
|
70
|
+
ExcelFile.finalize # finalize it at the end of a script
|
71
|
+
end
|
72
|
+
|
73
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# scenarios in this file are meant to be used by developers that want to use excel_file.rb functionality
|
2
|
+
|
3
|
+
Feature: connect_to_open_excel_file
|
4
|
+
As a developer
|
5
|
+
I want to connect to open Excel file
|
6
|
+
So that I can read and write to it
|
7
|
+
|
8
|
+
# this initial background processing try to simulate state of end-user system
|
9
|
+
|
10
|
+
Background: let say that the user executed some script using a button supplied in "../fixtures/temp/a.xls"
|
11
|
+
so we are sure the Excel workbook is open while that script is processing
|
12
|
+
and so we will open it here in background processing and read one cell to ensure the file is
|
13
|
+
open correctly before testing scenario that assume it is open correctly
|
14
|
+
Given I copy file "../fixtures/a.xls" to "../fixtures/temp" directory
|
15
|
+
And I open the "../fixtures/temp/a.xls" file manually
|
16
|
+
And I open the same file via script passing "../fixtures/temp/a.xls" as a parameter to ExcelFile.new
|
17
|
+
And I call get2DArray method of the returned object passing "A1" as a cell parameter
|
18
|
+
And I get [["aaa"]] back
|
19
|
+
|
20
|
+
Scenario: opening an existing file that has already been opened by the user before
|
21
|
+
and reading some data, then finalizing but NOT closing the file
|
22
|
+
since it was opened by user
|
23
|
+
Given I pass file="../fixtures/temp/a.xls" as parameter to ExcelFile.new
|
24
|
+
Then I should see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
25
|
+
When I call get2DArray method of the returned object passing "A1" as a cell parameter
|
26
|
+
Then I should get [["aaa"]] back
|
27
|
+
When I call ExcelFile.finalize
|
28
|
+
Then I should still see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# scenarios in this file are meant to be used by developers that want to use excel_file.rb functionality
|
2
|
+
|
3
|
+
Feature: create_excel_file_from_template_and_open
|
4
|
+
As a developer
|
5
|
+
I want to create Excel file from template and open it
|
6
|
+
So that I can read and write to it
|
7
|
+
|
8
|
+
# this initial background processing try to simulate state of end-user system
|
9
|
+
|
10
|
+
Background:
|
11
|
+
Given I close "../fixtures/temp/a.xls" Excel file if it exists and is open
|
12
|
+
And I do not see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
13
|
+
And I delete "../fixtures/temp/a.xls" Excel file if it exists
|
14
|
+
And I close "../fixtures/temp/b.xls" Excel file if it exists and is open
|
15
|
+
And I do not see file "../fixtures/temp/b.xls" in RunningObjectTable (ROT)
|
16
|
+
And I delete "../fixtures/temp/b.xls" Excel file if it exists
|
17
|
+
And I copy files "../fixtures/a.xls" and "../fixtures/b.xlsx" to "../fixtures/temp" directory
|
18
|
+
And I open the "../fixtures/temp/a.xls" file manually
|
19
|
+
And I open the same file via script passing "../fixtures/temp/a.xls" as a parameter to ExcelFile.new
|
20
|
+
And I call get2DArray method of the returned object passing "A1" as a cell parameter
|
21
|
+
And I get [["aaa"]] back
|
22
|
+
|
23
|
+
Scenario: creating (and then opening) a new file from template when file with the same name exists there already and is open
|
24
|
+
Given I pass file="../fixtures/temp/a.xls", debug="false" and template="../fixtures/temp/b.xlsx" as parameters to ExcelFile.new
|
25
|
+
Then I should see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
26
|
+
When I call get2DArray method of the returned object passing "A1" as a cell parameter
|
27
|
+
Then I should get [["bbb"]] back
|
28
|
+
When I call ExcelFile.finalize
|
29
|
+
Then I should not see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
Binary file
|
Binary file
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# scenarios in this file are meant to be used by developers that want to use excel_file.rb functionality
|
2
|
+
|
3
|
+
Feature: open_excel_file
|
4
|
+
As a developer
|
5
|
+
I want to open Excel file
|
6
|
+
So that I can read and write to it
|
7
|
+
|
8
|
+
# this initial background processing try to simulate state of end-user system
|
9
|
+
|
10
|
+
Background: let say that the user did NOT opened "../fixtures/temp/a.xls" but he executed
|
11
|
+
some script that will use this file
|
12
|
+
Given I close "../fixtures/temp/a.xls" Excel file if it exists and is open
|
13
|
+
And I do not see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
14
|
+
And I delete "../fixtures/temp/a.xls" Excel file if it exists
|
15
|
+
And I copy file "../fixtures/a.xls" to "../fixtures/temp" directory
|
16
|
+
|
17
|
+
Scenario: opening an existing file that has NOT already been opened by the user before
|
18
|
+
and reading some data, then we DO call close method and then finalize
|
19
|
+
to release automationInstance (Excel application)
|
20
|
+
Given I pass file="../fixtures/temp/a.xls" as parameter to ExcelFile.new
|
21
|
+
Then I should see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
22
|
+
When I call get2DArray method of the returned object passing "A1" as a cell parameter
|
23
|
+
Then I should get [["aaa"]] back
|
24
|
+
When I call close method
|
25
|
+
Then I should not see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
26
|
+
And I call ExcelFile.finalize
|
27
|
+
|
28
|
+
Scenario: opening an existing file that has NOT already been opened by the user before
|
29
|
+
and reading some data, then we DO NOT call close method but finalize method
|
30
|
+
to close that for us and release automationInstance (Excel application)
|
31
|
+
Given I pass file="../fixtures/temp/a.xls" as parameter to ExcelFile.new
|
32
|
+
Then I should see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
33
|
+
When I call get2DArray method of the returned object passing "A1" as a cell parameter
|
34
|
+
Then I should get [["aaa"]] back
|
35
|
+
When I call ExcelFile.finalize
|
36
|
+
Then I should not see file "../fixtures/temp/a.xls" in RunningObjectTable (ROT)
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
@@ -0,0 +1,71 @@
|
|
1
|
+
xls = nil
|
2
|
+
res = nil
|
3
|
+
rot = WIN32OLE::RunningObjectTable.new
|
4
|
+
if rot.nil? then
|
5
|
+
throw 'Cannot access WIN32OLE::RunningObjectTable'
|
6
|
+
end
|
7
|
+
|
8
|
+
Given /^I copy files "([^\"]*)" and "([^\"]*)" to "([^\"]*)" directory$/ do |file1, file2, dir|
|
9
|
+
FileUtils.createDirIfMissing File.expand_path(File.join(File.dirname(__FILE__), dir))
|
10
|
+
FileUtils.cp(File.expand_path(File.join(File.dirname(__FILE__), file1)), File.join(File.expand_path(File.join(File.dirname(__FILE__), dir)), File.basename(file1)))
|
11
|
+
FileUtils.cp(File.expand_path(File.join(File.dirname(__FILE__), file2)), File.join(File.expand_path(File.join(File.dirname(__FILE__), dir)), File.basename(file2)))
|
12
|
+
end
|
13
|
+
Given /^I copy file "([^\"]*)" to "([^\"]*)" directory$/ do |file1, dir|
|
14
|
+
FileUtils.createDirIfMissing File.expand_path(File.join(File.dirname(__FILE__), dir))
|
15
|
+
FileUtils.cp(File.expand_path(File.join(File.dirname(__FILE__), file1)), File.join(File.expand_path(File.join(File.dirname(__FILE__), dir)), File.basename(file1)))
|
16
|
+
end
|
17
|
+
When /^I open the "([^\"]*)" file manually$/ do |path|
|
18
|
+
full_path = File.expand_path(File.join(File.dirname(__FILE__), path))
|
19
|
+
system("start #{full_path}")
|
20
|
+
sleep 5
|
21
|
+
end
|
22
|
+
When /^I open the same file via script passing "([^\"]*)" as a parameter to ExcelFile\.new$/ do |path|
|
23
|
+
full_path = File.expand_path(File.join(File.dirname(__FILE__), path))
|
24
|
+
xls = WinExcel::ExcelFile.new(full_path)
|
25
|
+
end
|
26
|
+
When /^I call get2DArray method of the returned object passing "([^\"]*)" as a cell parameter$/ do |cell|
|
27
|
+
res = xls.get2DArray(cell)
|
28
|
+
end
|
29
|
+
When /^I get \[\["([^\"]*)"\]\] back$/ do |value|
|
30
|
+
res[0][0].should == value
|
31
|
+
end
|
32
|
+
res = nil
|
33
|
+
Given /^I pass file="([^\"]*)", debug="([^\"]*)" and template="([^\"]*)" as parameters to ExcelFile\.new$/ do |path, debug, template|
|
34
|
+
full_path = File.expand_path(File.join(File.dirname(__FILE__), path))
|
35
|
+
template_full_path = File.expand_path(File.join(File.dirname(__FILE__), template))
|
36
|
+
xls = WinExcel::ExcelFile.new(full_path, debug, template_full_path)
|
37
|
+
end
|
38
|
+
Given /^I pass file="([^\"]*)" as parameter to ExcelFile\.new$/ do |path|
|
39
|
+
full_path = File.expand_path(File.join(File.dirname(__FILE__), path))
|
40
|
+
xls = WinExcel::ExcelFile.new(full_path)
|
41
|
+
end
|
42
|
+
Then /^I (?:should|do)(?: still)? see file "([^\"]*)" in RunningObjectTable \(ROT\)$/ do |file|
|
43
|
+
rot.is_running?(File.expand_path(File.join(File.dirname(__FILE__), file))).should == true
|
44
|
+
end
|
45
|
+
Then /^I (?:should|do) not see file "([^\"]*)" in RunningObjectTable \(ROT\)$/ do |file|
|
46
|
+
rot.is_running?(File.expand_path(File.join(File.dirname(__FILE__), file))).should == false
|
47
|
+
end
|
48
|
+
Then /^I should get \[\["([^\"]*)"\]\] back$/ do |value|
|
49
|
+
res[0][0].should == value
|
50
|
+
end
|
51
|
+
When /^I call ExcelFile\.finalize$/ do
|
52
|
+
WinExcel::ExcelFile.finalize
|
53
|
+
end
|
54
|
+
When /^I call close method$/ do
|
55
|
+
xls.close
|
56
|
+
end
|
57
|
+
Given /^I close "([^\"]*)" Excel file if it exists and is open$/ do |file|
|
58
|
+
full_path = File.expand_path(File.join(File.dirname(__FILE__), file))
|
59
|
+
if File.exists?(full_path) and rot.is_running?(full_path)
|
60
|
+
xls = WinExcel::ExcelFile.new(full_path)
|
61
|
+
xls.close(forceClose=true)
|
62
|
+
WinExcel::ExcelFile.finalize
|
63
|
+
end
|
64
|
+
end
|
65
|
+
When /^I delete "([^\"]*)" Excel file if it exists$/ do |file|
|
66
|
+
full_path = File.expand_path(File.join(File.dirname(__FILE__), file))
|
67
|
+
begin
|
68
|
+
FileUtils.rm_rf(full_path)
|
69
|
+
rescue
|
70
|
+
end
|
71
|
+
end
|