fast_excel 0.5.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +5 -1
- data/.gitignore +3 -0
- data/.octocov.yml +28 -0
- data/CHANGELOG.md +9 -0
- data/Gemfile +4 -2
- data/Rakefile +4 -1
- data/examples/comment_options.rb +39 -0
- data/fast_excel.gemspec +3 -2
- data/lib/fast_excel/binding/workbook.rb +53 -6
- data/lib/fast_excel/binding/worksheet.rb +28 -4
- data/lib/fast_excel/binding.rb +116 -13
- data/lib/fast_excel.rb +13 -12
- data/libxlsxwriter/.cirrus.yml +9 -0
- data/libxlsxwriter/.github/workflows/cmake_actions.yml +10 -6
- data/libxlsxwriter/.github/workflows/code_style.yml +2 -0
- data/libxlsxwriter/.github/workflows/make_32_actions.yml +43 -0
- data/libxlsxwriter/.github/workflows/windows_build.yml +7 -6
- data/libxlsxwriter/.github/workflows/zig_build.yml +1 -3
- data/libxlsxwriter/.gitignore +9 -7
- data/libxlsxwriter/.indent.pro +6 -0
- data/libxlsxwriter/CMakeLists.txt +377 -238
- data/libxlsxwriter/Changes.txt +189 -0
- data/libxlsxwriter/LICENSE.txt +1 -1
- data/libxlsxwriter/Makefile +36 -4
- data/libxlsxwriter/Readme.md +1 -1
- data/libxlsxwriter/build.zig +181 -92
- data/libxlsxwriter/build.zig.zon +15 -4
- data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +4 -0
- data/libxlsxwriter/include/xlsxwriter/app.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/chart.h +134 -1
- data/libxlsxwriter/include/xlsxwriter/chartsheet.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/comment.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/common.h +12 -8
- data/libxlsxwriter/include/xlsxwriter/content_types.h +3 -1
- data/libxlsxwriter/include/xlsxwriter/core.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/custom.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/drawing.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/format.h +34 -3
- data/libxlsxwriter/include/xlsxwriter/hash_table.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/metadata.h +5 -1
- data/libxlsxwriter/include/xlsxwriter/packager.h +6 -1
- data/libxlsxwriter/include/xlsxwriter/relationships.h +3 -1
- data/libxlsxwriter/include/xlsxwriter/rich_value.h +51 -0
- data/libxlsxwriter/include/xlsxwriter/rich_value_rel.h +50 -0
- data/libxlsxwriter/include/xlsxwriter/rich_value_structure.h +53 -0
- data/libxlsxwriter/include/xlsxwriter/rich_value_types.h +49 -0
- data/libxlsxwriter/include/xlsxwriter/shared_strings.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/styles.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/table.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/theme.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +4 -4
- data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +3 -3
- data/libxlsxwriter/include/xlsxwriter/utility.h +58 -7
- data/libxlsxwriter/include/xlsxwriter/vml.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/workbook.h +59 -2
- data/libxlsxwriter/include/xlsxwriter/worksheet.h +159 -13
- data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +11 -10
- data/libxlsxwriter/include/xlsxwriter.h +5 -4
- data/libxlsxwriter/libxlsxwriter.podspec +6 -6
- data/libxlsxwriter/src/Makefile +2 -1
- data/libxlsxwriter/src/app.c +2 -1
- data/libxlsxwriter/src/chart.c +360 -63
- data/libxlsxwriter/src/chartsheet.c +2 -1
- data/libxlsxwriter/src/comment.c +2 -1
- data/libxlsxwriter/src/content_types.c +22 -1
- data/libxlsxwriter/src/core.c +2 -1
- data/libxlsxwriter/src/custom.c +2 -1
- data/libxlsxwriter/src/drawing.c +7 -3
- data/libxlsxwriter/src/format.c +21 -1
- data/libxlsxwriter/src/hash_table.c +2 -1
- data/libxlsxwriter/src/metadata.c +176 -20
- data/libxlsxwriter/src/packager.c +306 -6
- data/libxlsxwriter/src/relationships.c +25 -1
- data/libxlsxwriter/src/rich_value.c +191 -0
- data/libxlsxwriter/src/rich_value_rel.c +142 -0
- data/libxlsxwriter/src/rich_value_structure.c +162 -0
- data/libxlsxwriter/src/rich_value_types.c +199 -0
- data/libxlsxwriter/src/shared_strings.c +2 -1
- data/libxlsxwriter/src/styles.c +31 -7
- data/libxlsxwriter/src/table.c +2 -1
- data/libxlsxwriter/src/theme.c +2 -1
- data/libxlsxwriter/src/utility.c +136 -46
- data/libxlsxwriter/src/vml.c +2 -1
- data/libxlsxwriter/src/workbook.c +191 -10
- data/libxlsxwriter/src/worksheet.c +514 -34
- data/libxlsxwriter/src/xmlwriter.c +17 -22
- data/libxlsxwriter/third_party/minizip/Makefile.orig +1 -1
- data/libxlsxwriter/third_party/minizip/configure.ac +1 -1
- data/libxlsxwriter/third_party/minizip/ioapi.h +6 -6
- data/libxlsxwriter/third_party/minizip/miniunz.c +16 -2
- data/libxlsxwriter/third_party/minizip/unzip.c +4 -4
- data/libxlsxwriter/third_party/minizip/unzip.h +1 -1
- data/libxlsxwriter/third_party/minizip/zip.c +5 -5
- data/libxlsxwriter/third_party/minizip/zip.h +3 -3
- data/libxlsxwriter/version.txt +1 -1
- data/sonar-project.properties +4 -0
- data/test/color_to_hex_test.rb +15 -0
- data/test/comment_opt_test.rb +76 -0
- data/test/date_test.rb +14 -0
- data/test/format_test.rb +5 -1
- data/test/get_worksheet_test.rb +28 -0
- data/test/test_helper.rb +7 -4
- data/test/tmpdir_test.rb +32 -0
- data/test/validations_test.rb +25 -19
- data/test/worksheet_test.rb +10 -2
- metadata +42 -12
- data/libxlsxwriter/cmake/FindMINIZIP.cmake +0 -121
- data/libxlsxwriter/cmake/FindPackage.cmake +0 -183
- data/libxlsxwriter/cmake/i686-toolchain.cmake +0 -7
- data/test/reopen_test.rb +0 -22
data/libxlsxwriter/src/core.c
CHANGED
data/libxlsxwriter/src/custom.c
CHANGED
data/libxlsxwriter/src/drawing.c
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Used in conjunction with the libxlsxwriter library.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* SPDX-License-Identifier: BSD-2-Clause
|
|
7
|
+
* Copyright 2014-2026, John McNamara, jmcnamara@cpan.org.
|
|
7
8
|
*
|
|
8
9
|
*/
|
|
9
10
|
|
|
@@ -505,8 +506,11 @@ _drawing_write_a_off(lxw_drawing *self, lxw_drawing_object *drawing_object)
|
|
|
505
506
|
struct xml_attribute *attribute;
|
|
506
507
|
|
|
507
508
|
LXW_INIT_ATTRIBUTES();
|
|
508
|
-
|
|
509
|
-
|
|
509
|
+
|
|
510
|
+
/* Use %d to allow for writing uint64_t on ansi 32bit systems. The largest
|
|
511
|
+
Excel value will fit without losing precision. */
|
|
512
|
+
LXW_PUSH_ATTRIBUTES_DBL("x", drawing_object->col_absolute);
|
|
513
|
+
LXW_PUSH_ATTRIBUTES_DBL("y", drawing_object->row_absolute);
|
|
510
514
|
|
|
511
515
|
lxw_xml_empty_tag(self->file, "a:off", &attributes);
|
|
512
516
|
|
data/libxlsxwriter/src/format.c
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Used in conjunction with the libxlsxwriter library.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* SPDX-License-Identifier: BSD-2-Clause
|
|
7
|
+
* Copyright 2014-2026, John McNamara, jmcnamara@cpan.org.
|
|
7
8
|
*
|
|
8
9
|
*/
|
|
9
10
|
|
|
@@ -546,6 +547,12 @@ format_set_text_justlast(lxw_format *self)
|
|
|
546
547
|
void
|
|
547
548
|
format_set_pattern(lxw_format *self, uint8_t value)
|
|
548
549
|
{
|
|
550
|
+
if (value > LXW_PATTERN_GRAY_0625) {
|
|
551
|
+
LXW_WARN_FORMAT1("format_set_pattern(): invalid pattern value: %d",
|
|
552
|
+
value);
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
555
|
+
|
|
549
556
|
self->pattern = value;
|
|
550
557
|
}
|
|
551
558
|
|
|
@@ -689,6 +696,12 @@ format_set_diag_color(lxw_format *self, lxw_color_t color)
|
|
|
689
696
|
void
|
|
690
697
|
format_set_diag_border(lxw_format *self, uint8_t style)
|
|
691
698
|
{
|
|
699
|
+
if (style > LXW_BORDER_SLANT_DASH_DOT) {
|
|
700
|
+
LXW_WARN_FORMAT1("format_set_diag_border(): invalid border style: %d",
|
|
701
|
+
style);
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
704
|
+
|
|
692
705
|
self->diag_border = style;
|
|
693
706
|
}
|
|
694
707
|
|
|
@@ -707,6 +720,13 @@ format_set_num_format_index(lxw_format *self, uint8_t value)
|
|
|
707
720
|
void
|
|
708
721
|
format_set_valign(lxw_format *self, uint8_t value)
|
|
709
722
|
{
|
|
723
|
+
if (value > LXW_ALIGN_VERTICAL_DISTRIBUTED) {
|
|
724
|
+
LXW_WARN_FORMAT1
|
|
725
|
+
("format_set_valign(): invalid vertical alignment value: %d",
|
|
726
|
+
value);
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
|
|
710
730
|
self->text_v_align = value;
|
|
711
731
|
}
|
|
712
732
|
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Used in conjunction with the libxlsxwriter library.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* SPDX-License-Identifier: BSD-2-Clause
|
|
7
|
+
* Copyright 2014-2026, John McNamara, jmcnamara@cpan.org.
|
|
7
8
|
*
|
|
8
9
|
*/
|
|
9
10
|
|
|
@@ -76,10 +77,17 @@ _metadata_write_metadata(lxw_metadata *self)
|
|
|
76
77
|
"spreadsheetml/2006/main";
|
|
77
78
|
char xmlns_xda[] = "http://schemas.microsoft.com/office/"
|
|
78
79
|
"spreadsheetml/2017/dynamicarray";
|
|
80
|
+
char xmlns_xlrd[] = "http://schemas.microsoft.com/office/"
|
|
81
|
+
"spreadsheetml/2017/richdata";
|
|
79
82
|
|
|
80
83
|
LXW_INIT_ATTRIBUTES();
|
|
81
84
|
LXW_PUSH_ATTRIBUTES_STR("xmlns", xmlns);
|
|
82
|
-
|
|
85
|
+
|
|
86
|
+
if (self->has_embedded_images)
|
|
87
|
+
LXW_PUSH_ATTRIBUTES_STR("xmlns:xlrd", xmlns_xlrd);
|
|
88
|
+
|
|
89
|
+
if (self->has_dynamic_functions)
|
|
90
|
+
LXW_PUSH_ATTRIBUTES_STR("xmlns:xda", xmlns_xda);
|
|
83
91
|
|
|
84
92
|
lxw_xml_start_tag(self->file, "metadata", &attributes);
|
|
85
93
|
|
|
@@ -87,10 +95,10 @@ _metadata_write_metadata(lxw_metadata *self)
|
|
|
87
95
|
}
|
|
88
96
|
|
|
89
97
|
/*
|
|
90
|
-
* Write the <metadataType> element.
|
|
98
|
+
* Write the <metadataType> element for dynamic functions.
|
|
91
99
|
*/
|
|
92
100
|
STATIC void
|
|
93
|
-
|
|
101
|
+
_metadata_write_cell_metadata_type(lxw_metadata *self)
|
|
94
102
|
{
|
|
95
103
|
struct xml_attribute_list attributes;
|
|
96
104
|
struct xml_attribute *attribute;
|
|
@@ -115,6 +123,34 @@ _metadata_write_metadata_type(lxw_metadata *self)
|
|
|
115
123
|
LXW_FREE_ATTRIBUTES();
|
|
116
124
|
}
|
|
117
125
|
|
|
126
|
+
/*
|
|
127
|
+
* Write the <metadataType> element for embedded images.
|
|
128
|
+
*/
|
|
129
|
+
STATIC void
|
|
130
|
+
_metadata_write_value_metadata_type(lxw_metadata *self)
|
|
131
|
+
{
|
|
132
|
+
struct xml_attribute_list attributes;
|
|
133
|
+
struct xml_attribute *attribute;
|
|
134
|
+
|
|
135
|
+
LXW_INIT_ATTRIBUTES();
|
|
136
|
+
LXW_PUSH_ATTRIBUTES_STR("name", "XLRICHVALUE");
|
|
137
|
+
LXW_PUSH_ATTRIBUTES_INT("minSupportedVersion", 120000);
|
|
138
|
+
LXW_PUSH_ATTRIBUTES_INT("copy", 1);
|
|
139
|
+
LXW_PUSH_ATTRIBUTES_INT("pasteAll", 1);
|
|
140
|
+
LXW_PUSH_ATTRIBUTES_INT("pasteValues", 1);
|
|
141
|
+
LXW_PUSH_ATTRIBUTES_INT("merge", 1);
|
|
142
|
+
LXW_PUSH_ATTRIBUTES_INT("splitFirst", 1);
|
|
143
|
+
LXW_PUSH_ATTRIBUTES_INT("rowColShift", 1);
|
|
144
|
+
LXW_PUSH_ATTRIBUTES_INT("clearFormats", 1);
|
|
145
|
+
LXW_PUSH_ATTRIBUTES_INT("clearComments", 1);
|
|
146
|
+
LXW_PUSH_ATTRIBUTES_INT("assign", 1);
|
|
147
|
+
LXW_PUSH_ATTRIBUTES_INT("coerce", 1);
|
|
148
|
+
|
|
149
|
+
lxw_xml_empty_tag(self->file, "metadataType", &attributes);
|
|
150
|
+
|
|
151
|
+
LXW_FREE_ATTRIBUTES();
|
|
152
|
+
}
|
|
153
|
+
|
|
118
154
|
/*
|
|
119
155
|
* Write the <metadataTypes> element.
|
|
120
156
|
*/
|
|
@@ -123,14 +159,24 @@ _metadata_write_metadata_types(lxw_metadata *self)
|
|
|
123
159
|
{
|
|
124
160
|
struct xml_attribute_list attributes;
|
|
125
161
|
struct xml_attribute *attribute;
|
|
162
|
+
uint8_t count = 0;
|
|
163
|
+
|
|
164
|
+
if (self->has_dynamic_functions)
|
|
165
|
+
count++;
|
|
166
|
+
|
|
167
|
+
if (self->has_embedded_images)
|
|
168
|
+
count++;
|
|
126
169
|
|
|
127
170
|
LXW_INIT_ATTRIBUTES();
|
|
128
|
-
LXW_PUSH_ATTRIBUTES_INT("count",
|
|
171
|
+
LXW_PUSH_ATTRIBUTES_INT("count", count);
|
|
129
172
|
|
|
130
173
|
lxw_xml_start_tag(self->file, "metadataTypes", &attributes);
|
|
131
174
|
|
|
132
175
|
/* Write the metadataType element. */
|
|
133
|
-
|
|
176
|
+
if (self->has_dynamic_functions)
|
|
177
|
+
_metadata_write_cell_metadata_type(self);
|
|
178
|
+
if (self->has_embedded_images)
|
|
179
|
+
_metadata_write_value_metadata_type(self);
|
|
134
180
|
|
|
135
181
|
lxw_xml_end_tag(self->file, "metadataTypes");
|
|
136
182
|
|
|
@@ -156,10 +202,10 @@ _metadata_write_xda_dynamic_array_properties(lxw_metadata *self)
|
|
|
156
202
|
}
|
|
157
203
|
|
|
158
204
|
/*
|
|
159
|
-
* Write the <ext> element.
|
|
205
|
+
* Write the <ext> element for dynamic functions.
|
|
160
206
|
*/
|
|
161
207
|
STATIC void
|
|
162
|
-
|
|
208
|
+
_metadata_write_cell_ext(lxw_metadata *self)
|
|
163
209
|
{
|
|
164
210
|
struct xml_attribute_list attributes;
|
|
165
211
|
struct xml_attribute *attribute;
|
|
@@ -178,10 +224,49 @@ _metadata_write_ext(lxw_metadata *self)
|
|
|
178
224
|
}
|
|
179
225
|
|
|
180
226
|
/*
|
|
181
|
-
* Write the <
|
|
227
|
+
* Write the <xlrd:rvb> element.
|
|
182
228
|
*/
|
|
183
229
|
STATIC void
|
|
184
|
-
|
|
230
|
+
_metadata_write_xlrd_rvb(lxw_metadata *self, uint32_t index)
|
|
231
|
+
{
|
|
232
|
+
struct xml_attribute_list attributes;
|
|
233
|
+
struct xml_attribute *attribute;
|
|
234
|
+
|
|
235
|
+
LXW_INIT_ATTRIBUTES();
|
|
236
|
+
LXW_PUSH_ATTRIBUTES_INT("i", index);
|
|
237
|
+
|
|
238
|
+
lxw_xml_empty_tag(self->file, "xlrd:rvb", &attributes);
|
|
239
|
+
|
|
240
|
+
LXW_FREE_ATTRIBUTES();
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/*
|
|
244
|
+
* Write the <ext> element for embedded images.
|
|
245
|
+
*/
|
|
246
|
+
STATIC void
|
|
247
|
+
_metadata_write_value_ext(lxw_metadata *self, uint32_t index)
|
|
248
|
+
{
|
|
249
|
+
struct xml_attribute_list attributes;
|
|
250
|
+
struct xml_attribute *attribute;
|
|
251
|
+
|
|
252
|
+
LXW_INIT_ATTRIBUTES();
|
|
253
|
+
LXW_PUSH_ATTRIBUTES_STR("uri", "{3e2802c4-a4d2-4d8b-9148-e3be6c30e623}");
|
|
254
|
+
|
|
255
|
+
lxw_xml_start_tag(self->file, "ext", &attributes);
|
|
256
|
+
|
|
257
|
+
/* Write the xlrd:rvb element. */
|
|
258
|
+
_metadata_write_xlrd_rvb(self, index);
|
|
259
|
+
|
|
260
|
+
lxw_xml_end_tag(self->file, "ext");
|
|
261
|
+
|
|
262
|
+
LXW_FREE_ATTRIBUTES();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/*
|
|
266
|
+
* Write the <futureMetadata> element for dynamic functions.
|
|
267
|
+
*/
|
|
268
|
+
STATIC void
|
|
269
|
+
_metadata_write_cell_future_metadata(lxw_metadata *self)
|
|
185
270
|
{
|
|
186
271
|
struct xml_attribute_list attributes;
|
|
187
272
|
struct xml_attribute *attribute;
|
|
@@ -193,14 +278,12 @@ _metadata_write_future_metadata(lxw_metadata *self)
|
|
|
193
278
|
lxw_xml_start_tag(self->file, "futureMetadata", &attributes);
|
|
194
279
|
|
|
195
280
|
lxw_xml_start_tag(self->file, "bk", NULL);
|
|
196
|
-
|
|
197
281
|
lxw_xml_start_tag(self->file, "extLst", NULL);
|
|
198
282
|
|
|
199
283
|
/* Write the ext element. */
|
|
200
|
-
|
|
284
|
+
_metadata_write_cell_ext(self);
|
|
201
285
|
|
|
202
286
|
lxw_xml_end_tag(self->file, "extLst");
|
|
203
|
-
|
|
204
287
|
lxw_xml_end_tag(self->file, "bk");
|
|
205
288
|
|
|
206
289
|
lxw_xml_end_tag(self->file, "futureMetadata");
|
|
@@ -208,18 +291,52 @@ _metadata_write_future_metadata(lxw_metadata *self)
|
|
|
208
291
|
LXW_FREE_ATTRIBUTES();
|
|
209
292
|
}
|
|
210
293
|
|
|
294
|
+
/*
|
|
295
|
+
* Write the <futureMetadata> element for embedded images.
|
|
296
|
+
*/
|
|
297
|
+
STATIC void
|
|
298
|
+
_metadata_write_value_future_metadata(lxw_metadata *self)
|
|
299
|
+
{
|
|
300
|
+
struct xml_attribute_list attributes;
|
|
301
|
+
struct xml_attribute *attribute;
|
|
302
|
+
uint32_t i;
|
|
303
|
+
|
|
304
|
+
LXW_INIT_ATTRIBUTES();
|
|
305
|
+
LXW_PUSH_ATTRIBUTES_STR("name", "XLRICHVALUE");
|
|
306
|
+
LXW_PUSH_ATTRIBUTES_INT("count", self->num_embedded_images);
|
|
307
|
+
|
|
308
|
+
lxw_xml_start_tag(self->file, "futureMetadata", &attributes);
|
|
309
|
+
|
|
310
|
+
for (i = 0; i < self->num_embedded_images; i++) {
|
|
311
|
+
lxw_xml_start_tag(self->file, "bk", NULL);
|
|
312
|
+
|
|
313
|
+
lxw_xml_start_tag(self->file, "extLst", NULL);
|
|
314
|
+
|
|
315
|
+
/* Write the ext element. */
|
|
316
|
+
_metadata_write_value_ext(self, i);
|
|
317
|
+
|
|
318
|
+
lxw_xml_end_tag(self->file, "extLst");
|
|
319
|
+
lxw_xml_end_tag(self->file, "bk");
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
lxw_xml_end_tag(self->file, "futureMetadata");
|
|
324
|
+
|
|
325
|
+
LXW_FREE_ATTRIBUTES();
|
|
326
|
+
}
|
|
327
|
+
|
|
211
328
|
/*
|
|
212
329
|
* Write the <rc> element.
|
|
213
330
|
*/
|
|
214
331
|
STATIC void
|
|
215
|
-
_metadata_write_rc(lxw_metadata *self)
|
|
332
|
+
_metadata_write_rc(lxw_metadata *self, uint8_t type, uint32_t index)
|
|
216
333
|
{
|
|
217
334
|
struct xml_attribute_list attributes;
|
|
218
335
|
struct xml_attribute *attribute;
|
|
219
336
|
|
|
220
337
|
LXW_INIT_ATTRIBUTES();
|
|
221
|
-
|
|
222
|
-
|
|
338
|
+
LXW_PUSH_ATTRIBUTES_INT("t", type);
|
|
339
|
+
LXW_PUSH_ATTRIBUTES_INT("v", index);
|
|
223
340
|
|
|
224
341
|
lxw_xml_empty_tag(self->file, "rc", &attributes);
|
|
225
342
|
|
|
@@ -227,7 +344,7 @@ _metadata_write_rc(lxw_metadata *self)
|
|
|
227
344
|
}
|
|
228
345
|
|
|
229
346
|
/*
|
|
230
|
-
* Write the <cellMetadata> element.
|
|
347
|
+
* Write the <cellMetadata> element for dynamic functions.
|
|
231
348
|
*/
|
|
232
349
|
STATIC void
|
|
233
350
|
_metadata_write_cell_metadata(lxw_metadata *self)
|
|
@@ -243,7 +360,7 @@ _metadata_write_cell_metadata(lxw_metadata *self)
|
|
|
243
360
|
lxw_xml_start_tag(self->file, "bk", NULL);
|
|
244
361
|
|
|
245
362
|
/* Write the rc element. */
|
|
246
|
-
_metadata_write_rc(self);
|
|
363
|
+
_metadata_write_rc(self, 1, 0);
|
|
247
364
|
|
|
248
365
|
lxw_xml_end_tag(self->file, "bk");
|
|
249
366
|
|
|
@@ -252,6 +369,39 @@ _metadata_write_cell_metadata(lxw_metadata *self)
|
|
|
252
369
|
LXW_FREE_ATTRIBUTES();
|
|
253
370
|
}
|
|
254
371
|
|
|
372
|
+
/*
|
|
373
|
+
* Write the <cellMetadata> element for embedded images.
|
|
374
|
+
*/
|
|
375
|
+
STATIC void
|
|
376
|
+
_metadata_write_value_metadata(lxw_metadata *self)
|
|
377
|
+
{
|
|
378
|
+
struct xml_attribute_list attributes;
|
|
379
|
+
struct xml_attribute *attribute;
|
|
380
|
+
uint8_t type = 1;
|
|
381
|
+
uint32_t i;
|
|
382
|
+
|
|
383
|
+
if (self->has_dynamic_functions)
|
|
384
|
+
type = 2;
|
|
385
|
+
|
|
386
|
+
LXW_INIT_ATTRIBUTES();
|
|
387
|
+
LXW_PUSH_ATTRIBUTES_INT("count", self->num_embedded_images);
|
|
388
|
+
|
|
389
|
+
lxw_xml_start_tag(self->file, "valueMetadata", &attributes);
|
|
390
|
+
|
|
391
|
+
for (i = 0; i < self->num_embedded_images; i++) {
|
|
392
|
+
lxw_xml_start_tag(self->file, "bk", NULL);
|
|
393
|
+
|
|
394
|
+
/* Write the rc element. */
|
|
395
|
+
_metadata_write_rc(self, type, i);
|
|
396
|
+
|
|
397
|
+
lxw_xml_end_tag(self->file, "bk");
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
lxw_xml_end_tag(self->file, "valueMetadata");
|
|
401
|
+
|
|
402
|
+
LXW_FREE_ATTRIBUTES();
|
|
403
|
+
}
|
|
404
|
+
|
|
255
405
|
/*****************************************************************************
|
|
256
406
|
*
|
|
257
407
|
* XML file assembly functions.
|
|
@@ -274,10 +424,16 @@ lxw_metadata_assemble_xml_file(lxw_metadata *self)
|
|
|
274
424
|
_metadata_write_metadata_types(self);
|
|
275
425
|
|
|
276
426
|
/* Write the futureMetadata element. */
|
|
277
|
-
|
|
427
|
+
if (self->has_dynamic_functions)
|
|
428
|
+
_metadata_write_cell_future_metadata(self);
|
|
429
|
+
if (self->has_embedded_images)
|
|
430
|
+
_metadata_write_value_future_metadata(self);
|
|
278
431
|
|
|
279
432
|
/* Write the cellMetadata element. */
|
|
280
|
-
|
|
433
|
+
if (self->has_dynamic_functions)
|
|
434
|
+
_metadata_write_cell_metadata(self);
|
|
435
|
+
if (self->has_embedded_images)
|
|
436
|
+
_metadata_write_value_metadata(self);
|
|
281
437
|
|
|
282
438
|
lxw_xml_end_tag(self->file, "metadata");
|
|
283
439
|
}
|