From e51eadae87aa628006ef734587e5cdfa0b70c8f4 Mon Sep 17 00:00:00 2001 From: John McNamara Date: Sun, 7 Apr 2019 14:25:35 +0100 Subject: [PATCH] Fix issue with images in hidden cells. Fix issue where images that started in hidden rows/cols weren't placed correctly in the worksheet. --- src/worksheet.c | 29 +++++++++++++++++------- test/functional/src/test_image44.c | 22 ++++++++++++++++++ test/functional/src/test_image45.c | 23 +++++++++++++++++++ test/functional/src/test_image46.c | 24 ++++++++++++++++++++ test/functional/src/test_image47.c | 23 +++++++++++++++++++ test/functional/test_image.py | 12 ++++++++++ test/functional/xlsx_files/image44.xlsx | Bin 0 -> 8623 bytes test/functional/xlsx_files/image45.xlsx | Bin 0 -> 8645 bytes test/functional/xlsx_files/image46.xlsx | Bin 0 -> 8654 bytes test/functional/xlsx_files/image47.xlsx | Bin 0 -> 8634 bytes 10 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 test/functional/src/test_image44.c create mode 100644 test/functional/src/test_image45.c create mode 100644 test/functional/src/test_image46.c create mode 100644 test/functional/src/test_image47.c create mode 100644 test/functional/xlsx_files/image44.xlsx create mode 100644 test/functional/xlsx_files/image45.xlsx create mode 100644 test/functional/xlsx_files/image46.xlsx create mode 100644 test/functional/xlsx_files/image47.xlsx diff --git a/src/worksheet.c b/src/worksheet.c index f86ddbe8..78a00922 100644 --- a/src/worksheet.c +++ b/src/worksheet.c @@ -1740,6 +1740,9 @@ _worksheet_size_col(lxw_worksheet *self, lxw_col_t col_num) } if (col_opt) { + if (col_opt->hidden) + return 0; + width = col_opt->width; /* Convert to pixels. */ @@ -1775,6 +1778,9 @@ _worksheet_size_row(lxw_worksheet *self, lxw_row_t row_num) row = lxw_worksheet_find_row(self, row_num); if (row) { + if (row->hidden) + return 0; + height = row->height; if (height == 0) @@ -1901,23 +1907,30 @@ _worksheet_position_object_pixels(lxw_worksheet *self, y_abs += y1; /* Adjust start col for offsets that are greater than the col width. */ - while (x1 >= _worksheet_size_col(self, col_start)) { - x1 -= _worksheet_size_col(self, col_start); - col_start++; + if (_worksheet_size_col(self, col_start) > 0) { + while (x1 >= _worksheet_size_col(self, col_start)) { + x1 -= _worksheet_size_col(self, col_start); + col_start++; + } } /* Adjust start row for offsets that are greater than the row height. */ - while (y1 >= _worksheet_size_row(self, row_start)) { - y1 -= _worksheet_size_row(self, row_start); - row_start++; + if (_worksheet_size_row(self, row_start) > 0) { + while (y1 >= _worksheet_size_row(self, row_start)) { + y1 -= _worksheet_size_row(self, row_start); + row_start++; + } } /* Initialize end cell to the same as the start cell. */ col_end = col_start; row_end = row_start; - width = width + x1; - height = height + y1; + /* Only offset the image in the cell if the row/col isn't hidden. */ + if (_worksheet_size_col(self, col_start) > 0) + width = width + x1; + if (_worksheet_size_row(self, row_start) > 0) + height = height + y1; /* Subtract the underlying cell widths to find the end cell. */ while (width >= _worksheet_size_col(self, col_end)) { diff --git a/test/functional/src/test_image44.c b/test/functional/src/test_image44.c new file mode 100644 index 00000000..d8ef18e6 --- /dev/null +++ b/test/functional/src/test_image44.c @@ -0,0 +1,22 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2019, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_image44.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + + worksheet_insert_image(worksheet, CELL("E9"), "images/red.png"); + + worksheet_set_row(worksheet, 8, 30, NULL); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_image45.c b/test/functional/src/test_image45.c new file mode 100644 index 00000000..2e556352 --- /dev/null +++ b/test/functional/src/test_image45.c @@ -0,0 +1,23 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2019, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_image45.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + + worksheet_insert_image(worksheet, CELL("E9"), "images/red.png"); + + lxw_row_col_options options = {.hidden = LXW_TRUE}; + worksheet_set_row_opt(worksheet, 8, 30, NULL, &options); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_image46.c b/test/functional/src/test_image46.c new file mode 100644 index 00000000..a0d62234 --- /dev/null +++ b/test/functional/src/test_image46.c @@ -0,0 +1,24 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2019, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_image46.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + + lxw_image_options image_options = {.x_offset = 0, .y_offset = 4}; + worksheet_insert_image_opt(worksheet, CELL("E9"), "images/red.png", &image_options); + + lxw_row_col_options row_options = {.hidden = LXW_TRUE}; + worksheet_set_row_opt(worksheet, 8, 30, NULL, &row_options); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_image47.c b/test/functional/src/test_image47.c new file mode 100644 index 00000000..5d72ee00 --- /dev/null +++ b/test/functional/src/test_image47.c @@ -0,0 +1,23 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2019, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_image47.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + + worksheet_insert_image(worksheet, CELL("E9"), "images/red.png"); + + lxw_row_col_options options = {.hidden = LXW_TRUE}; + worksheet_set_row_opt(worksheet, 9, LXW_DEF_ROW_HEIGHT, NULL, &options); + + return workbook_close(workbook); +} diff --git a/test/functional/test_image.py b/test/functional/test_image.py index 6b948b6a..e6026c52 100644 --- a/test/functional/test_image.py +++ b/test/functional/test_image.py @@ -113,6 +113,18 @@ def test_image35(self): def test_image36(self): self.run_exe_test('test_image36') + def test_image44(self): + self.run_exe_test('test_image44') + + def test_image45(self): + self.run_exe_test('test_image45') + + def test_image46(self): + self.run_exe_test('test_image46') + + def test_image47(self): + self.run_exe_test('test_image47') + # Test in-memory image handling. def test_image81(self): self.run_exe_test('test_image81', 'image01.xlsx') diff --git a/test/functional/xlsx_files/image44.xlsx b/test/functional/xlsx_files/image44.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..10bedc98983386c0d01bedec2de3633198d0442e GIT binary patch literal 8623 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 IP+i{r4^^_3*8l(j literal 0 HcmV?d00001 diff --git a/test/functional/xlsx_files/image45.xlsx b/test/functional/xlsx_files/image45.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..11ad840c2873a354f28f0bc906fdcd528b3692d3 GIT binary patch literal 8645 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 literal 0 HcmV?d00001 diff --git a/test/functional/xlsx_files/image46.xlsx b/test/functional/xlsx_files/image46.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..21527f460a3c443c11f65d34f85fcbc043ee65b7 GIT binary patch literal 8654 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