From d919935913602ec6fb54b760c94690e4acb326cd Mon Sep 17 00:00:00 2001 From: John McNamara Date: Tue, 22 Dec 2015 00:59:45 +0000 Subject: [PATCH] Added worksheet_default_row() function. Added worksheet_default_row() function to allow setting of default row height and hiding unused rows. Closes #27 --- dev/release/fix_example_docs.pl | 1 + docs/images/hide_row_col.png | Bin 0 -> 64080 bytes docs/src/examples.dox | 11 +++- examples/hide_row_col.c | 40 +++++++++++ include/xlsxwriter/worksheet.h | 41 +++++++++++- src/worksheet.c | 62 +++++++++++++++--- test/functional/src/test_default_row01.c | 23 +++++++ test/functional/src/test_default_row02.c | 27 ++++++++ test/functional/src/test_default_row03.c | 27 ++++++++ test/functional/src/test_default_row05.c | 31 +++++++++ test/functional/test_default_row.py | 26 ++++++++ test/functional/xlsx_files/default_row01.xlsx | Bin 0 -> 7353 bytes test/functional/xlsx_files/default_row02.xlsx | Bin 0 -> 7379 bytes test/functional/xlsx_files/default_row03.xlsx | Bin 0 -> 7400 bytes test/functional/xlsx_files/default_row05.xlsx | Bin 0 -> 7453 bytes 15 files changed, 276 insertions(+), 13 deletions(-) create mode 100644 docs/images/hide_row_col.png create mode 100644 examples/hide_row_col.c create mode 100644 test/functional/src/test_default_row01.c create mode 100644 test/functional/src/test_default_row02.c create mode 100644 test/functional/src/test_default_row03.c create mode 100644 test/functional/src/test_default_row05.c create mode 100644 test/functional/test_default_row.py create mode 100644 test/functional/xlsx_files/default_row01.xlsx create mode 100644 test/functional/xlsx_files/default_row02.xlsx create mode 100644 test/functional/xlsx_files/default_row03.xlsx create mode 100644 test/functional/xlsx_files/default_row05.xlsx diff --git a/dev/release/fix_example_docs.pl b/dev/release/fix_example_docs.pl index 39b04cae..15e3ecde 100644 --- a/dev/release/fix_example_docs.pl +++ b/dev/release/fix_example_docs.pl @@ -34,6 +34,7 @@ my @examples = ( [ 'hide_sheet.c', 'Example of hiding a worksheet' ], [ 'doc_properties.c', 'Example of setting workbook doc properties' ], [ 'worksheet_protection.c', 'Example of enabling worksheet protection' ], + [ 'hide_row_col.c', 'Example of hiding worksheet rows and columns' ], [ 'panes.c', 'Example of how to create worksheet panes' ], ); diff --git a/docs/images/hide_row_col.png b/docs/images/hide_row_col.png new file mode 100644 index 0000000000000000000000000000000000000000..15a2ab6345ae3d9435097e74ddff9e538f034053 GIT binary patch literal 64080 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

7$#p-Qtuz;aMh}k!trs%TqeP<7vr2n{3kfF2#L^ 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 literal 0 HcmV?d00001 diff --git a/docs/src/examples.dox b/docs/src/examples.dox index 30e47ccd..6cb972b1 100644 --- a/docs/src/examples.dox +++ b/docs/src/examples.dox @@ -171,12 +171,19 @@ Next example: @ref worksheet_protection.c @example worksheet_protection.c Example of setting Excel worksheet protection. -Next example: @ref panes.c +Next example: @ref hide_row_col.c @image html worksheet_protection.png +@example hide_row_col.c +Example of hiding rows and columns in an Excel worksheet. + +Next example: @ref panes.c +@image html hide_row_col.png + + @example panes.c -An example of how to create panes in a worksheet, both “freeze” panes and “split” panes. +An example of how to create panes in a worksheet, both "freeze" panes and "split" panes. Back to @ref examples @image html panes.png diff --git a/examples/hide_row_col.c b/examples/hide_row_col.c new file mode 100644 index 00000000..5fdd285e --- /dev/null +++ b/examples/hide_row_col.c @@ -0,0 +1,40 @@ +/* + * An example of how to hide rows and columns using the libxlsxwriter + * library. + * + * In order to hide rows without setting each one, (of approximately 1 million + * rows), Excel uses an optimisation to hide all rows that don't have data. + * + * Copyright 2014-2015, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + /* Create a new workbook and add a worksheet. */ + lxw_workbook *workbook = new_workbook("hide_row_col.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + lxw_row_t row; + + /* Write some data. */ + worksheet_write_string(worksheet, 0, 3, "Some hidden columns.", NULL); + worksheet_write_string(worksheet, 7, 0, "Some hidden rows.", NULL); + + /* Hide all rows without data. */ + worksheet_set_default_row(worksheet, 15, LXW_TRUE); + + /* Set the height of empty rows that we do want to display even if it is */ + /* the default height. */ + for (row = 1; row <= 6; row++) + worksheet_set_row(worksheet, row, 15, NULL, NULL); + + /* Columns can be hidden explicitly. This doesn't increase the file size. */ + lxw_row_col_options options = {.hidden = 1}; + worksheet_set_column(worksheet, COLS("G:XFD"), 8.43, NULL, &options); + + workbook_close(workbook); + + return 0; +} diff --git a/include/xlsxwriter/worksheet.h b/include/xlsxwriter/worksheet.h index 292a6189..464e8e77 100644 --- a/include/xlsxwriter/worksheet.h +++ b/include/xlsxwriter/worksheet.h @@ -68,7 +68,7 @@ #define LXW_DEF_COL_WIDTH 8.43 /** Default row height in Excel */ -#define LXW_DEF_ROW_HEIGHT 15 +#define LXW_DEF_ROW_HEIGHT 15.0 /** Error codes from worksheet functions. */ enum lxw_worksheet_error { @@ -368,6 +368,7 @@ typedef struct lxw_worksheet { uint16_t col_formats_max; uint8_t col_size_changed; + uint8_t row_size_changed; uint8_t optimize; struct lxw_row *optimize_row; @@ -409,6 +410,12 @@ typedef struct lxw_worksheet { double margin_header; double margin_footer; + double default_row_height; + uint32_t default_row_pixels; + uint32_t default_col_pixels; + uint8_t default_row_zeroed; + uint8_t default_row_set; + uint8_t header_footer_changed; char header[LXW_HEADER_FOOTER_MAX]; char footer[LXW_HEADER_FOOTER_MAX]; @@ -458,6 +465,7 @@ typedef struct lxw_row { uint8_t collapsed; uint8_t row_changed; uint8_t data_changed; + uint8_t height_changed; struct lxw_table_cells *cells; /* tree management pointers for tree.h. */ @@ -2301,6 +2309,37 @@ void worksheet_set_tab_color(lxw_worksheet *worksheet, lxw_color_t color); void worksheet_protect(lxw_worksheet *worksheet, char *password, lxw_protection *options); +/** + * @brief Set the default row properties. + * + * @param worksheet Pointer to a lxw_worksheet instance to be updated. + * @param height Default row height. + * @param hide_unused_rows Hide unused cells. + * + * The `%worksheet_set_default_row()` function is used to set Excel default + * row properties such as the default height and the option to hide unused + * rows. These parameters are an optimization used by Excel to set row + * properties without generating a very large file with an entry for each row. + * + * To set the default row height: + * + * @code + * worksheet_set_default_row(worksheet, 24, LXW_FALSE); + * + * @endcode + * + * To hide unused rows: + * + * @code + * worksheet_set_default_row(worksheet, 15, LXW_TRUE); + * @endcode + * + * Note, in the previous case we use the default height #LXW_DEF_ROW_HEIGHT = + * 15 so the the height remains unchanged. + */ +void worksheet_set_default_row(lxw_worksheet *worksheet, double height, + uint8_t hide_unused_rows); + lxw_worksheet *_new_worksheet(lxw_worksheet_init_data *init_data); void _free_worksheet(lxw_worksheet *worksheet); void _worksheet_assemble_xml_file(lxw_worksheet *worksheet); diff --git a/src/worksheet.c b/src/worksheet.c index 2ac1881b..8b4294df 100644 --- a/src/worksheet.c +++ b/src/worksheet.c @@ -99,6 +99,10 @@ _new_worksheet(lxw_worksheet_init_data *init_data) worksheet->dim_rowmin = LXW_ROW_MAX; worksheet->dim_colmin = LXW_COL_MAX; + worksheet->default_row_height = LXW_DEF_ROW_HEIGHT; + worksheet->default_row_pixels = 20; + worksheet->default_col_pixels = 64; + /* Initialize the page setup properties. */ worksheet->fit_height = 0; worksheet->fit_width = 0; @@ -1186,10 +1190,15 @@ _worksheet_write_sheet_format_pr(lxw_worksheet *self) { struct xml_attribute_list attributes; struct xml_attribute *attribute; - char default_row_height[] = "15"; _INIT_ATTRIBUTES(); - _PUSH_ATTRIBUTES_STR("defaultRowHeight", default_row_height); + _PUSH_ATTRIBUTES_DBL("defaultRowHeight", self->default_row_height); + + if (self->default_row_height != LXW_DEF_ROW_HEIGHT) + _PUSH_ATTRIBUTES_STR("customHeight", "1"); + + if (self->default_row_zeroed) + _PUSH_ATTRIBUTES_STR("zeroHeight", "1"); _xml_empty_tag(self->file, "sheetFormatPr", &attributes); @@ -1394,11 +1403,17 @@ _write_row(lxw_worksheet *self, lxw_row *row, char *spans) struct xml_attribute_list attributes; struct xml_attribute *attribute; int32_t xf_index = 0; + double height; if (row->format) { xf_index = _get_xf_index(row->format); } + if (row->height_changed) + height = row->height; + else + height = self->default_row_height; + _INIT_ATTRIBUTES(); _PUSH_ATTRIBUTES_INT("r", row->row_num + 1); @@ -1411,13 +1426,13 @@ _write_row(lxw_worksheet *self, lxw_row *row, char *spans) if (row->format) _PUSH_ATTRIBUTES_STR("customFormat", "1"); - if (row->height != LXW_DEF_ROW_HEIGHT) - _PUSH_ATTRIBUTES_INT("ht", row->height); + if (height != LXW_DEF_ROW_HEIGHT) + _PUSH_ATTRIBUTES_INT("ht", height); if (row->hidden) _PUSH_ATTRIBUTES_STR("hidden", "1"); - if (row->height != LXW_DEF_ROW_HEIGHT) + if (height != LXW_DEF_ROW_HEIGHT) _PUSH_ATTRIBUTES_STR("customHeight", "1"); if (row->collapsed) @@ -1641,8 +1656,13 @@ _worksheet_write_rows(lxw_worksheet *self) RB_FOREACH(row, lxw_table_rows, self->table) { if (RB_EMPTY(row->cells)) { - /* Row data only. No cells. */ - _write_row(self, row, NULL); + /* Row contains no cells but has height, format or other data. */ + + /* Write a default span for default rows. */ + if (self->default_row_set) + _write_row(self, row, "1:1"); + else + _write_row(self, row, NULL); } else { /* Row and cell data. */ @@ -3024,8 +3044,7 @@ worksheet_set_row(lxw_worksheet *self, /* If the height is 0 the row is hidden and the height is the default. */ if (height == 0) { hidden = LXW_TRUE; - height = LXW_DEF_ROW_HEIGHT; - + height = self->default_row_height; } row = _get_row(self, row_num); @@ -3037,8 +3056,10 @@ worksheet_set_row(lxw_worksheet *self, row->collapsed = collapsed; row->row_changed = LXW_TRUE; - return 0; + if (height != self->default_row_height) + row->height_changed = LXW_TRUE; + return 0; } /* @@ -3725,3 +3746,24 @@ worksheet_protect(lxw_worksheet *self, char *password, protect->is_configured = LXW_TRUE; } + +/* + * Set the default row properties + */ +void +worksheet_set_default_row(lxw_worksheet *self, double height, + uint8_t hide_unused_rows) +{ + if (height < 0) + height = self->default_row_height; + + if (height != self->default_row_height) { + self->default_row_height = height; + self->row_size_changed = LXW_TRUE; + } + + if (hide_unused_rows) + self->default_row_zeroed = LXW_TRUE; + + self->default_row_set = LXW_TRUE; +} diff --git a/test/functional/src/test_default_row01.c b/test/functional/src/test_default_row01.c new file mode 100644 index 00000000..c8e84b35 --- /dev/null +++ b/test/functional/src/test_default_row01.c @@ -0,0 +1,23 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2015, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_default_row01.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + + worksheet_set_default_row(worksheet, 24, LXW_FALSE); + + worksheet_write_string(worksheet, CELL("A1"), "Foo" , NULL); + worksheet_write_string(worksheet, CELL("A10"), "Bar" , NULL); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_default_row02.c b/test/functional/src/test_default_row02.c new file mode 100644 index 00000000..49ad2d8e --- /dev/null +++ b/test/functional/src/test_default_row02.c @@ -0,0 +1,27 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2015, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_default_row02.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + uint8_t row; + + worksheet_set_default_row(worksheet, 15, LXW_TRUE); + + worksheet_write_string(worksheet, CELL("A1"), "Foo" , NULL); + worksheet_write_string(worksheet, CELL("A10"), "Bar" , NULL); + + for (row = 1; row <= 8; row++) + worksheet_set_row(worksheet, row, 15, NULL, NULL); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_default_row03.c b/test/functional/src/test_default_row03.c new file mode 100644 index 00000000..a32396d5 --- /dev/null +++ b/test/functional/src/test_default_row03.c @@ -0,0 +1,27 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2015, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_default_row03.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + uint8_t row; + + worksheet_set_default_row(worksheet, 24, LXW_TRUE); + + worksheet_write_string(worksheet, CELL("A1"), "Foo" , NULL); + worksheet_write_string(worksheet, CELL("A10"), "Bar" , NULL); + + for (row = 1; row <= 8; row++) + worksheet_set_row(worksheet, row, 24, NULL, NULL); + + return workbook_close(workbook); +} diff --git a/test/functional/src/test_default_row05.c b/test/functional/src/test_default_row05.c new file mode 100644 index 00000000..1319527a --- /dev/null +++ b/test/functional/src/test_default_row05.c @@ -0,0 +1,31 @@ +/***************************************************************************** + * Test cases for libxlsxwriter. + * + * Test to compare output against Excel files. + * + * Copyright 2014-2015, John McNamara, jmcnamara@cpan.org + * + */ + +#include "xlsxwriter.h" + +int main() { + + lxw_workbook *workbook = new_workbook("test_default_row05.xlsx"); + lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); + uint8_t row; + + worksheet_set_default_row(worksheet, 24, LXW_TRUE); + + worksheet_write_string(worksheet, CELL("A1"), "Foo" , NULL); + worksheet_write_string(worksheet, CELL("A10"), "Bar" , NULL); + worksheet_write_string(worksheet, CELL("A20"), "Baz" , NULL); + + for (row = 1; row <= 8; row++) + worksheet_set_row(worksheet, row, 24, NULL, NULL); + + for (row = 10; row <= 19; row++) + worksheet_set_row(worksheet, row, 24, NULL, NULL); + + return workbook_close(workbook); +} diff --git a/test/functional/test_default_row.py b/test/functional/test_default_row.py new file mode 100644 index 00000000..0a880216 --- /dev/null +++ b/test/functional/test_default_row.py @@ -0,0 +1,26 @@ +############################################################################### +# +# Tests for libxlsxwriter. +# +# Copyright 2014-2015, John McNamara, jmcnamara@cpan.org +# + +import base_test_class + +class TestCompareXLSXFiles(base_test_class.XLSXBaseTest): + """ + Test file created with libxlsxwriter against a file created by Excel. + + """ + + def test_default_row01(self): + self.run_exe_test('test_default_row01') + + def test_default_row02(self): + self.run_exe_test('test_default_row02') + + def test_default_row03(self): + self.run_exe_test('test_default_row03') + + def test_default_row05(self): + self.run_exe_test('test_default_row05') diff --git a/test/functional/xlsx_files/default_row01.xlsx b/test/functional/xlsx_files/default_row01.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7ed503d271aa329fc9b2f5d8f2f7d77ddc7e7518 GIT binary patch literal 7353 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 literal 0 HcmV?d00001 diff --git a/test/functional/xlsx_files/default_row02.xlsx b/test/functional/xlsx_files/default_row02.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..53342fa338257b21c19be9a54adb17fa1cfe7cbb GIT binary patch literal 7379 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 literal 0 HcmV?d00001 diff --git a/test/functional/xlsx_files/default_row03.xlsx b/test/functional/xlsx_files/default_row03.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d224304704f3045b860db1f6491cebaa487f1e51 GIT binary patch literal 7400 zcmeHM2Uk;B*G>o>se+&odRGAfAxe=h1VTrtQX?oOp?9Pc0i_oKL5c_{2vVhK=tVjN zB!Y+(>4Yxzi_Xk9GmP∾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 sF)Gf*G