write_xlsx 1.08.2 → 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 +9 -0
- data/README.md +1 -1
- data/examples/background.rb +19 -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 +28 -28
- data/lib/write_xlsx/chartsheet.rb +3 -3
- data/lib/write_xlsx/drawing.rb +39 -39
- data/lib/write_xlsx/format.rb +11 -179
- data/lib/write_xlsx/package/app.rb +2 -2
- data/lib/write_xlsx/package/button.rb +8 -8
- data/lib/write_xlsx/package/comments.rb +8 -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 +21 -0
- data/lib/write_xlsx/package/shared_strings.rb +6 -6
- data/lib/write_xlsx/package/styles.rb +11 -11
- data/lib/write_xlsx/package/table.rb +23 -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 +4 -23
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +171 -644
- data/lib/write_xlsx/worksheet/cell_data.rb +25 -3
- data/lib/write_xlsx/worksheet/data_validation.rb +20 -20
- 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 +295 -4184
- data/test/perl_output/background.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_dynamic_array01.rb +25 -0
- data/test/regression/test_image56.rb +23 -0
- data/test/regression/test_image57.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/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/dynamic_array01.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/set_row01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row03.xlsx +0 -0
- data/test/test_example_match.rb +12 -0
- data/test/worksheet/test_pixels_to_row_col.rb +46 -0
- metadata +78 -2
@@ -177,8 +177,8 @@ module Writexlsx
|
|
177
177
|
#
|
178
178
|
def write_textbox
|
179
179
|
attributes = [
|
180
|
-
|
181
|
-
|
180
|
+
['style', 'mso-direction-alt:auto']
|
181
|
+
]
|
182
182
|
|
183
183
|
@writer.tag_elements('v:textbox', attributes) do
|
184
184
|
# Write the div element.
|
@@ -191,8 +191,8 @@ module Writexlsx
|
|
191
191
|
#
|
192
192
|
def write_client_data
|
193
193
|
attributes = [
|
194
|
-
|
195
|
-
|
194
|
+
['ObjectType', 'Note']
|
195
|
+
]
|
196
196
|
|
197
197
|
@writer.tag_elements('x:ClientData', attributes) do
|
198
198
|
@writer.empty_tag('x:MoveWithCells')
|
@@ -225,10 +225,10 @@ module Writexlsx
|
|
225
225
|
@author = options[:author]
|
226
226
|
@start_cell = options[:start_cell]
|
227
227
|
@start_row, @start_col = if @start_cell
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
228
|
+
substitute_cellref(@start_cell)
|
229
|
+
else
|
230
|
+
[ options[:start_row], options[:start_col] ]
|
231
|
+
end
|
232
232
|
@visible = options[:visible]
|
233
233
|
@x_offset = options[:x_offset] || default_x_offset(col)
|
234
234
|
@y_offset = options[:y_offset] || default_y_offset(row)
|
@@ -165,9 +165,9 @@ module Writexlsx
|
|
165
165
|
#
|
166
166
|
def add_table_name(table_name)
|
167
167
|
add_override(
|
168
|
-
|
169
|
-
|
170
|
-
|
168
|
+
"/xl/tables/#{table_name}.xml",
|
169
|
+
"#{App_document}spreadsheetml.table+xml"
|
170
|
+
)
|
171
171
|
end
|
172
172
|
|
173
173
|
#
|
@@ -187,6 +187,15 @@ module Writexlsx
|
|
187
187
|
add_override(custom, "#{App_document}custom-properties+xml")
|
188
188
|
end
|
189
189
|
|
190
|
+
#
|
191
|
+
# Add the metadata file to the ContentTypes overrides.
|
192
|
+
#
|
193
|
+
def add_metadata
|
194
|
+
add_override(
|
195
|
+
"/xl/metadata.xml",
|
196
|
+
"#{App_document}spreadsheetml.sheetMetadata+xml"
|
197
|
+
)
|
198
|
+
end
|
190
199
|
|
191
200
|
private
|
192
201
|
|
@@ -219,10 +228,10 @@ module Writexlsx
|
|
219
228
|
|
220
229
|
def write_default_or_override(tag, param0, a)
|
221
230
|
@writer.empty_tag(tag,
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
231
|
+
[
|
232
|
+
[param0, a[0]],
|
233
|
+
['ContentType', a[1]]
|
234
|
+
])
|
226
235
|
end
|
227
236
|
|
228
237
|
#
|
@@ -231,8 +240,8 @@ module Writexlsx
|
|
231
240
|
def write_types
|
232
241
|
xmlns = 'http://schemas.openxmlformats.org/package/2006/content-types'
|
233
242
|
attributes = [
|
234
|
-
|
235
|
-
|
243
|
+
['xmlns', xmlns]
|
244
|
+
]
|
236
245
|
|
237
246
|
@writer.tag_elements('Types', attributes) { yield }
|
238
247
|
end
|
@@ -68,11 +68,11 @@ module Writexlsx
|
|
68
68
|
xmlns_xsi = 'http://www.w3.org/2001/XMLSchema-instance'
|
69
69
|
|
70
70
|
attributes = [
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
['xmlns:cp', xmlns_cp],
|
72
|
+
['xmlns:dc', xmlns_dc],
|
73
|
+
['xmlns:dcterms', xmlns_dcterms],
|
74
|
+
['xmlns:dcmitype', xmlns_dcmitype],
|
75
|
+
['xmlns:xsi', xmlns_xsi]
|
76
76
|
]
|
77
77
|
|
78
78
|
@writer.tag_elements('cp:coreProperties', attributes) { yield }
|
@@ -47,7 +47,7 @@ module Writexlsx
|
|
47
47
|
@properties.each do |property|
|
48
48
|
# Write the property element.
|
49
49
|
write_property(property)
|
50
|
-
|
50
|
+
end
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -112,7 +112,7 @@ module Writexlsx
|
|
112
112
|
end
|
113
113
|
|
114
114
|
@writer.data_element('vt:bool', data)
|
115
|
-
|
115
|
+
end
|
116
116
|
|
117
117
|
#
|
118
118
|
# Write the <vt:filetime> element.
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'write_xlsx/package/xml_writer_simple'
|
3
|
+
require 'write_xlsx/utility'
|
4
|
+
|
5
|
+
module Writexlsx
|
6
|
+
module Package
|
7
|
+
#
|
8
|
+
# Metadata - A class for writing the Excel XLSX metadata.xml file.
|
9
|
+
#
|
10
|
+
class Metadata
|
11
|
+
include Writexlsx::Utility
|
12
|
+
|
13
|
+
def initialize(workbook)
|
14
|
+
@writer = Package::XMLWriterSimple.new
|
15
|
+
@workbook = workbook
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_xml_writer(filename)
|
19
|
+
@writer.set_xml_writer(filename)
|
20
|
+
end
|
21
|
+
|
22
|
+
def assemble_xml_file
|
23
|
+
write_xml_declaration do
|
24
|
+
# Write the metadata element.
|
25
|
+
write_metadata
|
26
|
+
# Write the metadataTypes element.
|
27
|
+
write_metadata_types
|
28
|
+
# Write the futureMetadata element.
|
29
|
+
write_future_metadata
|
30
|
+
# Write the cellMetadata element.
|
31
|
+
write_cell_metadata
|
32
|
+
@writer.end_tag('metadata')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
#
|
39
|
+
# Write the <metadata> element.
|
40
|
+
#
|
41
|
+
def write_metadata
|
42
|
+
xmlns = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'
|
43
|
+
xmlns_xda =
|
44
|
+
'http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray'
|
45
|
+
|
46
|
+
attributes = [
|
47
|
+
['xmlns', xmlns],
|
48
|
+
['xmlns:xda', xmlns_xda]
|
49
|
+
]
|
50
|
+
|
51
|
+
@writer.start_tag('metadata', attributes)
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Write the <metadataTypes> element.
|
56
|
+
#
|
57
|
+
def write_metadata_types
|
58
|
+
attributes = [['count', 1 ]]
|
59
|
+
|
60
|
+
@writer.tag_elements('metadataTypes', attributes) do
|
61
|
+
# Write the metadataType element.
|
62
|
+
write_metadata_type
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# Write the <metadataType> element.
|
68
|
+
#
|
69
|
+
def write_metadata_type
|
70
|
+
attributes = [
|
71
|
+
['name', 'XLDAPR'],
|
72
|
+
['minSupportedVersion', 120000],
|
73
|
+
['copy', 1],
|
74
|
+
['pasteAll', 1],
|
75
|
+
['pasteValues', 1],
|
76
|
+
['merge', 1],
|
77
|
+
['splitFirst', 1],
|
78
|
+
['rowColShift', 1],
|
79
|
+
['clearFormats', 1],
|
80
|
+
['clearComments', 1],
|
81
|
+
['assign', 1],
|
82
|
+
['coerce', 1],
|
83
|
+
['cellMeta', 1]
|
84
|
+
]
|
85
|
+
|
86
|
+
@writer.empty_tag('metadataType', attributes)
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Write the <futureMetadata> element.
|
91
|
+
#
|
92
|
+
def write_future_metadata
|
93
|
+
attributes = [
|
94
|
+
['name', 'XLDAPR'],
|
95
|
+
['count', 1]
|
96
|
+
]
|
97
|
+
|
98
|
+
@writer.tag_elements('futureMetadata', attributes) do
|
99
|
+
@writer.tag_elements('bk') do
|
100
|
+
@writer.tag_elements('extLst') do
|
101
|
+
# Write the ext element.
|
102
|
+
write_ext();
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# Write the <ext> element.
|
110
|
+
#
|
111
|
+
def write_ext
|
112
|
+
attributes = [[ 'uri', '{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}']]
|
113
|
+
@writer.tag_elements('ext', attributes) do
|
114
|
+
# Write the xda:dynamicArrayProperties element.
|
115
|
+
write_xda_dynamic_array_properties
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
#
|
120
|
+
# Write the <xda:dynamicArrayProperties> element.
|
121
|
+
#
|
122
|
+
def write_xda_dynamic_array_properties
|
123
|
+
attributes = [
|
124
|
+
['fDynamic', 1],
|
125
|
+
['fCollapsed', 0]
|
126
|
+
]
|
127
|
+
|
128
|
+
@writer.empty_tag('xda:dynamicArrayProperties', attributes)
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# Write the <cellMetadata> element.
|
133
|
+
#
|
134
|
+
def write_cell_metadata
|
135
|
+
count = 1
|
136
|
+
|
137
|
+
attributes = [['count', count]]
|
138
|
+
|
139
|
+
@writer.tag_elements('cellMetadata', attributes) do
|
140
|
+
@writer.tag_elements('bk') do
|
141
|
+
# Write the rc element.
|
142
|
+
write_rc
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
# Write the <rc> element.
|
149
|
+
#
|
150
|
+
def write_rc
|
151
|
+
attributes = [
|
152
|
+
['t', 1],
|
153
|
+
['v', 0]
|
154
|
+
]
|
155
|
+
@writer.empty_tag('rc', attributes)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -6,6 +6,7 @@ require 'write_xlsx/package/comments'
|
|
6
6
|
require 'write_xlsx/package/content_types'
|
7
7
|
require 'write_xlsx/package/core'
|
8
8
|
require 'write_xlsx/package/custom'
|
9
|
+
require 'write_xlsx/package/metadata'
|
9
10
|
require 'write_xlsx/package/relationships'
|
10
11
|
require 'write_xlsx/package/shared_strings'
|
11
12
|
require 'write_xlsx/package/styles'
|
@@ -56,6 +57,7 @@ module Writexlsx
|
|
56
57
|
write_drawing_rels_files
|
57
58
|
add_image_files
|
58
59
|
add_vba_project
|
60
|
+
write_metadata_file
|
59
61
|
end
|
60
62
|
|
61
63
|
private
|
@@ -175,6 +177,20 @@ module Writexlsx
|
|
175
177
|
core.assemble_xml_file
|
176
178
|
end
|
177
179
|
|
180
|
+
#
|
181
|
+
# Write the metadata.xml file.
|
182
|
+
#
|
183
|
+
def write_metadata_file
|
184
|
+
metadata = Package::Metadata.new(@workbook)
|
185
|
+
|
186
|
+
return unless @workbook.has_metadata?
|
187
|
+
|
188
|
+
FileUtils.mkdir_p("#{@package_dir}/xl")
|
189
|
+
|
190
|
+
metadata.set_xml_writer( "#{@package_dir}/xl/metadata.xml")
|
191
|
+
metadata.assemble_xml_file
|
192
|
+
end
|
193
|
+
|
178
194
|
#
|
179
195
|
# Write the custom.xml file.
|
180
196
|
#
|
@@ -211,6 +227,8 @@ module Writexlsx
|
|
211
227
|
content.add_vba_project if @workbook.vba_project
|
212
228
|
# Add the custom properties if present.
|
213
229
|
content.add_custom_properties unless @workbook.custom_properties.empty?
|
230
|
+
# Add the metadata file if present.
|
231
|
+
content.add_metadata if @workbook.has_metadata?
|
214
232
|
|
215
233
|
content.set_xml_writer("#{@package_dir}/[Content_Types].xml")
|
216
234
|
content.assemble_xml_file
|
@@ -305,6 +323,9 @@ module Writexlsx
|
|
305
323
|
rels.add_ms_package_relationship('/vbaProject', 'vbaProject.bin')
|
306
324
|
end
|
307
325
|
|
326
|
+
# Add the metadata file if required.
|
327
|
+
rels.add_document_relationship('/sheetMetadata', 'metadata.xml') if @workbook.has_metadata?
|
328
|
+
|
308
329
|
rels.set_xml_writer("#{@package_dir}/xl/_rels/workbook.xml.rels")
|
309
330
|
rels.assemble_xml_file
|
310
331
|
end
|
@@ -63,9 +63,9 @@ module Writexlsx
|
|
63
63
|
|
64
64
|
attributes =
|
65
65
|
[
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
['xmlns', schema + '/spreadsheetml/2006/main'],
|
67
|
+
['count', total_count],
|
68
|
+
['uniqueCount', unique_count]
|
69
69
|
]
|
70
70
|
|
71
71
|
@writer.tag_elements('sst', attributes) { yield }
|
@@ -94,9 +94,9 @@ module Writexlsx
|
|
94
94
|
|
95
95
|
# Convert control character to the _xHHHH_ escape.
|
96
96
|
string = string.gsub(
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
/([\x00-\x08\x0B-\x1F])/,
|
98
|
+
sprintf("_x%04X_", $1.ord)
|
99
|
+
) if string =~ /([\x00-\x08\x0B-\x1F])/
|
100
100
|
|
101
101
|
# Convert character to \xC2\xxx or \xC3\xxx
|
102
102
|
if string.bytesize == 1 && 0x80 <= string.ord && string.ord <= 0xFF
|
@@ -56,11 +56,11 @@ module Writexlsx
|
|
56
56
|
# based on the default or user defined values in the Workbook palette.
|
57
57
|
#
|
58
58
|
def palette_color(index)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
if index.to_s =~ /^#([0-9A-F]{6})$/i
|
60
|
+
"FF#{$1.upcase}"
|
61
|
+
else
|
62
|
+
"FF#{super(index)}"
|
63
|
+
end
|
64
64
|
end
|
65
65
|
|
66
66
|
#
|
@@ -526,9 +526,9 @@ module Writexlsx
|
|
526
526
|
#
|
527
527
|
def write_cell_style(name, xf_id, builtin_id)
|
528
528
|
attributes = [
|
529
|
-
|
530
|
-
|
531
|
-
|
529
|
+
['name', name],
|
530
|
+
['xfId', xf_id],
|
531
|
+
['builtinId', builtin_id]
|
532
532
|
]
|
533
533
|
|
534
534
|
@writer.empty_tag('cellStyle', attributes)
|
@@ -570,9 +570,9 @@ module Writexlsx
|
|
570
570
|
#
|
571
571
|
def write_table_styles
|
572
572
|
attributes = [
|
573
|
-
|
574
|
-
|
575
|
-
|
573
|
+
['count', 0],
|
574
|
+
['defaultTableStyle', 'TableStyleMedium9'],
|
575
|
+
['defaultPivotStyle', 'PivotStyleLight16']
|
576
576
|
]
|
577
577
|
|
578
578
|
@writer.empty_tag('tableStyles', attributes)
|
@@ -117,8 +117,8 @@ module Writexlsx
|
|
117
117
|
)
|
118
118
|
elsif user_data[:total_string]
|
119
119
|
total_label_only(
|
120
|
-
|
121
|
-
|
120
|
+
@row2, col_num, col_data, user_data[:total_string], user_data[:format]
|
121
|
+
)
|
122
122
|
end
|
123
123
|
|
124
124
|
# Get the dxf format index.
|
@@ -181,7 +181,7 @@ module Writexlsx
|
|
181
181
|
row1, row2 = row2, row1 if row1 > row2
|
182
182
|
col1, col2 = col2, col1 if col1 > col2
|
183
183
|
|
184
|
-
|
184
|
+
# The final hash contains the validation parameters.
|
185
185
|
param ||= {}
|
186
186
|
|
187
187
|
# Turn on Excel's defaults.
|
@@ -208,17 +208,17 @@ module Writexlsx
|
|
208
208
|
# List of valid input parameters.
|
209
209
|
def valid_table_parameter
|
210
210
|
[
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
211
|
+
:autofilter,
|
212
|
+
:banded_columns,
|
213
|
+
:banded_rows,
|
214
|
+
:columns,
|
215
|
+
:data,
|
216
|
+
:first_column,
|
217
|
+
:header_row,
|
218
|
+
:last_column,
|
219
|
+
:name,
|
220
|
+
:style,
|
221
|
+
:total_row
|
222
222
|
]
|
223
223
|
end
|
224
224
|
|
@@ -331,12 +331,12 @@ module Writexlsx
|
|
331
331
|
xmlns = "#{schema}spreadsheetml/2006/main"
|
332
332
|
|
333
333
|
attributes = [
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
334
|
+
['xmlns', xmlns],
|
335
|
+
['id', id],
|
336
|
+
['name', @name],
|
337
|
+
['displayName', @name],
|
338
|
+
['ref', @range]
|
339
|
+
]
|
340
340
|
|
341
341
|
unless ptrue?(@header_row_count)
|
342
342
|
attributes << ['headerRowCount', 0]
|
@@ -378,9 +378,9 @@ module Writexlsx
|
|
378
378
|
#
|
379
379
|
def write_table_column(col_data)
|
380
380
|
attributes = [
|
381
|
-
|
382
|
-
|
383
|
-
|
381
|
+
['id', col_data.id],
|
382
|
+
['name', col_data.name]
|
383
|
+
]
|
384
384
|
|
385
385
|
if ptrue?(col_data.total_string)
|
386
386
|
attributes << [:totalsRowLabel, col_data.total_string]
|
@@ -36,7 +36,7 @@ module Writexlsx
|
|
36
36
|
#
|
37
37
|
def write_theme_file
|
38
38
|
theme =
|
39
|
-
%Q{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
39
|
+
%Q{<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
40
40
|
<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:shade val="51000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="80000"><a:schemeClr val="phClr"><a:shade val="93000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="94000"/><a:satMod val="135000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>}
|
41
41
|
@writer.write(theme)
|
42
42
|
end
|