From 78bef13a49695d3b701f485089d65541b44f30b0 Mon Sep 17 00:00:00 2001 From: John McNamara Date: Sun, 1 Jan 2017 02:56:07 +0000 Subject: [PATCH] Add chart series fill support. --- include/xlsxwriter/chart.h | 9 +- src/chart.c | 86 ++++++++++++++++-- test/functional/src/test_chart_format03.c | 55 +++++++++++ test/functional/src/test_chart_format04.c | 54 +++++++++++ test/functional/src/test_chart_format09.c | 4 +- test/functional/src/test_chart_format17.c | 45 +++++++++ test/functional/src/test_chart_format18.c | 48 ++++++++++ test/functional/src/test_chart_format21.c | 54 +++++++++++ test/functional/src/test_chart_format22.c | 54 +++++++++++ test/functional/src/test_chart_format23.c | 54 +++++++++++ test/functional/src/test_chart_format25.c | 52 +++++++++++ test/functional/test_chart_format.py | 22 +++++ .../functional/xlsx_files/chart_format03.xlsx | Bin 0 -> 9327 bytes .../functional/xlsx_files/chart_format04.xlsx | Bin 0 -> 9314 bytes .../functional/xlsx_files/chart_format17.xlsx | Bin 0 -> 9286 bytes .../functional/xlsx_files/chart_format18.xlsx | Bin 0 -> 9294 bytes .../functional/xlsx_files/chart_format21.xlsx | Bin 0 -> 9364 bytes .../functional/xlsx_files/chart_format22.xlsx | Bin 0 -> 9360 bytes .../functional/xlsx_files/chart_format23.xlsx | Bin 0 -> 9357 bytes .../functional/xlsx_files/chart_format25.xlsx | Bin 0 -> 9351 bytes 20 files changed, 525 insertions(+), 12 deletions(-) create mode 100644 test/functional/src/test_chart_format03.c create mode 100644 test/functional/src/test_chart_format04.c create mode 100644 test/functional/src/test_chart_format17.c create mode 100644 test/functional/src/test_chart_format18.c create mode 100644 test/functional/src/test_chart_format21.c create mode 100644 test/functional/src/test_chart_format22.c create mode 100644 test/functional/src/test_chart_format23.c create mode 100644 test/functional/src/test_chart_format25.c create mode 100644 test/functional/xlsx_files/chart_format03.xlsx create mode 100644 test/functional/xlsx_files/chart_format04.xlsx create mode 100644 test/functional/xlsx_files/chart_format17.xlsx create mode 100644 test/functional/xlsx_files/chart_format18.xlsx create mode 100644 test/functional/xlsx_files/chart_format21.xlsx create mode 100644 test/functional/xlsx_files/chart_format22.xlsx create mode 100644 test/functional/xlsx_files/chart_format23.xlsx create mode 100644 test/functional/xlsx_files/chart_format25.xlsx diff --git a/include/xlsxwriter/chart.h b/include/xlsxwriter/chart.h index 8f564437..f8054558 100644 --- a/include/xlsxwriter/chart.h +++ b/include/xlsxwriter/chart.h @@ -244,15 +244,17 @@ typedef struct lxw_chart_line { lxw_color_t color; uint8_t none; - uint8_t dash_type; - uint8_t has_color; float width; + uint8_t dash_type; + uint8_t transparency; + uint8_t has_color; } lxw_chart_line; typedef struct lxw_chart_fill { lxw_color_t color; + uint8_t none; uint8_t transparency; uint8_t has_color; @@ -331,6 +333,7 @@ typedef struct lxw_chart_series { lxw_series_range *values; lxw_chart_title title; lxw_chart_line *line; + lxw_chart_fill *fill; STAILQ_ENTRY (lxw_chart_series) list_pointers; @@ -633,6 +636,8 @@ void chart_series_set_name_range(lxw_chart_series *series, void chart_series_set_line(lxw_chart_series *series, lxw_chart_line *line); +void chart_series_set_fill(lxw_chart_series *series, lxw_chart_fill *fill); + /** * @brief Set the name caption of the an axis. * diff --git a/src/chart.c b/src/chart.c index 14215e66..4dc7b619 100644 --- a/src/chart.c +++ b/src/chart.c @@ -57,6 +57,7 @@ _chart_series_free(lxw_chart_series *series) free(series->title.name); free(series->line); + free(series->fill); _chart_free_range(series->categories); _chart_free_range(series->values); @@ -237,8 +238,10 @@ _chart_convert_font_args(lxw_chart_font *user_font) if (font->rotation) font->rotation = font->rotation * 60000; - if (font->color) + if (font->color) { + font->color = lxw_format_check_color(font->color); font->has_color = LXW_TRUE; + } return font; } @@ -259,12 +262,44 @@ _chart_convert_line_args(lxw_chart_line *user_line) memcpy(line, user_line, sizeof(lxw_chart_line)); - if (line->color) + if (line->color) { + line->color = lxw_format_check_color(line->color); line->has_color = LXW_TRUE; + } + + if (line->transparency > 100) + line->transparency = 0; return line; } +/* + * Create a copy of a user supplied fill. + */ +STATIC lxw_chart_fill * +_chart_convert_fill_args(lxw_chart_fill *user_fill) +{ + lxw_chart_fill *fill; + + if (!user_fill) + return NULL; + + fill = calloc(1, sizeof(struct lxw_chart_fill)); + RETURN_ON_MEM_ERROR(fill, NULL); + + memcpy(fill, user_fill, sizeof(lxw_chart_fill)); + + if (fill->color) { + fill->color = lxw_format_check_color(fill->color); + fill->has_color = LXW_TRUE; + } + + if (fill->transparency > 100) + fill->transparency = 0; + + return fill; +} + /* * Add unique ids for primary or secondary axes. */ @@ -494,7 +529,7 @@ _chart_write_a_alpha(lxw_chart *self, uint8_t transparency) { struct xml_attribute_list attributes; struct xml_attribute *attribute; - uint16_t val; + uint32_t val; LXW_INIT_ATTRIBUTES(); @@ -1408,7 +1443,7 @@ _chart_write_a_ln(lxw_chart *self, lxw_chart_line *line) } else if (line->has_color) { /* Write the a:solidFill element. */ - _chart_write_a_solid_fill(self, line->color, LXW_FALSE); + _chart_write_a_solid_fill(self, line->color, line->transparency); } /* Write the line/dash type. */ @@ -1429,13 +1464,28 @@ STATIC void _chart_write_sp_pr(lxw_chart *self, lxw_chart_series *series) { - if (!series->line) + if (!series->line && !series->fill) return; lxw_xml_start_tag(self->file, "c:spPr", NULL); - /* Write the a:ln element. */ - _chart_write_a_ln(self, series->line); + /* Write the series fill. */ + if (series->fill) { + lxw_chart_fill *fill = series->fill; + if (fill->none) { + /* Write the a:noFill element. */ + _chart_write_a_no_fill(self); + } + else { + /* Write the a:solidFill element. */ + _chart_write_a_solid_fill(self, fill->color, fill->transparency); + } + } + + if (series->line) { + /* Write the a:ln element. */ + _chart_write_a_ln(self, series->line); + } lxw_xml_end_tag(self->file, "c:spPr"); } @@ -2587,8 +2637,14 @@ _chart_write_scatter_chart(lxw_chart *self) * it has already been specified by the user.*/ if (self->type == LXW_CHART_SCATTER) { if (!series->line) { - lxw_chart_line line = - { 0x000000, LXW_TRUE, 0x0, LXW_FALSE, 2.25 }; + lxw_chart_line line = { + 0x000000, + LXW_TRUE, + 2.25, + LXW_CHART_LINE_DASH_SOLID, + 0, + LXW_FALSE + }; series->line = _chart_convert_line_args(&line); } } @@ -3147,6 +3203,18 @@ chart_series_set_line(lxw_chart_series *series, lxw_chart_line *line) series->line = _chart_convert_line_args(line); } +/* + * Set a fill type for a series. + */ +void +chart_series_set_fill(lxw_chart_series *series, lxw_chart_fill *fill) +{ + if (!fill) + return; + + series->fill = _chart_convert_fill_args(fill); +} + /* * Set an axis caption. */ diff --git a/test/functional/src/test_chart_format03.c b/test/functional/src/test_chart_format03.c new file mode 100644 index 00000000..0e842ac7 --- /dev/null +++ b/test/functional/src/test_chart_format03.c @@ -0,0 +1,55 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format03.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 46175744; + chart->axis_id_2 = 46319488; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$B$1:$B$5" + ); + + chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$C$1:$C$5" + ); + + lxw_chart_line line = {.color = LXW_COLOR_YELLOW}; + lxw_chart_fill fill = {.color = LXW_COLOR_RED}; + + chart_series_set_line(series1, &line); + chart_series_set_fill(series1, &fill); + + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format04.c b/test/functional/src/test_chart_format04.c new file mode 100644 index 00000000..13948f95 --- /dev/null +++ b/test/functional/src/test_chart_format04.c @@ -0,0 +1,54 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format04.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 46175744; + chart->axis_id_2 = 46319488; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$B$1:$B$5" + ); + + chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$C$1:$C$5" + ); + + lxw_chart_fill fill = {.color = 0xFF0000}; + + + chart_series_set_fill(series1, &fill); + + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format09.c b/test/functional/src/test_chart_format09.c index 1a53a964..21e61875 100644 --- a/test/functional/src/test_chart_format09.c +++ b/test/functional/src/test_chart_format09.c @@ -42,7 +42,9 @@ int main() { "=Sheet1!$C$1:$C$5" ); - lxw_chart_line line = {.color = LXW_COLOR_RED, .width = 1.25, .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT}; + lxw_chart_line line = {.color = LXW_COLOR_RED, + .width = 1.25, + .dash_type = LXW_CHART_LINE_DASH_SQUARE_DOT}; chart_series_set_line(series1, &line); diff --git a/test/functional/src/test_chart_format17.c b/test/functional/src/test_chart_format17.c new file mode 100644 index 00000000..8058add3 --- /dev/null +++ b/test/functional/src/test_chart_format17.c @@ -0,0 +1,45 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format17.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 42379520; + chart->axis_id_2 = 47284608; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, NULL, "=Sheet1!$A$1:$A$5"); + chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5"); + chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5"); + + lxw_chart_fill fill = {.none = LXW_TRUE}; + chart_series_set_fill(series1, &fill); + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format18.c b/test/functional/src/test_chart_format18.c new file mode 100644 index 00000000..49fe6a9f --- /dev/null +++ b/test/functional/src/test_chart_format18.c @@ -0,0 +1,48 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format18.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 42379520; + chart->axis_id_2 = 47284608; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, NULL, "=Sheet1!$A$1:$A$5"); + chart_add_series(chart, NULL, "=Sheet1!$B$1:$B$5"); + chart_add_series(chart, NULL, "=Sheet1!$C$1:$C$5"); + + lxw_chart_line line = {.none = LXW_TRUE}; + lxw_chart_fill fill = {.none = LXW_TRUE}; + + chart_series_set_line(series1, &line); + chart_series_set_fill(series1, &fill); + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format21.c b/test/functional/src/test_chart_format21.c new file mode 100644 index 00000000..d9cb8a3a --- /dev/null +++ b/test/functional/src/test_chart_format21.c @@ -0,0 +1,54 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format21.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 115390336; + chart->axis_id_2 = 115417856; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$B$1:$B$5" + ); + + chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$C$1:$C$5" + ); + + lxw_chart_line line = {.color = LXW_COLOR_YELLOW}; + lxw_chart_fill fill = {.color = LXW_COLOR_RED, .transparency = 24}; + + chart_series_set_line(series1, &line); + chart_series_set_fill(series1, &fill); + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format22.c b/test/functional/src/test_chart_format22.c new file mode 100644 index 00000000..ca642571 --- /dev/null +++ b/test/functional/src/test_chart_format22.c @@ -0,0 +1,54 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format22.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 108321024; + chart->axis_id_2 = 108328448; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$B$1:$B$5" + ); + + chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$C$1:$C$5" + ); + + lxw_chart_line line = {.color = LXW_COLOR_YELLOW}; + lxw_chart_fill fill = {.color = LXW_COLOR_RED, .transparency = 1}; + + chart_series_set_line(series1, &line); + chart_series_set_fill(series1, &fill); + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format23.c b/test/functional/src/test_chart_format23.c new file mode 100644 index 00000000..9733ee47 --- /dev/null +++ b/test/functional/src/test_chart_format23.c @@ -0,0 +1,54 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format23.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 108321024; + chart->axis_id_2 = 108328448; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$B$1:$B$5" + ); + + chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$C$1:$C$5" + ); + + lxw_chart_line line = {.color = LXW_COLOR_YELLOW}; + lxw_chart_fill fill = {.color = LXW_COLOR_RED, .transparency = 100}; + + chart_series_set_line(series1, &line); + chart_series_set_fill(series1, &fill); + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_chart_format25.c b/test/functional/src/test_chart_format25.c new file mode 100644 index 00000000..61c8b5db --- /dev/null +++ b/test/functional/src/test_chart_format25.c @@ -0,0 +1,52 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2017, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_chart_format25.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); + + /* For testing, copy the randomly generated axis ids in the target file. */ + chart->axis_id_1 = 108178048; + chart->axis_id_2 = 108319488; + + uint8_t data[5][3] = { + {1, 2, 3}, + {2, 4, 6}, + {3, 6, 9}, + {4, 8, 12}, + {5, 10, 15} + }; + + int row, col; + for (row = 0; row < 5; row++) + for (col = 0; col < 3; col++) + worksheet_write_number(worksheet, row, col, data[row][col], NULL); + + lxw_chart_series *series1 = chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$B$1:$B$5" + ); + + chart_add_series(chart, + "=Sheet1!$A$1:$A$5", + "=Sheet1!$C$1:$C$5" + ); + + lxw_chart_line line = {.color = LXW_COLOR_RED, .transparency = 50}; + + chart_series_set_line(series1, &line); + + worksheet_insert_chart(worksheet, CELL("E9"), chart); + + return workbook_close(workbook); +} diff --git a/test/functional/test_chart_format.py b/test/functional/test_chart_format.py index 156a43a1..61c87f1f 100644 --- a/test/functional/test_chart_format.py +++ b/test/functional/test_chart_format.py @@ -19,7 +19,29 @@ class TestCompareXLSXFiles(base_test_class.XLSXBaseTest): def test_chart_format02(self): self.run_exe_test('test_chart_format02') + def test_chart_format03(self): + self.run_exe_test('test_chart_format03') + def test_chart_format04(self): + self.run_exe_test('test_chart_format04') def test_chart_format09(self): self.run_exe_test('test_chart_format09') + + def test_chart_format17(self): + self.run_exe_test('test_chart_format17') + + def test_chart_format18(self): + self.run_exe_test('test_chart_format18') + + def test_chart_format21(self): + self.run_exe_test('test_chart_format21') + + def test_chart_format22(self): + self.run_exe_test('test_chart_format22') + + def test_chart_format23(self): + self.run_exe_test('test_chart_format23') + + def test_chart_format25(self): + self.run_exe_test('test_chart_format25') diff --git a/test/functional/xlsx_files/chart_format03.xlsx b/test/functional/xlsx_files/chart_format03.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..183dfa2e92a253ca5ab2f6d8ac322d5d891bc1ff GIT binary patch literal 9327 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 a{-@tpltn?X_(!pi4KPO-0ukkpU;hJYL_|se literal 0 HcmV?d00001 diff --git a/test/functional/xlsx_files/chart_format22.xlsx b/test/functional/xlsx_files/chart_format22.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f4f9021fd12ded2ae4c814b6c3787d19bc11c291 GIT binary patch literal 9360 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 literal 0 HcmV?d00001 diff --git a/test/functional/xlsx_files/chart_format23.xlsx b/test/functional/xlsx_files/chart_format23.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dd390b7adb2e360326b8e5578ec9ea753f1efa08 GIT binary patch literal 9357 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