write_xlsx 1.07.0 → 1.09.0
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 +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
|