write_xlsx 1.08.2 → 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 +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
|