write_xlsx 1.07.0 → 1.09.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changes +40 -0
- data/README.md +1 -1
- data/examples/background.rb +19 -0
- data/examples/ignore_errors.rb +39 -0
- data/ignore_errors.xlsx +0 -0
- data/lib/write_xlsx/chart/axis.rb +3 -3
- data/lib/write_xlsx/chart/scatter.rb +0 -15
- data/lib/write_xlsx/chart/series.rb +1 -1
- data/lib/write_xlsx/chart.rb +31 -33
- data/lib/write_xlsx/chartsheet.rb +3 -3
- data/lib/write_xlsx/drawing.rb +118 -55
- data/lib/write_xlsx/format.rb +11 -179
- data/lib/write_xlsx/package/app.rb +5 -5
- data/lib/write_xlsx/package/button.rb +8 -8
- data/lib/write_xlsx/package/comments.rb +8 -8
- data/lib/write_xlsx/package/conditional_format.rb +2 -8
- data/lib/write_xlsx/package/content_types.rb +18 -9
- data/lib/write_xlsx/package/core.rb +5 -5
- data/lib/write_xlsx/package/custom.rb +2 -2
- data/lib/write_xlsx/package/metadata.rb +159 -0
- data/lib/write_xlsx/package/packager.rb +22 -0
- data/lib/write_xlsx/package/shared_strings.rb +6 -6
- data/lib/write_xlsx/package/styles.rb +27 -14
- data/lib/write_xlsx/package/table.rb +31 -23
- data/lib/write_xlsx/package/theme.rb +1 -1
- data/lib/write_xlsx/package/vml.rb +43 -43
- data/lib/write_xlsx/shape.rb +17 -15
- data/lib/write_xlsx/sparkline.rb +340 -340
- data/lib/write_xlsx/utility.rb +9 -24
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +193 -643
- data/lib/write_xlsx/worksheet/cell_data.rb +25 -3
- data/lib/write_xlsx/worksheet/data_validation.rb +21 -26
- data/lib/write_xlsx/worksheet/hyperlink.rb +4 -4
- data/lib/write_xlsx/worksheet/page_setup.rb +12 -12
- data/lib/write_xlsx/worksheet.rb +461 -4233
- data/test/drawing/{test_write_ext.rb → test_write_xdr_ext.rb} +2 -2
- data/test/perl_output/background.xlsx +0 -0
- data/test/perl_output/ignore_errors.xlsx +0 -0
- data/test/regression/images/logo.gif +0 -0
- data/test/regression/images/logo.jpg +0 -0
- data/test/regression/images/red.gif +0 -0
- data/test/regression/test_background01.rb +23 -0
- data/test/regression/test_background02.rb +23 -0
- data/test/regression/test_background03.rb +24 -0
- data/test/regression/test_background04.rb +25 -0
- data/test/regression/test_background05.rb +25 -0
- data/test/regression/test_background06.rb +31 -0
- data/test/regression/test_background07.rb +37 -0
- data/test/regression/test_chart_axis47.rb +52 -0
- data/test/regression/test_chart_axis48.rb +53 -0
- data/test/regression/test_chart_crossing01.rb +1 -1
- data/test/regression/test_chart_crossing05.rb +46 -0
- data/test/regression/test_chart_crossing06.rb +46 -0
- data/test/regression/test_chart_data_labels48.rb +55 -0
- data/test/regression/test_chart_data_labels49.rb +55 -0
- data/test/regression/test_chart_data_labels50.rb +57 -0
- data/test/regression/test_dynamic_array01.rb +25 -0
- data/test/regression/test_format16.rb +24 -0
- data/test/regression/test_format17.rb +24 -0
- data/test/regression/test_header04.rb +30 -0
- data/test/regression/test_hyperlink50.rb +27 -0
- data/test/regression/test_hyperlink51.rb +27 -0
- data/test/regression/test_ignore_error01.rb +23 -0
- data/test/regression/test_ignore_error02.rb +24 -0
- data/test/regression/test_ignore_error03.rb +26 -0
- data/test/regression/test_ignore_error04.rb +26 -0
- data/test/regression/test_ignore_error05.rb +32 -0
- data/test/regression/test_ignore_error06.rb +32 -0
- data/test/regression/test_image52.rb +26 -0
- data/test/regression/test_image53.rb +26 -0
- data/test/regression/test_image54.rb +26 -0
- data/test/regression/test_image55.rb +27 -0
- data/test/regression/test_image56.rb +23 -0
- data/test/regression/test_image57.rb +23 -0
- data/test/regression/test_protect04.rb +32 -0
- data/test/regression/test_protect05.rb +35 -0
- data/test/regression/test_protect06.rb +35 -0
- data/test/regression/test_protect07.rb +23 -0
- data/test/regression/test_set_column10.rb +55 -0
- data/test/regression/test_set_column11.rb +48 -0
- data/test/regression/test_set_row01.rb +35 -0
- data/test/regression/test_set_row02.rb +35 -0
- data/test/regression/test_set_row03.rb +35 -0
- data/test/regression/test_set_row04.rb +35 -0
- data/test/regression/test_table26.rb +38 -0
- data/test/regression/xlsx_files/background01.xlsx +0 -0
- data/test/regression/xlsx_files/background02.xlsx +0 -0
- data/test/regression/xlsx_files/background03.xlsx +0 -0
- data/test/regression/xlsx_files/background04.xlsx +0 -0
- data/test/regression/xlsx_files/background05.xlsx +0 -0
- data/test/regression/xlsx_files/background06.xlsx +0 -0
- data/test/regression/xlsx_files/background07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels49.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels50.xlsx +0 -0
- data/test/regression/xlsx_files/dynamic_array01.xlsx +0 -0
- data/test/regression/xlsx_files/format16.xlsx +0 -0
- data/test/regression/xlsx_files/format17.xlsx +0 -0
- data/test/regression/xlsx_files/header04.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink50.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink51.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error01.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error02.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error03.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error04.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error05.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error06.xlsx +0 -0
- data/test/regression/xlsx_files/image52.xlsx +0 -0
- data/test/regression/xlsx_files/image53.xlsx +0 -0
- data/test/regression/xlsx_files/image54.xlsx +0 -0
- data/test/regression/xlsx_files/image55.xlsx +0 -0
- data/test/regression/xlsx_files/image56.xlsx +0 -0
- data/test/regression/xlsx_files/image57.xlsx +0 -0
- data/test/regression/xlsx_files/protect04.xlsx +0 -0
- data/test/regression/xlsx_files/protect05.xlsx +0 -0
- data/test/regression/xlsx_files/protect06.xlsx +0 -0
- data/test/regression/xlsx_files/protect07.xlsx +0 -0
- data/test/regression/xlsx_files/set_row01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row03.xlsx +0 -0
- data/test/regression/xlsx_files/table26.xlsx +0 -0
- data/test/test_example_match.rb +43 -0
- data/test/utility/test_range.rb +20 -0
- data/test/worksheet/test_pixels_to_row_col.rb +46 -0
- metadata +190 -8
@@ -16,8 +16,8 @@ module Writexlsx
|
|
16
16
|
def cell_attributes #:nodoc:
|
17
17
|
xf_index = xf ? xf.get_xf_index : 0
|
18
18
|
attributes = [
|
19
|
-
|
20
|
-
|
19
|
+
['r', xl_rowcol_to_cell(row, col)]
|
20
|
+
]
|
21
21
|
|
22
22
|
# Add the cell format index.
|
23
23
|
if xf_index != 0
|
@@ -100,7 +100,7 @@ module Writexlsx
|
|
100
100
|
elsif error_code.include?(@result)
|
101
101
|
attributes << ['t', 'e']
|
102
102
|
else
|
103
|
-
|
103
|
+
attributes << ['t', 'str']
|
104
104
|
end
|
105
105
|
end
|
106
106
|
@worksheet.writer.tag_elements('c', attributes) do
|
@@ -128,6 +128,28 @@ module Writexlsx
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
131
|
+
class DynamicFormulaArrayCellData < CellData # :nodoc:
|
132
|
+
def initialize(worksheet, row, col, formula, xf, range, result)
|
133
|
+
@worksheet = worksheet
|
134
|
+
@row, @col, @token, @xf, @range, @result = row, col, formula, xf, range, result
|
135
|
+
end
|
136
|
+
|
137
|
+
def data
|
138
|
+
@result || 0
|
139
|
+
end
|
140
|
+
|
141
|
+
def write_cell
|
142
|
+
# Add metadata linkage for dynamic array formulas.
|
143
|
+
attributes = cell_attributes
|
144
|
+
attributes << ['cm', '1']
|
145
|
+
|
146
|
+
@worksheet.writer.tag_elements('c', attributes) do
|
147
|
+
@worksheet.write_cell_array_formula(token, range)
|
148
|
+
@worksheet.write_cell_value(result)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
131
153
|
class BooleanCellData < CellData # :nodoc:
|
132
154
|
def initialize(worksheet, row, col, val, xf)
|
133
155
|
@worksheet = worksheet
|
@@ -138,12 +138,7 @@ module Writexlsx
|
|
138
138
|
row_first, row_last = row_last, row_first if row_first > row_last
|
139
139
|
col_first, col_last = col_last, col_first if col_first > col_last
|
140
140
|
|
141
|
-
|
142
|
-
if row_first == row_last && col_first == col_last
|
143
|
-
sqref += xl_rowcol_to_cell(row_first, col_first)
|
144
|
-
else
|
145
|
-
sqref += xl_range(row_first, row_last, col_first, col_last)
|
146
|
-
end
|
141
|
+
sqref += xl_range(row_first, row_last, col_first, col_last)
|
147
142
|
end
|
148
143
|
|
149
144
|
if @validate != 'none'
|
@@ -186,11 +181,11 @@ module Writexlsx
|
|
186
181
|
end
|
187
182
|
unless valid_validation_type.has_key?(@validate.downcase)
|
188
183
|
raise WriteXLSXOptionParameterError,
|
189
|
-
|
184
|
+
"Unknown validation type '#{@validate}' for parameter :validate in data_validation()"
|
190
185
|
end
|
191
186
|
if @error_type && !error_type_hash.has_key?(@error_type.downcase)
|
192
187
|
raise WriteXLSXOptionParameterError,
|
193
|
-
|
188
|
+
"Unknown criteria type '#param[:error_type}' for parameter :error_type in data_validation()"
|
194
189
|
end
|
195
190
|
end
|
196
191
|
|
@@ -204,7 +199,7 @@ module Writexlsx
|
|
204
199
|
if @criteria == 'between' || @criteria == 'notBetween'
|
205
200
|
unless has_key?(:maximum)
|
206
201
|
raise WriteXLSXOptionParameterError,
|
207
|
-
|
202
|
+
"Parameter :maximum is required in data_validation() when using :between or :not between criteria"
|
208
203
|
end
|
209
204
|
else
|
210
205
|
@maximum = nil
|
@@ -214,7 +209,7 @@ module Writexlsx
|
|
214
209
|
def check_valid_citeria_types
|
215
210
|
unless valid_criteria_type.has_key?(@criteria.downcase)
|
216
211
|
raise WriteXLSXOptionParameterError,
|
217
|
-
|
212
|
+
"Unknown criteria type '#{@criteria}' for parameter :criteria in data_validation()"
|
218
213
|
end
|
219
214
|
end
|
220
215
|
|
@@ -258,22 +253,22 @@ module Writexlsx
|
|
258
253
|
# List of valid input parameters.
|
259
254
|
def valid_validation_parameter
|
260
255
|
[
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
256
|
+
:validate,
|
257
|
+
:criteria,
|
258
|
+
:value,
|
259
|
+
:source,
|
260
|
+
:minimum,
|
261
|
+
:maximum,
|
262
|
+
:ignore_blank,
|
263
|
+
:dropdown,
|
264
|
+
:show_input,
|
265
|
+
:input_title,
|
266
|
+
:input_message,
|
267
|
+
:show_error,
|
268
|
+
:error_title,
|
269
|
+
:error_message,
|
270
|
+
:error_type,
|
271
|
+
:other_cells
|
277
272
|
]
|
278
273
|
end
|
279
274
|
|
@@ -87,9 +87,9 @@ module Writexlsx
|
|
87
87
|
|
88
88
|
def attributes(row, col, dummy = nil)
|
89
89
|
attr = [
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
['ref', xl_rowcol_to_cell(row, col)],
|
91
|
+
['location', @url]
|
92
|
+
]
|
93
93
|
|
94
94
|
attr << ['tooltip', @tip] if @tip
|
95
95
|
attr << ['display', @str]
|
@@ -116,7 +116,7 @@ module Writexlsx
|
|
116
116
|
|
117
117
|
# Add the file:/// URI to the url if non-local.
|
118
118
|
if url =~ %r![:]! || # Windows style "C:/" link.
|
119
|
-
|
119
|
+
url =~ %r!^\\\\! # Network share.
|
120
120
|
url = "file:///#{url}"
|
121
121
|
end
|
122
122
|
|
@@ -105,12 +105,12 @@ module Writexlsx
|
|
105
105
|
attributes << ['pageOrder', "overThenDown"] if @across
|
106
106
|
attributes << ['firstPageNumber', @page_start] if @page_start && @page_start > 1
|
107
107
|
attributes << ['orientation',
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
108
|
+
if @orientation
|
109
|
+
'portrait'
|
110
|
+
else
|
111
|
+
'landscape'
|
112
|
+
end
|
113
|
+
]
|
114
114
|
attributes << ['blackAndWhite', 1] if @black_white
|
115
115
|
attributes << ['useFirstPageNumber', 1] if ptrue?(@page_start)
|
116
116
|
|
@@ -180,12 +180,12 @@ module Writexlsx
|
|
180
180
|
|
181
181
|
def margin_attributes # :nodoc:
|
182
182
|
[
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
183
|
+
['left', @margin_left],
|
184
|
+
['right', @margin_right],
|
185
|
+
['top', @margin_top],
|
186
|
+
['bottom', @margin_bottom],
|
187
|
+
['header', @margin_header],
|
188
|
+
['footer', @margin_footer]
|
189
189
|
]
|
190
190
|
end
|
191
191
|
end
|