From 6c829a235a5cbf699bc3b3e545961efd2c00ec83 Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Sat, 6 Aug 2016 10:40:17 -0400 Subject: [PATCH] improve manifest, implement true thumbnail handling, being refactoring serialization tests --- include/xlnt/packaging/manifest.hpp | 84 +-- include/xlnt/packaging/relationship.hpp | 1 - include/xlnt/workbook/workbook.hpp | 11 +- source/cell/cell.cpp | 86 ++- source/cell/tests/test_cell.hpp | 4 +- source/detail/stylesheet.hpp | 62 +- source/detail/workbook_impl.hpp | 10 +- source/detail/xlsx_consumer.cpp | 140 ++-- source/detail/xlsx_consumer.hpp | 9 +- source/detail/xlsx_producer.cpp | 681 ++++++------------ source/detail/xlsx_producer.hpp | 56 +- source/packaging/manifest.cpp | 131 ++-- source/packaging/tests/test_core.hpp | 82 --- source/packaging/tests/test_zip_file.hpp | 225 ++++++ source/packaging/zip_file.cpp | 34 +- source/styles/tests/test_stylesheet.hpp | 285 -------- source/utils/path.cpp | 4 + source/utils/tests/test_zip_file.hpp | 254 ------- source/workbook/tests/test_consume_xlsx.hpp | 14 + source/workbook/tests/test_produce_xlsx.hpp | 32 + source/workbook/tests/test_read.hpp | 438 ----------- source/workbook/tests/test_round_trip.hpp | 82 +++ source/workbook/tests/test_style_reader.hpp | 36 - source/workbook/tests/test_style_writer.hpp | 365 ---------- source/workbook/tests/test_theme.hpp | 10 - source/workbook/tests/test_workbook.hpp | 36 +- source/workbook/tests/test_write.hpp | 327 --------- source/workbook/tests/test_write_workbook.hpp | 219 ------ source/workbook/workbook.cpp | 148 ++-- source/worksheet/tests/test_worksheet.hpp | 51 +- tests/data/2_not-empty.txt | 1 - tests/data/4_not-package.zip | Bin 190 -> 0 bytes tests/data/5_visio.zip | Bin 21063 -> 0 bytes tests/data/complex-styles.xlsx | Bin 46700 -> 0 bytes .../Content_types_vba.xml | 0 .../[Content_Types].xml | 0 .../expected => core_properties}/core.xml | 0 .../{writer => extended_properties}/app.xml | 0 tests/data/genuine/NameWithValueBug.xlsx | Bin 8021 -> 0 bytes tests/data/genuine/empty-no-string.xlsx | Bin 7842 -> 0 bytes tests/data/genuine/empty-with-styles.xlsx | Bin 7511 -> 0 bytes tests/data/genuine/empty.xlsx | Bin 9782 -> 0 bytes tests/data/genuine/empty_libre.xlsx | Bin 8107 -> 0 bytes tests/data/genuine/empty_no_dimensions.xlsx | Bin 10300 -> 0 bytes .../genuine/empty_with_no_properties.xlsx | Bin 9476 -> 0 bytes tests/data/genuine/guess_types.xlsx | Bin 30133 -> 0 bytes tests/data/genuine/libreoffice_nrt.xlsx | Bin 4534 -> 0 bytes .../genuine/number_empty_shared_strings.xlsx | Bin 502196 -> 0 bytes tests/data/genuine/tab_order.xlsx | Bin 11208 -> 0 bytes .../{writer/expected => package_rels}/.rels | 0 tests/data/reader/bigfoot.xlsx | Bin 410964 -> 0 bytes tests/data/reader/bug137.xlsx | Bin 10004 -> 0 bytes tests/data/reader/bug275.xlsx | Bin 30175 -> 0 bytes tests/data/reader/bug304.xlsx | Bin 25914 -> 0 bytes tests/data/reader/charset-excel.xlsx | Bin 7994 -> 0 bytes tests/data/reader/contains_chartsheets.xlsx | Bin 14649 -> 0 bytes tests/data/reader/date_1900.xlsx | Bin 28027 -> 0 bytes tests/data/reader/date_1904.xlsx | Bin 28038 -> 0 bytes tests/data/reader/formatting.xlsx | Bin 498819 -> 0 bytes tests/data/reader/formulae.xlsx | Bin 35649 -> 0 bytes tests/data/reader/null_archive.xlsx | Bin 126 -> 0 bytes tests/data/reader/sharedStrings.xml | 2 - .../data/reader/shared_strings-max_range.xlsx | Bin 10773 -> 0 bytes .../shared_strings-multiple_r_nodes.xlsx | Bin 8447 -> 0 bytes tests/data/reader/styles/simple-styles.xml | 58 -- tests/data/reader/vba+comments.xlsm | Bin 22554 -> 0 bytes tests/data/reader/vba-comments-saved.xlsm | Bin 7930 -> 0 bytes tests/data/reader/vba-test.xlsm | Bin 52938 -> 0 bytes .../sharedStrings.xml | 0 .../{reader => }/styles/alignment_styles.xml | 0 .../{reader => }/styles/complex-styles.xml | 0 tests/data/{reader => }/styles/dxf_style.xml | 0 .../styles/empty-workbook-styles.xml | 0 .../{reader => }/styles/no_number_format.xml | 0 .../{reader => }/styles/none_value_styles.xml | 0 tests/data/{reader => }/styles/rgb_colors.xml | 0 .../expected => styles}/simple-styles.xml | 0 .../{writer/expected => styles}/styles.xml | 0 .../styles/styles_number_formats.xml | 0 .../{writer/expected => theme}/theme1.xml | 0 .../bug328_hyperlinks.xml | 0 .../expected => workbook}/workbook.xml | 0 .../workbook_auto_filter.xml | 0 .../workbook.xml.rels | 0 .../bug393-worksheet.xml | 0 .../expected => worksheets}/decimal.xml | 0 .../{reader => worksheets}/empty_rows.xml | 0 .../expected => worksheets}/long_number.xml | 0 .../{reader => worksheets}/merged-ranges.xml | 0 .../expected => worksheets}/sheet1.xml | 0 .../sheet1_auto_filter.xml | 0 .../sheet1_auto_filter_filter_column.xml | 0 .../sheet1_auto_filter_sort_condition.xml | 0 .../expected => worksheets}/sheet1_bool.xml | 0 .../sheet1_formula.xml | 0 .../sheet1_freeze_panes_both.xml | 0 .../sheet1_freeze_panes_horiz.xml | 0 .../sheet1_freeze_panes_vert.xml | 0 .../expected => worksheets}/sheet1_height.xml | 0 .../sheet1_hyperlink.xml | 0 .../sheet1_hyperlink.xml.rels | 0 .../expected => worksheets}/sheet1_style.xml | 0 tests/data/{reader => worksheets}/sheet2.xml | 0 .../sheet2_invalid_dimension.xml | 0 .../sheet2_no_dimension.xml | 0 .../{reader => worksheets}/sheet2_no_span.xml | 0 .../expected => worksheets}/short_number.xml | 0 .../worksheet_formula.xml | 0 .../worksheet_unprotected_style.xml | 0 tests/data/writer/Content_types_vba.xml | 20 - tests/data/writer/expected/app.xml | 2 - tests/data/writer/expected/font.xml | 10 - tests/data/writer/font.xml | 10 - tests/data/writer/styles.xml | 41 -- tests/data/{1_empty.txt => xlsx/1_blank.xlsx} | 0 tests/data/xlsx/2_text.xlsx | 1 + .../{3_empty.zip => xlsx/3_empty-zip.xlsx} | Bin tests/data/xlsx/4_not-package.xlsx | Bin 0 -> 159 bytes .../data/{5_visio.vsdx => xlsx/5_visio.xlsx} | Bin .../{6_document.docx => xlsx/6_document.xlsx} | Bin .../7_presentation.xlsx} | Bin .../8_default-excel.xlsx} | Bin tests/data/xlsx/9_default-libre-office.xlsx | Bin 0 -> 4306 bytes tests/helpers/xml_helper.hpp | 39 + 124 files changed, 1059 insertions(+), 3042 deletions(-) delete mode 100644 source/packaging/tests/test_core.hpp create mode 100644 source/packaging/tests/test_zip_file.hpp delete mode 100644 source/styles/tests/test_stylesheet.hpp delete mode 100644 source/utils/tests/test_zip_file.hpp create mode 100644 source/workbook/tests/test_consume_xlsx.hpp create mode 100644 source/workbook/tests/test_produce_xlsx.hpp delete mode 100644 source/workbook/tests/test_read.hpp create mode 100644 source/workbook/tests/test_round_trip.hpp delete mode 100644 source/workbook/tests/test_style_reader.hpp delete mode 100644 source/workbook/tests/test_style_writer.hpp delete mode 100644 source/workbook/tests/test_write.hpp delete mode 100644 source/workbook/tests/test_write_workbook.hpp delete mode 100644 tests/data/2_not-empty.txt delete mode 100644 tests/data/4_not-package.zip delete mode 100644 tests/data/5_visio.zip delete mode 100644 tests/data/complex-styles.xlsx rename tests/data/{writer/expected => content_types}/Content_types_vba.xml (100%) rename tests/data/{writer/expected => content_types}/[Content_Types].xml (100%) rename tests/data/{writer/expected => core_properties}/core.xml (100%) rename tests/data/{writer => extended_properties}/app.xml (100%) delete mode 100644 tests/data/genuine/NameWithValueBug.xlsx delete mode 100644 tests/data/genuine/empty-no-string.xlsx delete mode 100644 tests/data/genuine/empty-with-styles.xlsx delete mode 100644 tests/data/genuine/empty.xlsx delete mode 100644 tests/data/genuine/empty_libre.xlsx delete mode 100644 tests/data/genuine/empty_no_dimensions.xlsx delete mode 100644 tests/data/genuine/empty_with_no_properties.xlsx delete mode 100644 tests/data/genuine/guess_types.xlsx delete mode 100644 tests/data/genuine/libreoffice_nrt.xlsx delete mode 100644 tests/data/genuine/number_empty_shared_strings.xlsx delete mode 100644 tests/data/genuine/tab_order.xlsx rename tests/data/{writer/expected => package_rels}/.rels (100%) delete mode 100644 tests/data/reader/bigfoot.xlsx delete mode 100644 tests/data/reader/bug137.xlsx delete mode 100644 tests/data/reader/bug275.xlsx delete mode 100644 tests/data/reader/bug304.xlsx delete mode 100644 tests/data/reader/charset-excel.xlsx delete mode 100644 tests/data/reader/contains_chartsheets.xlsx delete mode 100644 tests/data/reader/date_1900.xlsx delete mode 100644 tests/data/reader/date_1904.xlsx delete mode 100644 tests/data/reader/formatting.xlsx delete mode 100644 tests/data/reader/formulae.xlsx delete mode 100644 tests/data/reader/null_archive.xlsx delete mode 100644 tests/data/reader/sharedStrings.xml delete mode 100644 tests/data/reader/shared_strings-max_range.xlsx delete mode 100644 tests/data/reader/shared_strings-multiple_r_nodes.xlsx delete mode 100644 tests/data/reader/styles/simple-styles.xml delete mode 100644 tests/data/reader/vba+comments.xlsm delete mode 100644 tests/data/reader/vba-comments-saved.xlsm delete mode 100644 tests/data/reader/vba-test.xlsm rename tests/data/{writer/expected => shared_strings}/sharedStrings.xml (100%) rename tests/data/{reader => }/styles/alignment_styles.xml (100%) rename tests/data/{reader => }/styles/complex-styles.xml (100%) rename tests/data/{reader => }/styles/dxf_style.xml (100%) rename tests/data/{reader => }/styles/empty-workbook-styles.xml (100%) rename tests/data/{reader => }/styles/no_number_format.xml (100%) rename tests/data/{reader => }/styles/none_value_styles.xml (100%) rename tests/data/{reader => }/styles/rgb_colors.xml (100%) mode change 100755 => 100644 rename tests/data/{writer/expected => styles}/simple-styles.xml (100%) rename tests/data/{writer/expected => styles}/styles.xml (100%) rename tests/data/{reader => }/styles/styles_number_formats.xml (100%) rename tests/data/{writer/expected => theme}/theme1.xml (100%) rename tests/data/{reader => workbook}/bug328_hyperlinks.xml (100%) rename tests/data/{writer/expected => workbook}/workbook.xml (100%) rename tests/data/{writer/expected => workbook}/workbook_auto_filter.xml (100%) rename tests/data/{writer/expected => workbook_rels}/workbook.xml.rels (100%) rename tests/data/{reader => worksheets}/bug393-worksheet.xml (100%) rename tests/data/{writer/expected => worksheets}/decimal.xml (100%) rename tests/data/{reader => worksheets}/empty_rows.xml (100%) rename tests/data/{writer/expected => worksheets}/long_number.xml (100%) rename tests/data/{reader => worksheets}/merged-ranges.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_auto_filter.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_auto_filter_filter_column.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_auto_filter_sort_condition.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_bool.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_formula.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_freeze_panes_both.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_freeze_panes_horiz.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_freeze_panes_vert.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_height.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_hyperlink.xml (100%) rename tests/data/{writer/expected => worksheets}/sheet1_hyperlink.xml.rels (100%) rename tests/data/{writer/expected => worksheets}/sheet1_style.xml (100%) rename tests/data/{reader => worksheets}/sheet2.xml (100%) rename tests/data/{reader => worksheets}/sheet2_invalid_dimension.xml (100%) rename tests/data/{reader => worksheets}/sheet2_no_dimension.xml (100%) rename tests/data/{reader => worksheets}/sheet2_no_span.xml (100%) rename tests/data/{writer/expected => worksheets}/short_number.xml (100%) rename tests/data/{reader => worksheets}/worksheet_formula.xml (100%) rename tests/data/{reader/styles => worksheets}/worksheet_unprotected_style.xml (100%) delete mode 100644 tests/data/writer/Content_types_vba.xml delete mode 100644 tests/data/writer/expected/app.xml delete mode 100644 tests/data/writer/expected/font.xml delete mode 100644 tests/data/writer/font.xml delete mode 100644 tests/data/writer/styles.xml rename tests/data/{1_empty.txt => xlsx/1_blank.xlsx} (100%) create mode 100644 tests/data/xlsx/2_text.xlsx rename tests/data/{3_empty.zip => xlsx/3_empty-zip.xlsx} (100%) create mode 100644 tests/data/xlsx/4_not-package.xlsx rename tests/data/{5_visio.vsdx => xlsx/5_visio.xlsx} (100%) rename tests/data/{6_document.docx => xlsx/6_document.xlsx} (100%) rename tests/data/{7_presentation.pptx => xlsx/7_presentation.xlsx} (100%) rename tests/data/{8_excel-empty.xlsx => xlsx/8_default-excel.xlsx} (100%) create mode 100644 tests/data/xlsx/9_default-libre-office.xlsx diff --git a/include/xlnt/packaging/manifest.hpp b/include/xlnt/packaging/manifest.hpp index 82ae89c8..5e7659a7 100644 --- a/include/xlnt/packaging/manifest.hpp +++ b/include/xlnt/packaging/manifest.hpp @@ -115,106 +115,82 @@ public: /// bool has_package_relationship(relationship::type type) const; + /// + /// Returns true if the manifest contains a package relationship with the given id. + /// + bool has_package_relationship(const std::string &rel_id) const; + /// /// Returns true if the manifest contains a relationship with the given type with part as the source. /// bool has_part_relationship(const path &part, relationship::type type) const; + /// + /// Returns true if the manifest contains a relationship with the given type with part as the source. + /// + bool has_part_relationship(const path &part, const std::string &rel_id) const; + relationship get_package_relationship(relationship::type type) const; + relationship get_package_relationship(const std::string &rel_id) const; + + std::vector get_package_relationships() const; + std::vector get_package_relationships(relationship::type type) const; relationship get_part_relationship(const path &part, relationship::type type) const; + relationship get_part_relationship(const path &part, const std::string &rel_id) const; + + std::vector get_part_relationships(const path &part) const; + std::vector get_part_relationships(const path &part, relationship::type type) const; /// /// Given the path to a part, returns the content type of the part as /// a content_type enum value or content_type::unknown if it isn't known. /// - content_type get_part_content_type(const path &part) const; + content_type get_content_type(const path &part) const; /// /// Given the path to a part, returns the content type of the part as a string. /// - std::string get_part_content_type_string(const path &part) const; + std::string get_content_type_string(const path &part) const; - /// - /// Registers a part of the given type at the standard path and creates a - /// relationship with the new part as a target of "source". The type of the - /// relationship is inferred based on the provided types. - /// - void register_part(const path &part, const path &parent, const std::string &content_type, relationship::type relation); - - /// - /// - /// - void register_part(const path &parent, const relationship &rel, const std::string &content_type); - - /// - /// Registers a package part of the given type at the standard path and creates a - /// relationship with the package root as the source. The type of the - /// relationship is inferred based on the provided type. - /// - void register_package_part(const path &part, const std::string &content_type, relationship::type relation); + void register_override_type(const path &part, const std::string &content_type); /// /// Unregisters the path of the part of the given type and removes all relationships /// with the part as a source or target. /// - void unregister_part(const path &part); + void unregister_override_type(const path &part); /// /// Returns true if the part at the given path has been registered in this manifest. /// - bool has_part(const path &part) const; + bool has_override_type(const path &part) const; - /// - /// Returns the path of every registered part in this manifest. - /// - std::vector get_parts() const; - - /// - /// Returns every registered relationship with the package root as the source. - /// - std::vector get_package_relationships() const; - - /// - /// Returns the package relationship with the given ID. - /// - relationship get_package_relationship(const std::string &rel_id); - - /// - /// Returns every registered relationship with the part of the given type - /// as the source. - /// - std::vector get_part_relationships(const path &part) const; - - /// - /// Returns the registered relationship with the part of the given type - /// as the source and the ID matching the provided ID. - /// - relationship get_part_relationship(const path &part, const std::string &rel_id) const; + std::vector get_overriden_parts() const; /// /// /// - std::string register_external_package_relationship(relationship::type type, const std::string &target_uri); + std::string register_package_relationship(relationship::type type, const path &target_uri, target_mode mode); /// /// /// - std::string register_external_package_relationship(relationship::type type, const std::string &target_uri, const std::string &rel_id); + std::string register_package_relationship(relationship::type type, const path &target_uri, target_mode mode, const std::string &rel_id); /// /// /// - std::string register_external_relationship(const path &source_part, relationship::type type, const std::string &target_uri); + std::string register_part_relationship(const path &source_uri, relationship::type type, const path &target_uri, target_mode mode); /// /// /// - std::string register_external_relationship(const path &source_part, relationship::type type, const std::string &target_uri, const std::string &rel_id); + std::string register_part_relationship(const path &source_uri, relationship::type type, const path &target_uri, target_mode mode, const std::string &rel_id); /// /// Returns true if a default content type for the extension has been registered. @@ -226,6 +202,8 @@ public: /// std::vector get_default_type_extensions() const; + std::vector get_parts_with_relationships() const; + /// /// Returns the registered default content type for parts of the given extension. /// @@ -248,7 +226,7 @@ private: std::vector relationships; }; - std::string next_package_relationship_id() const;\ + std::string next_package_relationship_id() const; std::string next_relationship_id(const path &part) const; diff --git a/include/xlnt/packaging/relationship.hpp b/include/xlnt/packaging/relationship.hpp index e60dc560..05c88e08 100644 --- a/include/xlnt/packaging/relationship.hpp +++ b/include/xlnt/packaging/relationship.hpp @@ -85,7 +85,6 @@ enum class XLNT_CLASS relationship_type styles, table_definition, volatile_dependencies, - workbook, worksheet, hyperlink, diff --git a/include/xlnt/workbook/workbook.hpp b/include/xlnt/workbook/workbook.hpp index b7acd4fd..9858e0f0 100644 --- a/include/xlnt/workbook/workbook.hpp +++ b/include/xlnt/workbook/workbook.hpp @@ -373,10 +373,10 @@ public: // serialization - void save(std::vector &data); - void save(const std::string &filename); - void save(const xlnt::path &filename); - void save(std::ostream &stream); + void save(std::vector &data) const; + void save(const std::string &filename) const; + void save(const xlnt::path &filename) const; + void save(std::ostream &stream) const; void load(const std::vector &data); void load(const std::string &filename); @@ -423,7 +423,8 @@ public: // thumbnail - void set_thumbnail(const std::vector &thumbnail); + void set_thumbnail(const std::vector &thumbnail, + const std::string &extension, const std::string &content_type); const std::vector &get_thumbnail() const; // operators diff --git a/source/cell/cell.cpp b/source/cell/cell.cpp index 39a95e6c..9815afb2 100644 --- a/source/cell/cell.cpp +++ b/source/cell/cell.cpp @@ -77,41 +77,63 @@ std::pair cast_time(const std::string &s) { xlnt::time result; - try + std::vector time_components; + std::size_t prev = 0; + auto colon_index = s.find(':'); + + while (colon_index != std::string::npos) { - auto last_colon = s.find_last_of(':'); - if (last_colon == std::string::npos) return{ false, result }; - double seconds = std::stod(s.substr(last_colon + 1)); - result.second = static_cast(seconds); - result.microsecond = static_cast((seconds - static_cast(result.second)) * 1e6); - - auto first_colon = s.find_first_of(':'); - - if (first_colon == last_colon) - { - auto decimal_pos = s.find('.'); - if (decimal_pos != std::string::npos) - { - result.minute = std::stoi(s.substr(0, first_colon)); - } - else - { - result.hour = std::stoi(s.substr(0, first_colon)); - result.minute = result.second; - result.second = 0; - } - } - else - { - result.hour = std::stoi(s.substr(0, first_colon)); - result.minute = std::stoi(s.substr(first_colon + 1, last_colon - first_colon - 1)); - } + time_components.push_back(s.substr(prev, colon_index - prev)); + prev = colon_index + 1; + colon_index = s.find(':', colon_index + 1); } - catch (std::invalid_argument) + + time_components.push_back(s.substr(prev, colon_index - prev)); + + if (time_components.size() < 2 || time_components.size() > 3) { return{ false, result }; } + std::vector numeric_components; + + for (auto component : time_components) + { + if (component.empty() || (component.substr(0, component.find('.')).size() > 2)) + { + return{ false, result }; + } + + for (auto d : component) + { + if (!(d >= '0' && d <= '9') && d != '.') + { + return{ false, result }; + } + } + + auto without_leading_zero = component.front() == '0' ? component.substr(1) : component; + auto numeric = std::stod(without_leading_zero); + + numeric_components.push_back(numeric); + } + + result.hour = static_cast(numeric_components[0]); + result.minute = static_cast(numeric_components[1]); + + if (result.minute != numeric_components[1]) + { + result.minute = result.hour; + result.hour = 0; + result.second = static_cast(numeric_components[1]); + result.microsecond = static_cast((numeric_components[1] - result.second) * 1E6); + } + else if (numeric_components.size() > 2) + { + result.second = static_cast(numeric_components[2]); + result.microsecond = static_cast((numeric_components[2] - result.second) * 1E6); + } + return{ true, result }; } @@ -453,9 +475,9 @@ void cell::set_hyperlink(const std::string &hyperlink) void cell::set_formula(const std::string &formula) { - if (formula.length() == 0) + if (formula.empty()) { - throw invalid_data_type(); + throw invalid_parameter(); } if (formula[0] == '=') @@ -477,7 +499,7 @@ std::string cell::get_formula() const { if (d_->formula_.empty()) { - throw invalid_data_type(); + throw invalid_attribute(); } return d_->formula_; diff --git a/source/cell/tests/test_cell.hpp b/source/cell/tests/test_cell.hpp index 211ebc47..d625956b 100644 --- a/source/cell/tests/test_cell.hpp +++ b/source/cell/tests/test_cell.hpp @@ -139,8 +139,8 @@ public: auto cell = ws.get_cell(xlnt::cell_reference(1, 1)); TS_ASSERT(!cell.has_formula()); - TS_ASSERT_THROWS(cell.set_formula(""), std::runtime_error); - TS_ASSERT_THROWS(cell.get_formula(), std::runtime_error); + TS_ASSERT_THROWS(cell.set_formula(""), xlnt::invalid_parameter); + TS_ASSERT_THROWS(cell.get_formula(), xlnt::invalid_attribute); cell.set_formula("=42"); TS_ASSERT(cell.has_formula()); TS_ASSERT_EQUALS(cell.get_formula(), "42"); diff --git a/source/detail/stylesheet.hpp b/source/detail/stylesheet.hpp index 820f491c..b2697844 100644 --- a/source/detail/stylesheet.hpp +++ b/source/detail/stylesheet.hpp @@ -37,7 +37,7 @@ namespace { template -std::size_t search_vector(const std::vector &items, const T &to_find) +std::size_t index(const std::vector &items, const T &to_find) { auto match = std::find(items.begin(), items.end(), to_find); @@ -49,6 +49,13 @@ std::size_t search_vector(const std::vector &items, const T &to_find) return std::distance(items.begin(), match); } +template +bool contains(const std::vector &items, const T &to_find) +{ + auto match = std::find(items.begin(), items.end(), to_find); + return match != items.end(); +} + } // namespace namespace xlnt { @@ -58,7 +65,10 @@ struct stylesheet { ~stylesheet() {} - std::size_t index(const format &f) { return search_vector(formats, f); } + std::size_t index(const format &f) + { + return ::index(formats, f); + } std::size_t index(const std::string &style_name) { @@ -72,11 +82,6 @@ struct stylesheet return std::distance(styles.begin(), match); } - - std::size_t index(const border &b) { return search_vector(borders, b); } - std::size_t index(const fill &f) { return search_vector(fills, f); } - std::size_t index(const font &f) { return search_vector(fonts, f); } - std::size_t index(const number_format &f) { return search_vector(number_formats, f); } std::size_t add_format(const format &f) { @@ -97,43 +102,24 @@ struct stylesheet formats.push_back(f); format_styles.push_back("Normal"); - try - { - search_vector(borders, f.get_border()); - } - catch(std::out_of_range) + if (!contains(borders, f.get_border())) { borders.push_back(f.get_border()); } - try - { - search_vector(fills, f.get_fill()); - } - catch(std::out_of_range) - { - fills.push_back(f.get_fill()); - } + if (!contains(fills, f.get_fill())) + { + fills.push_back(f.get_fill()); + } + + if (!contains(fonts, f.get_font())) + { + fonts.push_back(f.get_font()); + } - try + if (f.get_number_format().get_id() >= 164 && !contains(number_formats, f.get_number_format())) { - search_vector(fonts, f.get_font()); - } - catch(std::out_of_range) - { - fonts.push_back(f.get_font()); - } - - if (f.get_number_format().get_id() >= 164) - { - try - { - search_vector(number_formats, f.get_number_format()); - } - catch(std::out_of_range) - { - number_formats.push_back(f.get_number_format()); - } + number_formats.push_back(f.get_number_format()); } return formats.size() - 1; diff --git a/source/detail/workbook_impl.hpp b/source/detail/workbook_impl.hpp index 34f3dcac..7379a1af 100644 --- a/source/detail/workbook_impl.hpp +++ b/source/detail/workbook_impl.hpp @@ -22,8 +22,9 @@ // @author: see AUTHORS file #pragma once -#include #include +#include +#include #include #include @@ -92,7 +93,8 @@ struct workbook_impl links_up_to_date_(other.links_up_to_date_), shared_doc_(other.shared_doc_), hyperlinks_changed_(other.hyperlinks_changed_), - app_version_(other.app_version_) + app_version_(other.app_version_), + sheet_title_rel_id_map_(other.sheet_title_rel_id_map_) { } @@ -131,6 +133,8 @@ struct workbook_impl hyperlinks_changed_ = other.hyperlinks_changed_; app_version_ = other.app_version_; + sheet_title_rel_id_map_ = other.sheet_title_rel_id_map_; + return *this; } @@ -173,6 +177,8 @@ struct workbook_impl bool shared_doc_; bool hyperlinks_changed_; std::string app_version_; + + std::unordered_map sheet_title_rel_id_map_; }; } // namespace detail diff --git a/source/detail/xlsx_consumer.cpp b/source/detail/xlsx_consumer.cpp index 7bb2087c..45c9165b 100644 --- a/source/detail/xlsx_consumer.cpp +++ b/source/detail/xlsx_consumer.cpp @@ -708,18 +708,21 @@ xlsx_consumer::xlsx_consumer(workbook &destination) : destination_(destination) void xlsx_consumer::read(const path &source) { + destination_.clear(); source_.load(source); populate_workbook(); } void xlsx_consumer::read(std::istream &source) { + destination_.clear(); source_.load(source); populate_workbook(); } void xlsx_consumer::read(const std::vector &source) { + destination_.clear(); source_.load(source); populate_workbook(); } @@ -729,10 +732,8 @@ void xlsx_consumer::read(const std::vector &source) void xlsx_consumer::populate_workbook() { auto &manifest = destination_.get_manifest(); - manifest.clear(); - destination_.d_->worksheets_.clear(); - read_manifest(); + path workbook_part; for (const auto &rel : manifest.get_package_relationships()) { @@ -751,13 +752,14 @@ void xlsx_consumer::populate_workbook() read_custom_property(document.root()); break; case relationship::type::office_document: - check_document_type(manifest.get_part_content_type_string(rel.get_target_uri())); + check_document_type(manifest.get_content_type_string(rel.get_target_uri())); + workbook_part = rel.get_target_uri(); read_workbook(document.root()); break; } } - for (const auto &rel : manifest.get_part_relationships(constants::part_workbook())) + for (const auto &rel : manifest.get_part_relationships(workbook_part)) { pugi::xml_document document; document.load_string(source_.read(path(rel.get_target_uri())).c_str()); @@ -767,18 +769,12 @@ void xlsx_consumer::populate_workbook() case relationship::type::calculation_chain: read_calculation_chain(document.root()); break; - case relationship::type::chartsheet: - read_chartsheet(document.root(), rel.get_id()); - break; case relationship::type::connections: read_connections(document.root()); break; case relationship::type::custom_xml_mappings: read_custom_xml_mappings(document.root()); break; - case relationship::type::dialogsheet: - read_dialogsheet(document.root(), rel.get_id()); - break; case relationship::type::external_workbook_references: read_external_workbook_references(document.root()); break; @@ -795,7 +791,7 @@ void xlsx_consumer::populate_workbook() read_shared_workbook_revision_headers(document.root()); break; case relationship::type::styles: - read_styles(document.root()); + read_stylesheet(document.root()); break; case relationship::type::theme: read_theme(document.root()); @@ -803,6 +799,22 @@ void xlsx_consumer::populate_workbook() case relationship::type::volatile_dependencies: read_volatile_dependencies(document.root()); break; + } + } + + for (const auto &rel : manifest.get_part_relationships(workbook_part)) + { + pugi::xml_document document; + document.load_string(source_.read(path(rel.get_target_uri())).c_str()); + + switch (rel.get_type()) + { + case relationship::type::chartsheet: + read_chartsheet(document.root(), rel.get_id()); + break; + case relationship::type::dialogsheet: + read_dialogsheet(document.root(), rel.get_id()); + break; case relationship::type::worksheet: read_worksheet(document.root(), rel.get_id()); break; @@ -818,38 +830,15 @@ void xlsx_consumer::populate_workbook() void read_unknown_parts(); void read_unknown_relationships(); - - auto current_iter = destination_.d_->worksheets_.begin(); - for (std::size_t current_index = 0; current_index < destination_.get_sheet_titles().size(); ++current_index) - { - auto current_id = current_iter->id_; - - for (const auto j : worksheet_rel_title_id_index_map_) - { - if (std::get<1>(j.second) == current_id) - { - if (std::get<2>(j.second) == current_index) break; - - auto switch_iter = destination_.d_->worksheets_.begin(); - - for (std::size_t k = 0; k < std::get<2>(j.second); ++k) - { - ++switch_iter; - } - - std::swap(*switch_iter, *current_iter); - } - } - - ++current_iter; - } } // Package Parts void xlsx_consumer::read_manifest() { - auto package_rels = read_relationships(path("_rels/.rels"), source_); + path package_rels_path("_rels/.rels"); + if (!source_.has_file(package_rels_path)) throw invalid_file("missing package rels"); + auto package_rels = read_relationships(package_rels_path, source_); pugi::xml_document document; document.load_string(source_.read(path("[Content_Types].xml")).c_str()); @@ -857,8 +846,6 @@ void xlsx_consumer::read_manifest() const auto root_node = document.child("Types"); auto &manifest = destination_.get_manifest(); - std::unordered_map> part_types; - auto make_relative = [](const path &p) { path copy; @@ -881,30 +868,32 @@ void xlsx_consumer::read_manifest() else if (child.name() == std::string("Override")) { path part(child.attribute("PartName").value()); - part_types[make_relative(part)] = child.attribute("ContentType").value(); + manifest.register_override_type(part, child.attribute("ContentType").value()); } } for (const auto &package_rel : package_rels) { - manifest.register_package_part(package_rel.get_target_uri(), - part_types.at(package_rel.get_target_uri()), package_rel.get_type()); + manifest.register_package_relationship(package_rel.get_type(), + package_rel.get_target_uri(), + package_rel.get_target_mode(), + package_rel.get_id()); } - for (const auto &relationship_source : part_types) + for (const auto &relationship_source : source_.infolist()) { - auto rels_name = relationship_source.first.parent() - .append("_rels") - .append(relationship_source.first.basename() + ".rels"); - auto part_rels = read_relationships(rels_name, source_); + if (relationship_source.filename == path("_rels/.rels") + || relationship_source.filename.extension() != ".rels") continue; - if (part_rels.empty()) continue; + auto part_rels = read_relationships(relationship_source.filename, source_); + auto source_uri = relationship_source.filename.parent().parent() + .append(relationship_source.filename.basename()); for (const auto part_rel : part_rels) { - auto part = relationship_source.first.parent().append(part_rel.get_target_uri()); - relationship new_part_rel(part_rel.get_id(), part_rel.get_type(), part, target_mode::internal); - manifest.register_part(relationship_source.first, new_part_rel, part_types.at(part)); + auto part = source_uri; + manifest.register_part_relationship(source_uri, part_rel.get_type(), + part_rel.get_target_uri(), part_rel.get_target_mode(), part_rel.get_id()); } } } @@ -965,14 +954,16 @@ void xlsx_consumer::read_workbook(const pugi::xml_node root) } } + std::size_t index = 0; for (auto sheet_node : workbook_node.child("sheets").children("sheet")) { std::string rel_id(sheet_node.attribute("r:id").value()); std::string title(sheet_node.attribute("name").value()); auto id = string_to_size_t(sheet_node.attribute("sheetId").value()); - worksheet_rel_title_id_index_map_[rel_id] = - { title, id, worksheet_rel_title_id_index_map_.size() }; + sheet_title_id_map_[rel_id] = id; + sheet_title_index_map_[rel_id] = index++; + destination_.d_->sheet_title_rel_id_map_[title] = rel_id; } } @@ -1135,21 +1126,18 @@ void xlsx_consumer::read_shared_workbook_user_data(const pugi::xml_node root) auto root_node = document.append_child("users"); } -void xlsx_consumer::read_styles(const pugi::xml_node root) +void xlsx_consumer::read_stylesheet(const pugi::xml_node root) { - pugi::xml_document document; - - auto stylesheet_node = document.child("styleSheet"); - + auto stylesheet_node = root.child("styleSheet"); auto &stylesheet = destination_.impl().stylesheet_; - ::read_borders(stylesheet_node.child("borders"), stylesheet.borders); - ::read_fills(stylesheet_node.child("fills"), stylesheet.fills); - ::read_fonts(stylesheet_node.child("fonts"), stylesheet.fonts); - ::read_number_formats(stylesheet_node.child("numFmts"), stylesheet.number_formats); - ::read_colors(stylesheet_node.child("colors"), stylesheet.colors); - ::read_styles(stylesheet_node.child("cellStyles"), stylesheet_node.child("cellStyleXfs"), stylesheet, stylesheet.styles, stylesheet.style_name_map); - ::read_formats(stylesheet_node.child("cellXfs"), stylesheet, stylesheet.formats, stylesheet.format_styles); + read_borders(stylesheet_node.child("borders"), stylesheet.borders); + read_fills(stylesheet_node.child("fills"), stylesheet.fills); + read_fonts(stylesheet_node.child("fonts"), stylesheet.fonts); + read_number_formats(stylesheet_node.child("numFmts"), stylesheet.number_formats); + read_colors(stylesheet_node.child("colors"), stylesheet.colors); + read_styles(stylesheet_node.child("cellStyles"), stylesheet_node.child("cellStyleXfs"), stylesheet, stylesheet.styles, stylesheet.style_name_map); + read_formats(stylesheet_node.child("cellXfs"), stylesheet, stylesheet.formats, stylesheet.format_styles); } void xlsx_consumer::read_theme(const pugi::xml_node root) @@ -1167,10 +1155,24 @@ void xlsx_consumer::read_volatile_dependencies(const pugi::xml_node root) void xlsx_consumer::read_worksheet(const pugi::xml_node root, const std::string &rel_id) { - auto title = std::get<0>(worksheet_rel_title_id_index_map_[rel_id]); - auto id = std::get<1>(worksheet_rel_title_id_index_map_[rel_id]); + auto title = std::find_if(destination_.d_->sheet_title_rel_id_map_.begin(), + destination_.d_->sheet_title_rel_id_map_.end(), + [&](const std::pair &p) + { + return p.second == rel_id; + })->first; - destination_.d_->worksheets_.emplace_back(&destination_, id, title); + auto id = sheet_title_id_map_[title]; + auto index = sheet_title_index_map_[title]; + + auto insertion_iter = destination_.d_->worksheets_.begin(); + while (insertion_iter != destination_.d_->worksheets_.end() + && sheet_title_index_map_[insertion_iter->title_] < index) + { + ++insertion_iter; + } + + destination_.d_->worksheets_.emplace(insertion_iter, &destination_, id, title); auto ws = destination_.get_sheet_by_id(id); diff --git a/source/detail/xlsx_consumer.hpp b/source/detail/xlsx_consumer.hpp index a6bd31ee..bd8c4adf 100644 --- a/source/detail/xlsx_consumer.hpp +++ b/source/detail/xlsx_consumer.hpp @@ -86,7 +86,7 @@ private: void read_shared_workbook_revision_headers(const pugi::xml_node root); void read_shared_workbook(const pugi::xml_node root); void read_shared_workbook_user_data(const pugi::xml_node root); - void read_styles(const pugi::xml_node root); + void read_stylesheet(const pugi::xml_node root); void read_theme(const pugi::xml_node root); void read_volatile_dependencies(const pugi::xml_node root); @@ -110,11 +110,8 @@ private: /// zip_file source_; - /// - /// Worksheet titles from workbook.xml are saved here so we know what its - /// title is when readind the associated worksheet XML. - /// - std::unordered_map> worksheet_rel_title_id_index_map_; + std::unordered_map sheet_title_id_map_; + std::unordered_map sheet_title_index_map_; /// /// A reference to the workbook which is being read. diff --git a/source/detail/xlsx_producer.cpp b/source/detail/xlsx_producer.cpp index 0b72328f..05f90532 100644 --- a/source/detail/xlsx_producer.cpp +++ b/source/detail/xlsx_producer.cpp @@ -180,14 +180,14 @@ std::string to_string(xlnt::horizontal_alignment horizontal_alignment) } } -void write_relationships(const std::vector &relationships, pugi::xml_document &document) +void write_relationships(const std::vector &relationships, pugi::xml_node root) { - auto root_node = document.append_child("Relationships"); - root_node.append_attribute("xmlns").set_value(xlnt::constants::get_namespace("relationships").c_str()); + auto relationships_node = root.append_child("Relationships"); + relationships_node.append_attribute("xmlns").set_value(xlnt::constants::get_namespace("relationships").c_str()); for (const auto &relationship : relationships) { - auto relationship_node = root_node.append_child("Relationship"); + auto relationship_node = relationships_node.append_child("Relationship"); relationship_node.append_attribute("Id").set_value(relationship.get_id().c_str()); relationship_node.append_attribute("Type").set_value(to_string(relationship.get_type()).c_str()); @@ -565,104 +565,113 @@ xlsx_producer::xlsx_producer(const workbook &target) : source_(target) void xlsx_producer::write(const path &destination) { - xlnt::zip_file archive; - populate_archive(destination_); - archive.save(destination); + populate_archive(); + destination_.save(destination); } void xlsx_producer::write(std::ostream &destination) { - xlnt::zip_file archive; - populate_archive(destination_); - archive.save(destination); + populate_archive(); + destination_.save(destination); } void xlsx_producer::write(std::vector &destination) { - xlnt::zip_file archive; - populate_archive(destination_); - archive.save(destination); + populate_archive(); + destination_.save(destination); } // Part Writing Methods -void xlsx_producer::populate_archive(zip_file &destination_) +void xlsx_producer::populate_archive() { - write_package_relationships(); - write_content_types(); - write_workbook(); - write_workbook_relationships(); + write_manifest(); + path workbook_part; for (auto &rel : source_.impl().manifest_.get_package_relationships()) { + pugi::xml_document document; + switch (rel.get_type()) { case relationship::type::core_properties: - write_core_properties(); + write_core_properties(document.root()); break; case relationship::type::extended_properties: - write_app_properties(); + write_extended_properties(document.root()); break; case relationship::type::custom_properties: - write_custom_property(); + write_custom_properties(document.root()); break; + case relationship::type::office_document: + write_workbook(document.root()); + workbook_part = rel.get_target_uri(); + break; + case relationship::type::thumbnail: + destination_.write_string( + std::string(source_.get_thumbnail().begin(), source_.get_thumbnail().end()), + rel.get_target_uri()); + continue; } + + write_document_to_archive(document, rel.get_target_uri(), destination_); } - for (auto rel : source_.impl().manifest_.get_part_relationships(constants::part_workbook())) + for (auto rel : source_.impl().manifest_.get_part_relationships(workbook_part)) { + pugi::xml_document document; + switch (rel.get_type()) { case relationship::type::calculation_chain: - write_calculation_chain(); + write_calculation_chain(document.root()); break; case relationship::type::chartsheet: - write_chartsheet(rel); + write_chartsheet(document.root(), rel); break; case relationship::type::connections: - write_connections(); + write_connections(document.root()); break; case relationship::type::custom_xml_mappings: - write_custom_xml_mappings(); + write_custom_xml_mappings(document.root()); break; case relationship::type::dialogsheet: - write_dialogsheet(rel); + write_dialogsheet(document.root(), rel); break; case relationship::type::external_workbook_references: - write_external_workbook_references(); + write_external_workbook_references(document.root()); break; case relationship::type::metadata: - write_metadata(); + write_metadata(document.root()); break; case relationship::type::pivot_table: - write_pivot_table(); + write_pivot_table(document.root()); break; case relationship::type::shared_string_table: - write_shared_string_table(); + write_shared_string_table(document.root()); break; case relationship::type::shared_workbook_revision_headers: - write_shared_workbook_revision_headers(); + write_shared_workbook_revision_headers(document.root()); break; case relationship::type::styles: - write_styles(); + write_styles(document.root()); break; case relationship::type::theme: - write_theme(); + write_theme(document.root()); break; case relationship::type::volatile_dependencies: - write_volatile_dependencies(); + write_volatile_dependencies(document.root()); break; case relationship::type::worksheet: - write_worksheet(rel); + write_worksheet(document.root(), rel); break; } + + std::ostringstream document_stream; + document.save(document_stream); + destination_.write_string(document_stream.str(), rel.get_target_uri()); } - // Sheet Relationship Target Parts - - void write_comments(); - void write_drawings(); - // Unknown Parts void write_unknown_parts(); @@ -671,30 +680,11 @@ void xlsx_producer::populate_archive(zip_file &destination_) // Package Parts -void xlsx_producer::write_package_relationships() +void xlsx_producer::write_manifest() { - pugi::xml_document document; + pugi::xml_document content_types_document; - auto relationships_node = document.append_child("Relationships"); - relationships_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/package/2006/relationships"); - - for (const auto &relationship : source_.impl().manifest_.get_package_relationships()) - { - auto relationship_node = relationships_node.append_child("Relationship"); - - relationship_node.append_attribute("Id").set_value(relationship.get_id().c_str()); - relationship_node.append_attribute("Type").set_value(to_string(relationship.get_type()).c_str()); - relationship_node.append_attribute("Target").set_value(relationship.get_target_uri().to_string('/').c_str()); - } - - write_document_to_archive(document, xlnt::constants::part_root_relationships(), destination_); -} - -void xlsx_producer::write_content_types() -{ - pugi::xml_document document; - - auto types_node = document.append_child("Types"); + auto types_node = content_types_document.append_child("Types"); types_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/package/2006/content-types"); for (const auto &extension : source_.get_manifest().get_default_type_extensions()) @@ -705,44 +695,57 @@ void xlsx_producer::write_content_types() default_node.append_attribute("ContentType").set_value(content_type.c_str()); } - for (const auto &part : source_.get_manifest().get_parts()) + for (const auto &part : source_.get_manifest().get_overriden_parts()) { auto override_node = types_node.append_child("Override"); - override_node.append_attribute("PartName").set_value(part.to_string('/').c_str()); - auto content_type = source_.get_manifest().get_part_content_type_string(part); + override_node.append_attribute("PartName").set_value(("/" + part.to_string('/')).c_str()); + auto content_type = source_.get_manifest().get_content_type_string(part); override_node.append_attribute("ContentType").set_value(content_type.c_str()); } - write_document_to_archive(document, xlnt::constants::part_content_types(), destination_); + for (const auto &part : source_.get_manifest().get_parts_with_relationships()) + { + auto part_rels = source_.get_manifest().get_part_relationships(part); + + pugi::xml_document part_rels_document; + write_relationships(part_rels, part_rels_document.root()); + path rels_path = part.parent().append("_rels").append(part.basename() + ".rels"); + write_document_to_archive(part_rels_document, rels_path, destination_); + } + + write_document_to_archive(content_types_document, path("[Content_Types].xml"), destination_); + + pugi::xml_document package_rels_document; + write_relationships(source_.get_manifest().get_package_relationships(), package_rels_document); + write_document_to_archive(package_rels_document, path("_rels/.rels"), destination_); } -void xlsx_producer::write_app_properties() +void xlsx_producer::write_extended_properties(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("Properties"); + auto properties_node = root.append_child("Properties"); - root_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"); - root_node.append_attribute("xmlns:vt").set_value("http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"); + properties_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"); + properties_node.append_attribute("xmlns:vt").set_value("http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"); - root_node.append_child("Application").text().set(source_.get_application().c_str()); - root_node.append_child("DocSecurity").text().set(std::to_string(source_.get_doc_security()).c_str()); - root_node.append_child("ScaleCrop").text().set(source_.get_scale_crop() ? "true" : "false"); + properties_node.append_child("Application").text().set(source_.get_application().c_str()); + properties_node.append_child("DocSecurity").text().set(std::to_string(source_.get_doc_security()).c_str()); + properties_node.append_child("ScaleCrop").text().set(source_.get_scale_crop() ? "true" : "false"); - auto company_node = root_node.append_child("Company"); + auto company_node = properties_node.append_child("Company"); if (!source_.get_company().empty()) { company_node.text().set(source_.get_company().c_str()); } - root_node.append_child("LinksUpToDate").text().set(source_.links_up_to_date() ? "true" : "false"); - root_node.append_child("SharedDoc").text().set(source_.is_shared_doc() ? "true" : "false"); - root_node.append_child("HyperlinksChanged").text().set(source_.hyperlinks_changed() ? "true" : "false"); - root_node.append_child("AppVersion").text().set(source_.get_app_version().c_str()); + properties_node.append_child("LinksUpToDate").text().set(source_.links_up_to_date() ? "true" : "false"); + properties_node.append_child("SharedDoc").text().set(source_.is_shared_doc() ? "true" : "false"); + properties_node.append_child("HyperlinksChanged").text().set(source_.hyperlinks_changed() ? "true" : "false"); + properties_node.append_child("AppVersion").text().set(source_.get_app_version().c_str()); // TODO what is this stuff? - auto heading_pairs_node = root_node.append_child("HeadingPairs"); + auto heading_pairs_node = properties_node.append_child("HeadingPairs"); auto heading_pairs_vector_node = heading_pairs_node.append_child("vt:vector"); heading_pairs_vector_node.append_attribute("size").set_value("2"); heading_pairs_vector_node.append_attribute("baseType").set_value("variant"); @@ -751,7 +754,7 @@ void xlsx_producer::write_app_properties() .append_child("vt:i4") .text().set(std::to_string(source_.get_sheet_titles().size()).c_str()); - auto titles_of_parts_node = root_node.append_child("TitlesOfParts"); + auto titles_of_parts_node = properties_node.append_child("TitlesOfParts"); auto titles_of_parts_vector_node = titles_of_parts_node.append_child("vt:vector"); titles_of_parts_vector_node.append_attribute("size").set_value(std::to_string(source_.get_sheet_titles().size()).c_str()); titles_of_parts_vector_node.append_attribute("baseType").set_value("lpstr"); @@ -760,49 +763,40 @@ void xlsx_producer::write_app_properties() { titles_of_parts_vector_node.append_child("vt:lpstr").text().set(ws.get_title().c_str()); } - - write_document_to_archive(document, xlnt::constants::part_app(), destination_); } -void xlsx_producer::write_core_properties() +void xlsx_producer::write_core_properties(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("cp:coreProperties"); + auto core_properties_node = root.append_child("cp:coreProperties"); - root_node.append_attribute("xmlns:cp").set_value("http://schemas.openxmlformats.org/package/2006/metadata/core-properties"); - root_node.append_attribute("xmlns:dc").set_value("http://purl.org/dc/elements/1.1/"); - root_node.append_attribute("xmlns:dcmitype").set_value("http://purl.org/dc/dcmitype/"); - root_node.append_attribute("xmlns:dcterms").set_value("http://purl.org/dc/terms/"); - root_node.append_attribute("xmlns:xsi").set_value("http://www.w3.org/2001/XMLSchema-instance"); + core_properties_node.append_attribute("xmlns:cp").set_value("http://schemas.openxmlformats.org/package/2006/metadata/core-properties"); + core_properties_node.append_attribute("xmlns:dc").set_value("http://purl.org/dc/elements/1.1/"); + core_properties_node.append_attribute("xmlns:dcmitype").set_value("http://purl.org/dc/dcmitype/"); + core_properties_node.append_attribute("xmlns:dcterms").set_value("http://purl.org/dc/terms/"); + core_properties_node.append_attribute("xmlns:xsi").set_value("http://www.w3.org/2001/XMLSchema-instance"); - root_node.append_child("dc:creator").text().set(source_.get_creator().c_str()); - root_node.append_child("cp:lastModifiedBy").text().set(source_.get_last_modified_by().c_str()); - root_node.append_child("dcterms:created").text().set(datetime_to_w3cdtf(source_.get_created()).c_str()); - root_node.child("dcterms:created").append_attribute("xsi:type").set_value("dcterms:W3CDTF"); - root_node.append_child("dcterms:modified").text().set(datetime_to_w3cdtf(source_.get_modified()).c_str()); - root_node.child("dcterms:modified").append_attribute("xsi:type").set_value("dcterms:W3CDTF"); - root_node.append_child("dc:title").text().set(source_.get_title().c_str()); - root_node.append_child("dc:description"); - root_node.append_child("dc:subject"); - root_node.append_child("cp:keywords"); - root_node.append_child("cp:category"); - - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + core_properties_node.append_child("dc:creator").text().set(source_.get_creator().c_str()); + core_properties_node.append_child("cp:lastModifiedBy").text().set(source_.get_last_modified_by().c_str()); + core_properties_node.append_child("dcterms:created").text().set(datetime_to_w3cdtf(source_.get_created()).c_str()); + core_properties_node.child("dcterms:created").append_attribute("xsi:type").set_value("dcterms:W3CDTF"); + core_properties_node.append_child("dcterms:modified").text().set(datetime_to_w3cdtf(source_.get_modified()).c_str()); + core_properties_node.child("dcterms:modified").append_attribute("xsi:type").set_value("dcterms:W3CDTF"); + core_properties_node.append_child("dc:title").text().set(source_.get_title().c_str()); + core_properties_node.append_child("dc:description"); + core_properties_node.append_child("dc:subject"); + core_properties_node.append_child("cp:keywords"); + core_properties_node.append_child("cp:category"); } -void xlsx_producer::write_custom_file_properties() +void xlsx_producer::write_custom_properties(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("customFileProperties"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto properties_node = root.append_child("Properties"); } // Write SpreadsheetML-Specific Package Parts -void xlsx_producer::write_workbook() +void xlsx_producer::write_workbook(pugi::xml_node root) { - pugi::xml_document document; - std::size_t num_visible = 0; for (auto ws : source_) @@ -818,23 +812,23 @@ void xlsx_producer::write_workbook() throw xlnt::no_visible_worksheets(); } - auto root_node = document.append_child("workbook"); + auto workbook_node = root.append_child("workbook"); - root_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); - root_node.append_attribute("xmlns:r").set_value("http://schemas.openxmlformats.org/officeDocument/2006/relationships"); + workbook_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + workbook_node.append_attribute("xmlns:r").set_value("http://schemas.openxmlformats.org/officeDocument/2006/relationships"); - auto file_version_node = root_node.append_child("fileVersion"); + auto file_version_node = workbook_node.append_child("fileVersion"); file_version_node.append_attribute("appName").set_value("xl"); file_version_node.append_attribute("lastEdited").set_value("4"); file_version_node.append_attribute("lowestEdited").set_value("4"); file_version_node.append_attribute("rupBuild").set_value("4505"); - auto workbook_pr_node = root_node.append_child("workbookPr"); + auto workbook_pr_node = workbook_node.append_child("workbookPr"); workbook_pr_node.append_attribute("codeName").set_value("ThisWorkbook"); workbook_pr_node.append_attribute("defaultThemeVersion").set_value("124226"); workbook_pr_node.append_attribute("date1904").set_value(source_.get_base_date() == calendar::mac_1904 ? "1" : "0"); - auto book_views_node = root_node.append_child("bookViews"); + auto book_views_node = workbook_node.append_child("bookViews"); auto workbook_view_node = book_views_node.append_child("workbookView"); workbook_view_node.append_attribute("activeTab").set_value("0"); workbook_view_node.append_attribute("autoFilterDateGrouping").set_value("1"); @@ -846,45 +840,41 @@ void xlsx_producer::write_workbook() workbook_view_node.append_attribute("tabRatio").set_value("600"); workbook_view_node.append_attribute("visibility").set_value("visible"); - auto sheets_node = root_node.append_child("sheets"); - auto defined_names_node = root_node.append_child("definedNames"); + auto sheets_node = workbook_node.append_child("sheets"); + auto defined_names_node = workbook_node.append_child("definedNames"); std::size_t index = 1; + auto wb_rel = source_.d_->manifest_.get_package_relationship(xlnt::relationship::type::office_document); + for (const auto ws : source_) { - path target("worksheets/sheet" + std::to_string(index++) + ".xml"); + auto sheet_rel_id = source_.d_->sheet_title_rel_id_map_[ws.get_title()]; + auto sheet_rel = source_.d_->manifest_.get_part_relationship(wb_rel.get_target_uri(), sheet_rel_id); - for (const auto &rel : source_.impl().manifest_.get_part_relationships(constants::part_workbook())) + auto sheet_node = sheets_node.append_child("sheet"); + sheet_node.append_attribute("name").set_value(ws.get_title().c_str()); + sheet_node.append_attribute("sheetId").set_value(std::to_string(ws.get_id()).c_str()); + + if (ws.get_sheet_state() == xlnt::sheet_state::hidden) { - if (rel.get_target_uri().to_string('/') != target.to_string('/')) continue; + sheet_node.append_attribute("state").set_value("hidden"); + } - auto sheet_node = sheets_node.append_child("sheet"); - sheet_node.append_attribute("name").set_value(ws.get_title().c_str()); - sheet_node.append_attribute("sheetId").set_value(std::to_string(ws.get_id()).c_str()); + sheet_node.append_attribute("r:id").set_value(sheet_rel_id.c_str()); - if (ws.get_sheet_state() == xlnt::sheet_state::hidden) - { - sheet_node.append_attribute("state").set_value("hidden"); - } - - sheet_node.append_attribute("r:id").set_value(rel.get_id().c_str()); - - if (ws.has_auto_filter()) - { - auto defined_name_node = defined_names_node.append_child("definedName"); - defined_name_node.append_attribute("name").set_value("_xlnm._FilterDatabase"); - defined_name_node.append_attribute("hidden").set_value("1"); - defined_name_node.append_attribute("localSheetId").set_value("0"); - std::string name = - "'" + ws.get_title() + "'!" + range_reference::make_absolute(ws.get_auto_filter()).to_string(); - defined_name_node.text().set(name.c_str()); - } - - break; + if (ws.has_auto_filter()) + { + auto defined_name_node = defined_names_node.append_child("definedName"); + defined_name_node.append_attribute("name").set_value("_xlnm._FilterDatabase"); + defined_name_node.append_attribute("hidden").set_value("1"); + defined_name_node.append_attribute("localSheetId").set_value("0"); + std::string name = + "'" + ws.get_title() + "'!" + range_reference::make_absolute(ws.get_auto_filter()).to_string(); + defined_name_node.text().set(name.c_str()); } } - auto calc_pr_node = root_node.append_child("calcPr"); + auto calc_pr_node = workbook_node.append_child("calcPr"); calc_pr_node.append_attribute("calcId").set_value("124519"); calc_pr_node.append_attribute("calcMode").set_value("auto"); calc_pr_node.append_attribute("fullCalcOnLoad").set_value("1"); @@ -903,110 +893,68 @@ void xlsx_producer::write_workbook() defined_name_node.text().set(target_string.c_str()); } */ - - write_document_to_archive(document, xlnt::path("workbook.xml"), destination_); -} - -void xlsx_producer::write_workbook_relationships() -{ - pugi::xml_document document; - - auto relationships_node = document.append_child("Relationships"); - relationships_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/package/2006/relationships"); - - auto relationship_node = relationships_node.append_child("Relationship"); - relationship_node.append_attribute("Id").set_value("rId1"); - relationship_node.append_attribute("Type").set_value("http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"); - relationship_node.append_attribute("Target").set_value("sheet1.xml"); - - write_document_to_archive(document, xlnt::path("_rels/workbook.xml.rels"), destination_); } // Write Workbook Relationship Target Parts -void xlsx_producer::write_calculation_chain() +void xlsx_producer::write_calculation_chain(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("calcChain"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto calc_chain_node = root.append_child("calcChain"); } -void xlsx_producer::write_chartsheet(const relationship &rel) +void xlsx_producer::write_chartsheet(pugi::xml_node root, const relationship &rel) { - pugi::xml_document document; - auto root_node = document.append_child("chartsheet"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto chartsheet_node = root.append_child("chartsheet"); } -void xlsx_producer::write_connections() +void xlsx_producer::write_connections(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("connections"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto connections_node = root.append_child("connections"); } -void xlsx_producer::write_custom_property() +void xlsx_producer::write_custom_xml_mappings(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("customProperty"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto map_info_node = root.append_child("MapInfo"); } -void xlsx_producer::write_custom_xml_mappings() +void xlsx_producer::write_dialogsheet(pugi::xml_node root, const relationship &rel) { - pugi::xml_document document; - auto root_node = document.append_child("connections"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto dialogsheet_node = root.append_child("dialogsheet"); } -void xlsx_producer::write_dialogsheet(const relationship &rel) +void xlsx_producer::write_external_workbook_references(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("dialogsheet"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto external_link_node = root.append_child("externalLink"); } -void xlsx_producer::write_external_workbook_references() +void xlsx_producer::write_metadata(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("externalLink"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto metadata_node = root.append_child("metadata"); } -void xlsx_producer::write_metadata() +void xlsx_producer::write_pivot_table(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("metadata"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto pivot_table_definition_node = root.append_child("pivotTableDefinition"); } -void xlsx_producer::write_pivot_table() +void xlsx_producer::write_shared_string_table(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("pivotTableDefinition"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); -} + auto sst_node = root.append_child("sst"); -void xlsx_producer::write_shared_string_table() -{ - pugi::xml_document document; + sst_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); - auto root_node = document.append_child("sst"); - - root_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); - - root_node.append_attribute("count").set_value(std::to_string(source_.get_shared_strings().size()).c_str()); - root_node.append_attribute("uniqueCount").set_value(std::to_string(source_.get_shared_strings().size()).c_str()); + sst_node.append_attribute("count").set_value(std::to_string(source_.get_shared_strings().size()).c_str()); + sst_node.append_attribute("uniqueCount").set_value(std::to_string(source_.get_shared_strings().size()).c_str()); for (const auto &string : source_.get_shared_strings()) { if (string.get_runs().size() == 1 && !string.get_runs().at(0).has_formatting()) { - root_node.append_child("si").append_child("t").text().set(string.get_plain_string().c_str()); + sst_node.append_child("si").append_child("t").text().set(string.get_plain_string().c_str()); } else { - auto string_item_node = root_node.append_child("si"); + auto string_item_node = sst_node.append_child("si"); for (const auto &run : string.get_runs()) { @@ -1047,95 +995,81 @@ void xlsx_producer::write_shared_string_table() } } } - - write_document_to_archive(document, xlnt::constants::part_core(), destination_); } -void xlsx_producer::write_shared_workbook_revision_headers() +void xlsx_producer::write_shared_workbook_revision_headers(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("headers"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto headers_node = root.append_child("headers"); } -void xlsx_producer::write_shared_workbook() +void xlsx_producer::write_shared_workbook(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("revisions"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto revisions_node = root.append_child("revisions"); } -void xlsx_producer::write_shared_workbook_user_data() +void xlsx_producer::write_shared_workbook_user_data(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("users"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto users_node = root.append_child("users"); } -void xlsx_producer::write_styles() +void xlsx_producer::write_styles(pugi::xml_node root) { - pugi::xml_document document; - - auto root_node = document.append_child("styleSheet"); - root_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); - root_node.append_attribute("xmlns:mc").set_value("http://schemas.openxmlformats.org/markup-compatibility/2006"); - root_node.append_attribute("mc:Ignorable").set_value("x14ac"); - root_node.append_attribute("xmlns:x14ac").set_value("http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"); + auto stylesheet_node = root.append_child("styleSheet"); + stylesheet_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + stylesheet_node.append_attribute("xmlns:mc").set_value("http://schemas.openxmlformats.org/markup-compatibility/2006"); + stylesheet_node.append_attribute("mc:Ignorable").set_value("x14ac"); + stylesheet_node.append_attribute("xmlns:x14ac").set_value("http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"); const auto &stylesheet = source_.impl().stylesheet_; if (!stylesheet.number_formats.empty()) { - auto number_formats_node = root_node.append_child("numFmts"); + auto number_formats_node = stylesheet_node.append_child("numFmts"); write_number_formats(stylesheet.number_formats, number_formats_node); } if (!stylesheet.fonts.empty()) { - auto fonts_node = root_node.append_child("fonts"); + auto fonts_node = stylesheet_node.append_child("fonts"); write_fonts(stylesheet.fonts, fonts_node); } if (!stylesheet.fills.empty()) { - auto fills_node = root_node.append_child("fills"); + auto fills_node = stylesheet_node.append_child("fills"); write_fills(stylesheet.fills, fills_node); } if (!stylesheet.borders.empty()) { - auto borders_node = root_node.append_child("borders"); + auto borders_node = stylesheet_node.append_child("borders"); write_borders(stylesheet.borders, borders_node); } - auto cell_style_xfs_node = root_node.append_child("cellStyleXfs"); + auto cell_style_xfs_node = stylesheet_node.append_child("cellStyleXfs"); - auto cell_xfs_node = root_node.append_child("cellXfs"); + auto cell_xfs_node = stylesheet_node.append_child("cellXfs"); write_formats(stylesheet, cell_xfs_node); - auto cell_styles_node = root_node.append_child("cellStyles"); + auto cell_styles_node = stylesheet_node.append_child("cellStyles"); ::write_styles(stylesheet, cell_styles_node, cell_style_xfs_node); - auto dxfs_node = root_node.append_child("dxfs"); + auto dxfs_node = stylesheet_node.append_child("dxfs"); write_dxfs(dxfs_node); - auto table_styles_node = root_node.append_child("tableStyles"); + auto table_styles_node = stylesheet_node.append_child("tableStyles"); write_table_styles(table_styles_node); if (!stylesheet.colors.empty()) { - auto colors_node = root_node.append_child("colors"); + auto colors_node = stylesheet_node.append_child("colors"); write_colors(stylesheet.colors, colors_node); } - - write_document_to_archive(document, xlnt::constants::part_core(), destination_); } -void xlsx_producer::write_theme() +void xlsx_producer::write_theme(pugi::xml_node root) { - pugi::xml_document document; - - auto theme_node = document.append_child("a:theme"); + auto theme_node = root.append_child("a:theme"); theme_node.append_attribute("xmlns:a").set_value(constants::get_namespace("drawingml").c_str()); theme_node.append_attribute("name").set_value("Office Theme"); @@ -1467,191 +1401,16 @@ void xlsx_producer::write_theme() theme_node.append_child("a:objectDefaults"); theme_node.append_child("a:extraClrSchemeLst"); - - write_document_to_archive(document, xlnt::constants::part_core(), destination_); } -void xlsx_producer::write_volatile_dependencies() +void xlsx_producer::write_volatile_dependencies(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("volTypes"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto vol_types_node = root.append_child("volTypes"); } -/* -bool xlsx_producer::read_worksheet(const relationship &rel) +void xlsx_producer::write_worksheet(pugi::xml_node root, const relationship &rel) { - const auto ws = source_.get_active_sheet(); - auto root_node = xml.child("worksheet"); - - auto dimension_node = root_node.child("dimension"); - std::string dimension(dimension_node.attribute("ref").value()); - auto full_range = xlnt::range_reference(dimension); - auto sheet_data_node = root_node.child("sheetData"); - - if (root_node.child("mergeCells")) - { - auto merge_cells_node = root_node.child("mergeCells"); - auto count = std::stoull(merge_cells_node.attribute("count").value()); - - for (auto merge_cell_node : merge_cells_node.children("mergeCell")) - { - sheet_.merge_cells(range_reference(merge_cell_node.attribute("ref").value())); - count--; - } - - if (count != 0) - { - throw std::runtime_error("mismatch between count and actual number of merged cells"); - } - } - - auto &shared_strings = sheet_.get_workbook().get_shared_strings(); - - for (auto row_node : sheet_data_node.children("row")) - { - auto row_index = static_cast(std::stoull(row_node.attribute("r").value())); - - if (row_node.attribute("ht")) - { - sheet_.get_row_properties(row_index).height = std::stold(row_node.attribute("ht").value()); - } - - std::string span_string = row_node.attribute("spans").value(); - auto colon_index = span_string.find(':'); - - column_t min_column = 0; - column_t max_column = 0; - - if (colon_index != std::string::npos) - { - min_column = static_cast(std::stoll(span_string.substr(0, colon_index))); - max_column = static_cast(std::stoll(span_string.substr(colon_index + 1))); - } - else - { - min_column = full_range.get_top_left().get_column_index(); - max_column = full_range.get_bottom_right().get_column_index(); - } - - for (column_t i = min_column; i <= max_column; i++) - { - std::string address = i.column_string() + std::to_string(row_index); - - pugi::xml_node cell_node; - bool cell_found = false; - - for (auto &check_cell_node : row_node.children("c")) - { - if (check_cell_node.attribute("r") && check_cell_node.attribute("r").value() == address) - { - cell_node = check_cell_node; - cell_found = true; - break; - } - } - - if (cell_found) - { - bool has_value = cell_node.child("v") != nullptr; - std::string value_string = has_value ? cell_node.child("v").text().get() : ""; - - bool has_type = cell_node.attribute("t") != nullptr; - std::string type = has_type ? cell_node.attribute("t").value() : ""; - - bool has_format = cell_node.attribute("s") != nullptr; - auto format_id = static_cast(has_format ? std::stoull(cell_node.attribute("s").value()) : 0LL); - - bool has_formula = cell_node.child("f") != nullptr; - bool has_shared_formula = has_formula && cell_node.child("f").attribute("t") != nullptr - && cell_node.child("f").attribute("t").value() == std::string("shared"); - - auto cell = sheet_.get_cell(address); - - if (has_formula && !has_shared_formula && !sheet_.get_workbook().get_data_only()) - { - std::string formula = cell_node.child("f").text().get(); - cell.set_formula(formula); - } - - if (has_type && type == "inlineStr") // inline string - { - std::string inline_string = cell_node.child("is").child("t").text().get(); - cell.set_value(inline_string); - } - else if (has_type && type == "s" && !has_formula) // shared string - { - auto shared_string_index = static_cast(std::stoull(value_string)); - auto shared_string = shared_strings.at(shared_string_index); - cell.set_value(shared_string); - } - else if (has_type && type == "b") // boolean - { - cell.set_value(value_string != "0"); - } - else if (has_type && type == "str") - { - cell.set_value(value_string); - } - else if (has_value && !value_string.empty()) - { - if (!value_string.empty() && value_string[0] == '#') - { - cell.set_error(value_string); - } - else - { - cell.set_value(std::stold(value_string)); - } - } - - if (has_format) - { - cell.set_format(stylesheet.formats.at(format_id)); - } - } - } - } - - auto cols_node = root_node.child("cols"); - - for (auto col_node : cols_node.children("col")) - { - auto min = static_cast(std::stoull(col_node.attribute("min").value())); - auto max = static_cast(std::stoull(col_node.attribute("max").value())); - auto width = std::stold(col_node.attribute("width").value()); - bool custom = col_node.attribute("customWidth").value() == std::string("1"); - auto column_style = static_cast(col_node.attribute("style") ? std::stoull(col_node.attribute("style").value()) : 0); - - for (auto column = min; column <= max; column++) - { - if (!sheet_.has_column_properties(column)) - { - sheet_.add_column_properties(column, column_properties()); - } - - sheet_.get_column_properties(min).width = width; - sheet_.get_column_properties(min).style = column_style; - sheet_.get_column_properties(min).custom = custom; - } - } - - if (root_node.child("autoFilter")) - { - auto auto_filter_node = root_node.child("autoFilter"); - xlnt::range_reference ref(auto_filter_node.attribute("ref").value()); - sheet_.auto_filter(ref); - } - - return true; -} -*/ - -void xlsx_producer::write_worksheet(const relationship &rel) -{ - pugi::xml_document document; - - auto worksheet_node = document.append_child("worksheet"); + auto worksheet_node = root.append_child("worksheet"); worksheet_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); worksheet_node.append_attribute("xmlns:r").set_value("http://schemas.openxmlformats.org/package/2006/relationships"); @@ -1661,7 +1420,14 @@ void xlsx_producer::write_worksheet(const relationship &rel) outline_pr_node.append_attribute("summaryBelow").set_value("1"); outline_pr_node.append_attribute("summaryRight").set_value("1"); - auto ws = source_.get_sheet_by_index(0); + auto title = std::find_if(source_.d_->sheet_title_rel_id_map_.begin(), + source_.d_->sheet_title_rel_id_map_.end(), + [&](const std::pair &p) + { + return p.second == rel.get_id(); + })->first; + + auto ws = source_.get_sheet_by_title(title); if (!ws.get_page_setup().is_default()) { @@ -1821,11 +1587,6 @@ void xlsx_producer::write_worksheet(const relationship &rel) { if (!cell.garbage_collectible()) { - if (cell.has_hyperlink()) - { -// hyperlink_references[cell.get_hyperlink().get_id()] = cell.get_reference().to_string(); - } - auto cell_node = row_node.append_child("c"); cell_node.append_attribute("r").set_value(cell.get_reference().to_string().c_str()); @@ -1943,14 +1704,28 @@ void xlsx_producer::write_worksheet(const relationship &rel) if (!source_.impl().manifest_.get_part_relationships(rel.get_target_uri()).empty()) { - auto hyperlinks_node = worksheet_node.append_child("hyperlinks"); + auto sheet_rels = source_.impl().manifest_.get_part_relationships(rel.get_target_uri()); + std::vector hyperlink_sheet_rels; - for (const auto &relationship : source_.impl().manifest_.get_part_relationships(rel.get_target_uri())) + for (const auto &sheet_rel : sheet_rels) { - auto hyperlink_node = hyperlinks_node.append_child("hyperlink"); - hyperlink_node.append_attribute("display").set_value(relationship.get_target_uri().to_string('/').c_str()); - hyperlink_node.append_attribute("ref").set_value(hyperlink_references.at(relationship.get_id()).c_str()); - hyperlink_node.append_attribute("r:id").set_value(relationship.get_id().c_str()); + if (sheet_rel.get_type() == relationship::type::hyperlink) + { + hyperlink_sheet_rels.push_back(sheet_rel); + } + } + + if (!hyperlink_sheet_rels.empty()) + { + auto hyperlinks_node = worksheet_node.append_child("hyperlinks"); + + for (const auto &hyperlink_rel : hyperlink_sheet_rels) + { + auto hyperlink_node = hyperlinks_node.append_child("hyperlink"); + hyperlink_node.append_attribute("display").set_value(hyperlink_rel.get_target_uri().to_string('/').c_str()); + hyperlink_node.append_attribute("ref").set_value(hyperlink_references.at(hyperlink_rel.get_id()).c_str()); + hyperlink_node.append_attribute("r:id").set_value(hyperlink_rel.get_id().c_str()); + } } } @@ -2022,40 +1797,32 @@ void xlsx_producer::write_worksheet(const relationship &rel) "Text &P of &N"; odd_footer_node.text().set(footer_text.c_str()); } - - write_document_to_archive(document, rel.get_target_uri(), destination_); } // Sheet Relationship Target Parts -void xlsx_producer::write_comments() +void xlsx_producer::write_comments(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("comments"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto comments_node = root.append_child("comments"); } -void xlsx_producer::write_drawings() +void xlsx_producer::write_drawings(pugi::xml_node root) { - pugi::xml_document document; - auto root_node = document.append_child("wsDr"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); + auto ws_dr_node = root.append_child("wsDr"); } -// Unknown Parts +// Other Parts + +void xlsx_producer::write_custom_property() +{ +} void xlsx_producer::write_unknown_parts() { - pugi::xml_document document; - auto root_node = document.append_child("Hmm"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); } void xlsx_producer::write_unknown_relationships() { - pugi::xml_document document; - auto root_node = document.append_child("Relationships"); - write_document_to_archive(document, xlnt::constants::part_core(), destination_); } } // namespace detail diff --git a/source/detail/xlsx_producer.hpp b/source/detail/xlsx_producer.hpp index 45504a31..41622e2d 100644 --- a/source/detail/xlsx_producer.hpp +++ b/source/detail/xlsx_producer.hpp @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -57,50 +58,47 @@ private: /// Write all files needed to create a valid XLSX file which represents all /// data contained in workbook. /// - void populate_archive(zip_file &archive); + void populate_archive(); // Package Parts - void write_package_relationships(); - void write_content_types(); - void write_app_properties(); - void write_core_properties(); - void write_custom_file_properties(); + void write_manifest(); + void write_core_properties(pugi::xml_node root); + void write_extended_properties(pugi::xml_node root); + void write_custom_properties(pugi::xml_node root); // SpreadsheetML-Specific Package Parts - void write_workbook(); - void write_workbook_relationships(); + void write_workbook(pugi::xml_node root); // Workbook Relationship Target Parts - void write_calculation_chain(); - void write_connections(); - void write_custom_property(); - void write_custom_xml_mappings(); - void write_external_workbook_references(); - void write_metadata(); - void write_pivot_table(); - void write_shared_string_table(); - void write_shared_workbook_revision_headers(); - void write_shared_workbook(); - void write_shared_workbook_user_data(); - void write_styles(); - void write_theme(); - void write_volatile_dependencies(); + void write_calculation_chain(pugi::xml_node root); + void write_connections(pugi::xml_node root); + void write_custom_xml_mappings(pugi::xml_node root); + void write_external_workbook_references(pugi::xml_node root); + void write_metadata(pugi::xml_node root); + void write_pivot_table(pugi::xml_node root); + void write_shared_string_table(pugi::xml_node root); + void write_shared_workbook_revision_headers(pugi::xml_node root); + void write_shared_workbook(pugi::xml_node root); + void write_shared_workbook_user_data(pugi::xml_node root); + void write_styles(pugi::xml_node root); + void write_theme(pugi::xml_node root); + void write_volatile_dependencies(pugi::xml_node root); - void write_chartsheet(const relationship &rel); - void write_dialogsheet(const relationship &rel); - bool read_worksheet(const relationship &rel); - void write_worksheet(const relationship &rel); + void write_chartsheet(pugi::xml_node root, const relationship &rel); + void write_dialogsheet(pugi::xml_node root, const relationship &rel); + void write_worksheet(pugi::xml_node root, const relationship &rel); // Sheet Relationship Target Parts - void write_comments(); - void write_drawings(); + void write_comments(pugi::xml_node root); + void write_drawings(pugi::xml_node root); - // Unknown Parts + // Other Parts + void write_custom_property(); void write_unknown_parts(); void write_unknown_relationships(); diff --git a/source/packaging/manifest.cpp b/source/packaging/manifest.cpp index d8d0380f..cae62231 100644 --- a/source/packaging/manifest.cpp +++ b/source/packaging/manifest.cpp @@ -169,99 +169,77 @@ std::vector manifest::get_part_relationships(const path &part, rel return matches; } -content_type manifest::get_part_content_type(const path &part) const +content_type manifest::get_content_type(const path &part) const { - return from_string(get_part_content_type_string(part)); + return from_string(get_content_type_string(part)); } -std::string manifest::get_part_content_type_string(const path &part) const +std::string manifest::get_content_type_string(const path &part) const { if (part_infos_.find(part) == part_infos_.end()) { + auto extension = part.extension(); + + if (has_default_type(extension)) + { + return get_default_type(extension); + } + throw key_not_found(); } return part_infos_.at(part).content_type; } -void manifest::register_part(const path &part, const path &parent, const std::string &content_type, relationship::type relation) +void manifest::register_override_type(const path &part, const std::string &content_type) { part_infos_[part] = { content_type, {} }; - - relationship rel(next_package_relationship_id(), relation, part, target_mode::internal); - part_infos_[parent].relationships.push_back(rel); } -void manifest::register_part(const path &parent, const relationship &rel, const std::string &content_type) +std::string manifest::register_package_relationship(relationship::type type, const path &target_uri, target_mode mode) { - part_infos_[rel.get_target_uri()] = { content_type,{} }; - part_infos_[parent].relationships.push_back(rel); + return register_package_relationship(type, target_uri, mode, next_package_relationship_id()); } -void manifest::register_package_part(const path &part, const std::string &content_type, relationship::type relation) +std::string manifest::register_package_relationship(relationship::type type, const path &target_uri, target_mode mode, const std::string &rel_id) { - part_infos_[part] = { content_type, {} }; + if (has_package_relationship(rel_id)) + { + throw invalid_parameter(); + } - relationship rel(next_package_relationship_id(), relation, part, target_mode::internal); + relationship rel(rel_id, type, target_uri, mode); package_relationships_.push_back(rel); + + return rel_id; } -void manifest::unregister_part(const path &part) +bool manifest::has_package_relationship(const std::string &rel_id) const { - if (part_infos_.find(part) != part_infos_.end()) + for (const auto &rel : package_relationships_) { - part_infos_.erase(part); - } - else - { - throw key_not_found(); - } - - auto package_rels_iter = package_relationships_.begin(); - - while (package_rels_iter != package_relationships_.end()) - { - if (package_rels_iter->get_target_uri() == part) + if (rel.get_id() == rel_id) { - package_rels_iter = package_relationships_.erase(package_rels_iter); - continue; - } - - ++package_rels_iter; - } - - for (auto ¤t_part : part_infos_) - { - auto rels_iter = current_part.second.relationships.begin(); - - while (rels_iter != current_part.second.relationships.end()) - { - if (rels_iter->get_target_uri() == part) - { - rels_iter = current_part.second.relationships.erase(rels_iter); - continue; - } - - ++rels_iter; + return true; } } + + return false; } -std::vector manifest::get_parts() const +std::vector manifest::get_overriden_parts() const { - std::vector parts; + std::vector overriden; for (const auto &part : part_infos_) { - parts.push_back(part.first); + if (!part.second.content_type.empty()) + { + overriden.push_back(part.first); + } } - return parts; -} - -bool manifest::has_part(const path &part) const -{ - return part_infos_.find(part) != part_infos_.end(); + return overriden; } std::vector manifest::get_package_relationships() const @@ -269,7 +247,7 @@ std::vector manifest::get_package_relationships() const return package_relationships_; } -relationship manifest::get_package_relationship(const std::string &rel_id) +relationship manifest::get_package_relationship(const std::string &rel_id) const { for (const auto rel : package_relationships_) { @@ -284,14 +262,12 @@ relationship manifest::get_package_relationship(const std::string &rel_id) std::vector manifest::get_part_relationships(const path &part) const { - std::vector matches; - - for (const auto &rel : part_infos_.at(part).relationships) + if (part_infos_.find(part) == part_infos_.end()) { - matches.push_back(rel); + throw key_not_found(); } - return matches; + return part_infos_.at(part).relationships; } relationship manifest::get_part_relationship(const path &part, const std::string &rel_id) const @@ -312,27 +288,30 @@ relationship manifest::get_part_relationship(const path &part, const std::string throw key_not_found(); } -std::string manifest::register_external_package_relationship(relationship::type type, const std::string &target_uri) +std::vector manifest::get_parts_with_relationships() const { - return register_external_package_relationship(type, target_uri, next_package_relationship_id()); + std::vector with_relationships; + + for (const auto &info : part_infos_) + { + if (!info.second.relationships.empty()) + { + with_relationships.push_back(info.first); + } + } + + return with_relationships; } -std::string manifest::register_external_package_relationship(relationship::type type, const std::string &target_uri, const std::string &rel_id) +std::string manifest::register_part_relationship(const path &source_uri, relationship::type type, const path &target_uri, target_mode mode) { - relationship rel(rel_id, type, path(target_uri), target_mode::external); - package_relationships_.push_back(rel); - return rel_id; + return register_part_relationship(source_uri, type, target_uri, mode, next_relationship_id(source_uri)); } -std::string manifest::register_external_relationship(const path &source_part, relationship::type type, const std::string &target_uri) +std::string manifest::register_part_relationship(const path &source_uri, relationship::type type, const path &target_uri, target_mode mode, const std::string &rel_id) { - return register_external_relationship(source_part, type, target_uri, next_relationship_id(source_part)); -} - -std::string manifest::register_external_relationship(const path &source_part, relationship::type type, const std::string &target_uri, const std::string &rel_id) -{ - relationship rel(rel_id, type, path(target_uri), target_mode::external); - part_infos_.at(source_part).relationships.push_back(rel); + relationship rel(rel_id, type, path(target_uri), mode); + part_infos_.at(source_uri).relationships.push_back(rel); return rel_id; } diff --git a/source/packaging/tests/test_core.hpp b/source/packaging/tests/test_core.hpp deleted file mode 100644 index 1410f6e8..00000000 --- a/source/packaging/tests/test_core.hpp +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once - -#include -#include - -#include -#include -#include -#include - -class test_core : public CxxTest::TestSuite -{ -public: - void test_read_properties_core() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("genuine/empty.xlsx")); - - TS_ASSERT_EQUALS(wb.get_creator(), "*.*"); - TS_ASSERT_EQUALS(wb.get_last_modified_by(), "Charlie Clark"); - TS_ASSERT_EQUALS(wb.get_created(), xlnt::datetime(2010, 4, 9, 20, 43, 12)); - TS_ASSERT_EQUALS(wb.get_modified(), xlnt::datetime(2014, 1, 2, 14, 53, 6)); - } - - void test_read_sheets_titles() - { - const std::vector expected_titles = {"Sheet1 - Text", "Sheet2 - Numbers", "Sheet3 - Formulas", "Sheet4 - Dates"}; - - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("genuine/empty.xlsx")); - - TS_ASSERT_EQUALS(wb.get_sheet_titles(), expected_titles); - } - - void test_read_properties_core_libre() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("genuine/empty_libre.xlsx")); - TS_ASSERT_EQUALS(wb.get_base_date(), xlnt::calendar::windows_1900); - } - - void test_read_sheets_titles_libre() - { - const std::vector expected_titles = {"Sheet1 - Text", "Sheet2 - Numbers", "Sheet3 - Formulas", "Sheet4 - Dates"}; - - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("genuine/empty_libre.xlsx")); - auto title_iter = expected_titles.begin(); - - for(auto ws : wb) - { - TS_ASSERT_EQUALS(ws.get_title(), *(title_iter++)); - } - } - - void test_write_properties_core() - { - xlnt::workbook wb; - wb.set_creator("TEST_USER"); - wb.set_last_modified_by("SOMEBODY"); - wb.set_created(xlnt::datetime(2010, 4, 1, 20, 30, 00)); - wb.set_modified(xlnt::datetime(2010, 4, 5, 14, 5, 30)); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/core.xml"), - wb, xlnt::constants::part_core())); - } - - void test_write_properties_app() - { - xlnt::workbook wb; - wb.set_application("Microsoft Excel"); - wb.set_app_version("12.0000"); - wb.set_company("Company"); - wb.create_sheet(); - wb.create_sheet(); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/core.xml"), - wb, xlnt::constants::part_core())); - } -}; diff --git a/source/packaging/tests/test_zip_file.hpp b/source/packaging/tests/test_zip_file.hpp new file mode 100644 index 00000000..776d9aa5 --- /dev/null +++ b/source/packaging/tests/test_zip_file.hpp @@ -0,0 +1,225 @@ +#include +#include +#include + +#include +#include "helpers/path_helper.hpp" +#include "helpers/temporary_file.hpp" + +class test_zip_file : public CxxTest::TestSuite +{ +public: + test_zip_file() + { + existing_file = path_helper::get_data_directory("xlsx/4_not-package.xlsx"); + expected_string = "not-empty"; + } + + bool files_equal(const xlnt::path &left, const xlnt::path &right) + { + if(left.to_string() == right.to_string()) + { + return true; + } + + std::ifstream stream_left(left.to_string(), std::ios::binary); + std::ifstream stream_right(right.to_string(), std::ios::binary); + + while(stream_left && stream_right) + { + if(stream_left.get() != stream_right.get()) + { + return false; + } + } + + return true; + } + + void test_load_file() + { + temporary_file temp_file; + xlnt::zip_file f(existing_file); + f.save(temp_file.get_path()); + TS_ASSERT(files_equal(existing_file, temp_file.get_path())); + } + + void test_load_stream() + { + temporary_file temp; + + std::ifstream in_stream(existing_file.to_string(), std::ios::binary); + xlnt::zip_file f(in_stream); + std::ofstream out_stream(temp.get_path().to_string(), std::ios::binary); + f.save(out_stream); + out_stream.close(); + + TS_ASSERT(files_equal(existing_file, temp.get_path())); + } + + void test_load_bytes() + { + temporary_file temp_file; + + std::vector source_bytes; + std::ifstream in_stream(existing_file.to_string(), std::ios::binary); + + while(in_stream) + { + source_bytes.push_back(static_cast(in_stream.get())); + } + + xlnt::zip_file f(source_bytes); + f.save(temp_file.get_path()); + + xlnt::zip_file f2; + f2.load(temp_file.get_path()); + std::vector result_bytes; + f2.save(result_bytes); + + TS_ASSERT(source_bytes == result_bytes); + } + + void test_reset() + { + xlnt::zip_file f(existing_file); + + TS_ASSERT(!f.namelist().empty()); + + try + { + f.read(xlnt::path("text.txt")); + } + catch(std::exception e) + { + TS_ASSERT(false); + } + + f.reset(); + + TS_ASSERT(f.namelist().empty()); + + try + { + f.read(xlnt::path("doesnt-exist.txt")); + TS_ASSERT(false); + } + catch(std::exception e) + { + } + + f.write_string("b", xlnt::path("a")); + f.reset(); + + TS_ASSERT(f.namelist().empty()); + + f.write_string("b", xlnt::path("a")); + + TS_ASSERT_DIFFERS(f.getinfo(xlnt::path("a")).file_size, 0); + } + + void test_getinfo() + { + xlnt::zip_file f(existing_file); + auto info = f.getinfo(xlnt::path("text.txt")); + TS_ASSERT(info.filename.to_string() == "text.txt"); + } + + void test_infolist() + { + xlnt::zip_file f(existing_file); + TS_ASSERT_EQUALS(f.infolist().size(), 1); + } + + void test_namelist() + { + xlnt::zip_file f(existing_file); + TS_ASSERT_EQUALS(f.namelist().size(), 1); + } + + void test_open_by_name() + { + xlnt::zip_file f(existing_file); + std::stringstream ss; + ss << f.open(xlnt::path("text.txt")).rdbuf(); + std::string result = ss.str(); + TS_ASSERT(result == expected_string); + } + + void test_open_by_info() + { + xlnt::zip_file f(existing_file); + std::stringstream ss; + ss << f.open(xlnt::path("text.txt")).rdbuf(); + std::string result = ss.str(); + TS_ASSERT(result == expected_string); + } + + + void test_read() + { + xlnt::zip_file f(existing_file); + TS_ASSERT(f.read(xlnt::path("text.txt")) == expected_string); + TS_ASSERT(f.read(f.getinfo(xlnt::path("text.txt"))) == expected_string); + } + + void test_testzip() + { + xlnt::zip_file f(existing_file); + TS_ASSERT(!f.check_crc()); + } + + void test_write_file() + { + temporary_file temp_file; + + xlnt::zip_file f; + auto text_file = path_helper::get_data_directory("xlsx/2_text.xlsx"); + f.write_file(text_file); + f.write_file(text_file, xlnt::path("a.txt")); + f.save(temp_file.get_path()); + + xlnt::zip_file f2(temp_file.get_path()); + + for(auto &info : f2.infolist()) + { + TS_ASSERT(f2.read(info) == expected_string); + } + } + + void test_write_string() + { + xlnt::zip_file f; + f.write_string("a\na", xlnt::path("a.txt")); + xlnt::zip_info info; + info.filename = xlnt::path("b.txt"); + info.date_time.year = 2014; + f.write_string("b\nb", info); + + temporary_file temp_file; + f.save(temp_file.get_path()); + + xlnt::zip_file f2(temp_file.get_path()); + TS_ASSERT(f2.read(xlnt::path("a.txt")) == "a\na"); + TS_ASSERT(f2.read(f2.getinfo(xlnt::path("b.txt"))) == "b\nb"); + } + + void test_comment() + { + xlnt::zip_file f; + f.comment = "comment"; + temporary_file temp_file; + f.save(temp_file.get_path()); + + xlnt::zip_file f2(temp_file.get_path()); + TS_ASSERT(f2.comment == "comment"); + + xlnt::zip_file f3; + std::vector bytes { 1, 2, 3 }; + TS_ASSERT_THROWS(f3.load(bytes), std::runtime_error); + } + +private: + xlnt::path existing_file; + std::string expected_string; +}; diff --git a/source/packaging/zip_file.cpp b/source/packaging/zip_file.cpp index f13fef1e..0b382886 100644 --- a/source/packaging/zip_file.cpp +++ b/source/packaging/zip_file.cpp @@ -31,6 +31,7 @@ #include #include +#include namespace { @@ -164,8 +165,19 @@ zip_file::~zip_file() void zip_file::load(std::istream &stream) { + if (!stream.good()) + { + throw invalid_file("((std::istream))"); + } + reset(); buffer_.assign(std::istreambuf_iterator(stream), std::istreambuf_iterator()); + + if (buffer_.empty()) + { + throw invalid_file("((stream)) - empty file"); + } + remove_comment(); start_read(); } @@ -174,11 +186,31 @@ void zip_file::load(const path &filename) { filename_ = filename; std::ifstream stream(filename.to_string(), std::ios::binary); - load(stream); + + if (!stream.good()) + { + throw invalid_file(filename.to_string()); + } + + reset(); + buffer_.assign(std::istreambuf_iterator(stream), std::istreambuf_iterator()); + + if (buffer_.empty()) + { + throw invalid_file(filename.to_string() + " - empty file"); + } + + remove_comment(); + start_read(); } void zip_file::load(const std::vector &bytes) { + if (bytes.empty()) + { + throw invalid_file("((bytes))"); + } + reset(); buffer_.assign(bytes.begin(), bytes.end()); remove_comment(); diff --git a/source/styles/tests/test_stylesheet.hpp b/source/styles/tests/test_stylesheet.hpp deleted file mode 100644 index 23e3b3f1..00000000 --- a/source/styles/tests/test_stylesheet.hpp +++ /dev/null @@ -1,285 +0,0 @@ -#pragma once - -#include -#include -#include - -#include -#include -#include -#include -#include - -class test_stylesheet : public CxxTest::TestSuite -{ -public: - void test_from_simple() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("reader/styles/simple-styles.xml")); - } - - void test_from_complex() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("reader/styles/complex-styles.xml")); - } - - void test_add_existing_style() - { - xlnt::workbook wb; - - auto &s = wb.create_style("test"); - - wb.add_style(s); - - xlnt::style copy; - copy = s; - - TS_ASSERT_EQUALS(s, copy); - } - -/* - void _test_unprotected_cell() - { - datadir.chdir(); - src = open ("worksheet_unprotected_style.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - styles = stylesheet.cell_styles; - assert len(styles) == 3; - // default is cells are locked - assert styles[1] == StyleArray([4,0,0,0,0,0,0,0,0]); - assert styles[2] == StyleArray([3,0,0,0,1,0,0,0,0]); - } - - void _test_read_cell_style() - { - datadir.chdir(); - src = open("empty-workbook-styles.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - styles = stylesheet.cell_styles; - assert len(styles) == 2; - assert styles[1] == StyleArray([0,0,0,9,0,0,0,0,1]; - } - - void _test_read_xf_no_number_format() - { - datadir.chdir(); - src = open("no_number_format.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - styles = stylesheet.cell_styles; - assert len(styles) == 3; - assert styles[1] == StyleArray([1,0,1,0,0,0,0,0,0]); - assert styles[2] == StyleArray([0,0,0,14,0,0,0,0,0]); - } - - void _test_none_values() - { - datadir.chdir(); - src = open("none_value_styles.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - fonts = stylesheet.fonts; - assert fonts[0].scheme is None; - assert fonts[0].vertAlign is None; - assert fonts[1].u is None; - } - - void _test_alignment() - { - datadir.chdir(); - src = open("alignment_styles.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - styles = stylesheet.cell_styles; - assert len(styles) == 3; - assert styles[2] == StyleArray([0,0,0,0,0,2,0,0,0]); - - assert stylesheet.alignments == [ - Alignment(), - Alignment(textRotation=180), - Alignment(vertical='top', textRotation=255), - ]; - } - - void _test_rgb_colors() - { - datadir.chdir(); - src = open("rgb_colors.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - assert len(stylesheet.colors.index) == 64; - assert stylesheet.colors.index[0] == "00000000"; - assert stylesheet.colors.index[-1] == "00333333"; - } - - - void _test_custom_number_formats() - { - datadir.chdir(); - src = open("styles_number_formats.xml", "rb"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - assert stylesheet.number_formats == [ - '_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * "-"??_ ;_ @_ ', - "#,##0.00_ ", - "yyyy/m/d;@", - "0.00000_ " - ]; - } - - void _test_assign_number_formats() - { - node = fromstring( - "" - "" - " " - "" - "" - "" - " " - "" - "" - ""); - stylesheet = Stylesheet.from_tree(node); - styles = stylesheet.cell_styles; - - assert styles[0] == StyleArray([2, 0, 0, 164, 0, 1, 0, 0, 0]); - } - - - void _test_named_styles() - { - datadir.chdir(); - src = open("complex-styles.xml"); - xml = src.read(); - node = fromstring(xml); - stylesheet = Stylesheet.from_tree(node); - - followed = stylesheet.named_styles['Followed Hyperlink']; - assert followed.name == "Followed Hyperlink"; - assert followed.font == stylesheet.fonts[2]; - assert followed.fill == DEFAULT_EMPTY_FILL; - assert followed.border == Border(); - - link = stylesheet.named_styles['Hyperlink']; - assert link.name == "Hyperlink"; - assert link.font == stylesheet.fonts[1]; - assert link.fill == DEFAULT_EMPTY_FILL; - assert link.border == Border(); - - normal = stylesheet.named_styles['Normal']; - assert normal.name == "Normal"; - assert normal.font == stylesheet.fonts[0]; - assert normal.fill == DEFAULT_EMPTY_FILL; - assert normal.border == Border(); - } - - void _test_no_styles() - { - wb1 = wb2 = Workbook(); - archive = ZipFile(BytesIO(), "a"); - apply_stylesheet(archive, wb1); - assert wb1._cell_styles == wb2._cell_styles; - assert wb2._named_styles == wb2._named_styles; - } - - void _test_write_worksheet() - { - wb = Workbook() - node = write_stylesheet(wb); - xml = tostring(node); - - const std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - "" - ""; - - diff = compare_xml(xml, expected); - assert diff is None, diff; - } - - void _test_simple_styles() { - wb = Workbook(); - wb.guess_types = True; - ws = wb.active; - now = datetime.date.today(); - for idx, v in enumerate(['12.34%', now, 'This is a test', '31.31415', None], 1) - { - ws.append([v]); - _ = ws.cell(column=1, row=idx).style_id; - } - - // set explicit formats - ws['D9'].number_format = numbers.FORMAT_NUMBER_00; - ws['D9'].protection = Protection(locked=True); - ws['D9'].style_id; - ws['E1'].protection = Protection(hidden=True); - ws['E1'].style_id; - - assert len(wb._cell_styles) == 5; - stylesheet = write_stylesheet(wb); - - datadir.chdir(); - reference_file = open('simple-styles.xml'); - expected = reference_file.read(); - xml = tostring(stylesheet); - diff = compare_xml(xml, expected); - assert diff is None, diff; - } - */ -}; diff --git a/source/utils/path.cpp b/source/utils/path.cpp index 85735f6d..c9e092b1 100644 --- a/source/utils/path.cpp +++ b/source/utils/path.cpp @@ -187,6 +187,10 @@ path path::parent() const { result.parts_.pop_back(); } + else + { + return path(""); + } return result; } diff --git a/source/utils/tests/test_zip_file.hpp b/source/utils/tests/test_zip_file.hpp deleted file mode 100644 index f5190625..00000000 --- a/source/utils/tests/test_zip_file.hpp +++ /dev/null @@ -1,254 +0,0 @@ -#include -#include -#include - -#include -#include "helpers/path_helper.hpp" -#include "helpers/temporary_file.hpp" - -class test_zip_file : public CxxTest::TestSuite -{ -public: - test_zip_file() - { - existing_file = path_helper::get_data_directory("genuine/empty.xlsx"); - expected_content_types_string = "\r\n"; - expected_atxt_string = "\nThis is cell A1 in Sheet 1This is cell G5"; - expected_printdir_string = - " Length Date Time Name\n" - "--------- ---------- ----- ----\n" - " 1704 01/01/1980 00:00 [Content_Types].xml\n" - " 588 01/01/1980 00:00 _rels/.rels\n" - " 917 01/01/1980 00:00 docProps/app.xml\n" - " 609 01/01/1980 00:00 docProps/core.xml\n" - " 1254 01/01/1980 00:00 xl/_rels/workbook.xml.rels\n" - " 169 01/01/1980 00:00 xl/calcChain.xml\n" - " 233 01/01/1980 00:00 xl/sharedStrings.xml\n" - " 1724 01/01/1980 00:00 xl/styles.xml\n" - " 6995 01/01/1980 00:00 xl/theme/theme1.xml\n" - " 898 01/01/1980 00:00 xl/workbook.xml\n" - " 1068 07/21/2016 20:27 xl/worksheets/sheet1.xml\n" - " 4427 01/01/1980 00:00 xl/worksheets/sheet2.xml\n" - " 1032 01/01/1980 00:00 xl/worksheets/sheet3.xml\n" - " 1231 01/01/1980 00:00 xl/worksheets/sheet4.xml\n" - "--------- -------\n" - " 22849 14 files\n"; - } - - bool files_equal(const xlnt::path &left, const xlnt::path &right) - { - if(left.to_string() == right.to_string()) - { - return true; - } - - std::ifstream stream_left(left.to_string(), std::ios::binary); - std::ifstream stream_right(right.to_string(), std::ios::binary); - - while(stream_left && stream_right) - { - if(stream_left.get() != stream_right.get()) - { - return false; - } - } - - return true; - } - - void test_load_file() - { - temporary_file temp_file; - xlnt::zip_file f(existing_file); - f.save(temp_file.get_path()); - TS_ASSERT(files_equal(existing_file, temp_file.get_path())); - } - - void test_load_stream() - { - temporary_file temp; - - std::ifstream in_stream(existing_file.to_string(), std::ios::binary); - xlnt::zip_file f(in_stream); - std::ofstream out_stream(temp.get_path().to_string(), std::ios::binary); - f.save(out_stream); - out_stream.close(); - - TS_ASSERT(files_equal(existing_file, temp.get_path())); - } - - void test_load_bytes() - { - temporary_file temp_file; - - std::vector source_bytes; - std::ifstream in_stream(existing_file.to_string(), std::ios::binary); - - while(in_stream) - { - source_bytes.push_back(static_cast(in_stream.get())); - } - - xlnt::zip_file f(source_bytes); - f.save(temp_file.get_path()); - - xlnt::zip_file f2; - f2.load(temp_file.get_path()); - std::vector result_bytes; - f2.save(result_bytes); - - TS_ASSERT(source_bytes == result_bytes); - } - - void test_reset() - { - xlnt::zip_file f(existing_file); - - TS_ASSERT(!f.namelist().empty()); - - try - { - f.read(xlnt::path("[Content_Types].xml")); - } - catch(std::exception e) - { - TS_ASSERT(false); - } - - f.reset(); - - TS_ASSERT(f.namelist().empty()); - - try - { - f.read(xlnt::path("[Content_Types].xml")); - TS_ASSERT(false); - } - catch(std::exception e) - { - } - - f.write_string("b", xlnt::path("a")); - f.reset(); - - TS_ASSERT(f.namelist().empty()); - - f.write_string("b", xlnt::path("a")); - - TS_ASSERT_DIFFERS(f.getinfo(xlnt::path("a")).file_size, 0); - } - - void test_getinfo() - { - xlnt::zip_file f(existing_file); - auto info = f.getinfo(xlnt::path("[Content_Types].xml")); - TS_ASSERT(info.filename.to_string() == "[Content_Types].xml"); - } - - void test_infolist() - { - xlnt::zip_file f(existing_file); - TS_ASSERT_EQUALS(f.infolist().size(), 14); - } - - void test_namelist() - { - xlnt::zip_file f(existing_file); - TS_ASSERT_EQUALS(f.namelist().size(), 14); - } - - void test_open_by_name() - { - xlnt::zip_file f(existing_file); - std::stringstream ss; - ss << f.open(xlnt::path("[Content_Types].xml")).rdbuf(); - std::string result = ss.str(); - TS_ASSERT(result == expected_content_types_string); - } - - void test_open_by_info() - { - xlnt::zip_file f(existing_file); - std::stringstream ss; - ss << f.open(xlnt::path("[Content_Types].xml")).rdbuf(); - std::string result = ss.str(); - TS_ASSERT(result == expected_content_types_string); - } - - - void test_read() - { - xlnt::zip_file f(existing_file); - TS_ASSERT(f.read(xlnt::path("[Content_Types].xml")) == expected_content_types_string); - TS_ASSERT(f.read(f.getinfo(xlnt::path("[Content_Types].xml"))) == expected_content_types_string); - } - - void test_testzip() - { - xlnt::zip_file f(existing_file); - TS_ASSERT(!f.check_crc()); - } - - void test_write_file() - { - temporary_file temp_file; - - xlnt::zip_file f; - auto text_file = path_helper::get_data_directory("reader/sharedStrings.xml"); - f.write_file(text_file); - f.write_file(text_file, xlnt::path("sharedStrings2.xml")); - f.save(temp_file.get_path()); - - xlnt::zip_file f2(temp_file.get_path()); - - for(auto &info : f2.infolist()) - { - if(info.filename.to_string() == "sharedStrings2.xml") - { - TS_ASSERT(f2.read(info) == expected_atxt_string); - } - else if(info.filename.basename() == "sharedStrings.xml") - { - TS_ASSERT(f2.read(info) == expected_atxt_string); - } - } - } - - void test_write_string() - { - xlnt::zip_file f; - f.write_string("a\na", xlnt::path("a.txt")); - xlnt::zip_info info; - info.filename = xlnt::path("b.txt"); - info.date_time.year = 2014; - f.write_string("b\nb", info); - - temporary_file temp_file; - f.save(temp_file.get_path()); - - xlnt::zip_file f2(temp_file.get_path()); - TS_ASSERT(f2.read(xlnt::path("a.txt")) == "a\na"); - TS_ASSERT(f2.read(f2.getinfo(xlnt::path("b.txt"))) == "b\nb"); - } - - void test_comment() - { - xlnt::zip_file f; - f.comment = "comment"; - temporary_file temp_file; - f.save(temp_file.get_path()); - - xlnt::zip_file f2(temp_file.get_path()); - TS_ASSERT(f2.comment == "comment"); - - xlnt::zip_file f3; - std::vector bytes { 1, 2, 3 }; - TS_ASSERT_THROWS(f3.load(bytes), std::runtime_error); - } - -private: - xlnt::path existing_file; - std::string expected_content_types_string; - std::string expected_atxt_string; - std::string expected_printdir_string; -}; diff --git a/source/workbook/tests/test_consume_xlsx.hpp b/source/workbook/tests/test_consume_xlsx.hpp new file mode 100644 index 00000000..6ab8db1e --- /dev/null +++ b/source/workbook/tests/test_consume_xlsx.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +class test_consume_xlsx : public CxxTest::TestSuite +{ +}; diff --git a/source/workbook/tests/test_produce_xlsx.hpp b/source/workbook/tests/test_produce_xlsx.hpp new file mode 100644 index 00000000..4a3352e1 --- /dev/null +++ b/source/workbook/tests/test_produce_xlsx.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include +#include + +class test_produce_xlsx : public CxxTest::TestSuite +{ +public: + bool workbook_matches_file(xlnt::workbook &wb, const xlnt::path &file) + { + std::vector buffer; + wb.save(buffer); + wb.save(xlnt::path("C:\\Users\\Thomas\\Desktop\\a.xlsx")); + xlnt::zip_file wb_archive(buffer); + + xlnt::zip_file file_archive(file); + + return xml_helper::archives_match(wb_archive, file_archive); + } + + void test_empty_excel() + { + xlnt::workbook wb = xlnt::workbook::empty_excel(); + TS_ASSERT(workbook_matches_file(wb, path_helper::get_data_directory("xlsx/8_default-excel.xlsx"))); + } +}; diff --git a/source/workbook/tests/test_read.hpp b/source/workbook/tests/test_read.hpp deleted file mode 100644 index 802bdb0f..00000000 --- a/source/workbook/tests/test_read.hpp +++ /dev/null @@ -1,438 +0,0 @@ -#pragma once - -#include -#include -#include - -#include -#include -#include -#include - -class test_read : public CxxTest::TestSuite -{ -public: - - xlnt::workbook standard_workbook() - { - xlnt::workbook wb; - auto path = path_helper::get_data_directory("genuine/empty.xlsx"); - wb.load(path); - - return wb; - } - - void test_read_standard_workbook() - { - TS_ASSERT_THROWS_NOTHING(standard_workbook()); - } - - void test_read_standard_workbook_from_fileobj() - { - auto path = path_helper::get_data_directory("genuine/empty.xlsx"); - std::ifstream fo(path.to_string(), std::ios::binary); - - xlnt::workbook wb; - wb.load(fo); - - TS_ASSERT(wb.get_sheet_titles().size() == 1); - } - - void test_read_worksheet() - { - auto wb = standard_workbook(); - auto sheet2 = wb.get_sheet_by_title("Sheet2 - Numbers"); - - TS_ASSERT_DIFFERS(sheet2, nullptr); - TS_ASSERT_EQUALS("This is cell G5", sheet2.get_cell("G5").get_value()); - TS_ASSERT_EQUALS(18, sheet2.get_cell("D18").get_value()); - TS_ASSERT_EQUALS(true, sheet2.get_cell("G9").get_value()); - TS_ASSERT_EQUALS(false, sheet2.get_cell("G10").get_value()); - } - - void test_read_nostring_workbook() - { - auto path = path_helper::get_data_directory("genuine/empty-no-string.xlsx"); - - xlnt::workbook wb; - TS_ASSERT_THROWS_NOTHING(wb.load(path)); - } - - void test_read_empty_file() - { - xlnt::workbook wb; - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("reader/null_file.xlsx")), xlnt::invalid_file); - } - - void test_read_empty_archive() - { - xlnt::workbook wb; - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("reader/null_archive.xlsx")), xlnt::invalid_file); - } - - void test_read_workbook_with_no_properties() - { - xlnt::workbook wb; - TS_ASSERT_THROWS_NOTHING(wb.load(path_helper::get_data_directory("genuine/empty_with_no_properties.xlsx"))); - } - - xlnt::workbook workbook_with_styles() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("genuine/empty-with-styles.xlsx")); - - return wb; - } - - void test_read_workbook_with_styles_general() - { - auto wb = workbook_with_styles(); - auto ws = wb["Sheet1"]; - auto format = ws.get_cell("A1").get_number_format(); - auto expected = xlnt::number_format::general(); - TS_ASSERT_EQUALS(format, expected); - } - - void test_read_workbook_with_styles_date() - { - auto wb = workbook_with_styles(); - auto ws = wb["Sheet1"]; - auto format = ws.get_cell("A2").get_number_format(); - auto expected = xlnt::number_format::date_xlsx14(); - TS_ASSERT_EQUALS(format, expected); - } - - void test_read_workbook_with_styles_number() - { - auto wb = workbook_with_styles(); - auto ws = wb["Sheet1"]; - auto code = ws.get_cell("A3").get_number_format(); - auto expected = xlnt::number_format::number_00(); - TS_ASSERT_EQUALS(code, expected); - } - - void test_read_workbook_with_styles_time() - { - auto wb = workbook_with_styles(); - auto ws = wb["Sheet1"]; - auto code = ws.get_cell("A4").get_number_format(); - auto expected = xlnt::number_format::date_time3(); - TS_ASSERT_EQUALS(code, expected); - } - - void test_read_workbook_with_styles_percentage() - { - auto wb = workbook_with_styles(); - auto ws = wb["Sheet1"]; - auto code = ws.get_cell("A5").get_number_format(); - auto expected = xlnt::number_format::percentage_00(); - TS_ASSERT_EQUALS(code, expected); - } - - void test_read_charset_excel() - { - xlnt::workbook wb; - auto path = path_helper::get_data_directory("reader/charset-excel.xlsx"); - wb.load(path); - - auto ws = wb["Sheet1"]; - auto val = ws.get_cell("A1").get_value(); - TS_ASSERT_EQUALS(val, "Direnç"); - } - - void test_read_shared_strings_max_range() - { - xlnt::workbook wb; - const auto path = path_helper::get_data_directory("reader/shared_strings-max_range.xlsx"); - wb.load(path); - - auto ws = wb["Sheet1"]; - auto val = ws.get_cell("A1").get_value(); - TS_ASSERT_EQUALS(val, "Donald"); - } - - void test_read_shared_strings_multiple_r_nodes() - { - auto path = path_helper::get_data_directory("reader/shared_strings-multiple_r_nodes.xlsx"); - - xlnt::workbook wb; - wb.load(path); - - auto ws = wb["Sheet1"]; - auto val = ws.get_cell("A1").get_value(); - TS_ASSERT_EQUALS(val, "abcdef"); - } - - xlnt::workbook date_mac_1904() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("reader/date_1904.xlsx")); - - return wb; - } - - xlnt::workbook date_std_1900() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("reader/date_1900.xlsx")); - - return wb; - } - - void test_read_win_base_date() - { - auto wb = date_std_1900(); - TS_ASSERT_EQUALS(wb.get_base_date(), xlnt::calendar::windows_1900); - } - - void test_read_mac_base_date() - { - auto wb = date_mac_1904(); - TS_ASSERT_EQUALS(wb.get_base_date(), xlnt::calendar::mac_1904); - } - - void test_read_date_style_win() - { - auto wb = date_std_1900(); - auto ws = wb["Sheet1"]; - TS_ASSERT_EQUALS(ws.get_cell("A1").get_number_format(), xlnt::number_format::date_xlsx14()); - } - - void test_read_date_style_mac() - { - auto wb = date_mac_1904(); - auto ws = wb["Sheet1"]; - TS_ASSERT_EQUALS(ws.get_cell("A1").get_number_format(), xlnt::number_format::date_xlsx14()); - } - - void test_read_compare_mac_win_dates() - { - auto wb_mac = date_mac_1904(); - auto ws_mac = wb_mac["Sheet1"]; - auto wb_win = date_std_1900(); - auto ws_win = wb_win["Sheet1"]; - xlnt::datetime dt(2011, 10, 31); - TS_ASSERT_EQUALS(ws_mac.get_cell("A1").get_value(), dt); - TS_ASSERT_EQUALS(ws_win.get_cell("A1").get_value(), dt); - TS_ASSERT_EQUALS(ws_mac.get_cell("A1").get_value(), ws_win.get_cell("A1").get_value()); - } - - void test_read_no_theme() - { - auto path = path_helper::get_data_directory("genuine/libreoffice_nrt.xlsx"); - - xlnt::workbook wb; - TS_ASSERT_THROWS_NOTHING(wb.load(path)); - } - - void _test_read_complex_formulae() - { - /* - auto path = PathHelper::GetDataDirectory("reader/formulae.xlsx"); - auto wb = xlnt::reader::load_workbook(path); - auto ws = wb.get_active_sheet(); - - // Test normal forumlae - TS_ASSERT(!ws.get_cell("A1").has_formula()); - TS_ASSERT(!ws.get_cell("A2").has_formula()); - TS_ASSERT(ws.get_cell("A3").has_formula()); - TS_ASSERT(ws.get_formula_attributes().find("A3") == ws.get_formula_attributes().end()); - TS_ASSERT(ws.get_cell("A3").get_formula() == "12345"); - TS_ASSERT(ws.get_cell("A4").has_formula()); - TS_ASSERT(ws.get_formula_attributes().find("A3") == ws.get_formula_attributes().end()); - ws.get_cell("A4").set_formula("A2+A3"); - TS_ASSERT(ws.get_cell("A5").has_formula()); - TS_ASSERT(ws.get_formula_attributes().find("A5") == ws.get_formula_attributes().end()); - ws.get_cell("A5").set_formula("SUM(A2:A4)"); - - // Test unicode - std::string expected = "=IF(ISBLANK(B16), \"D\xFCsseldorf\", B16)"; - TS_ASSERT(ws.get_cell("A16").get_formula() == expected); - - // Test shared forumlae - TS_ASSERT(ws.get_cell("B7").get_data_type() == "f"); - TS_ASSERT(ws.formula_attributes["B7"]["t"] == "shared"); - TS_ASSERT(ws.formula_attributes["B7"]["si"] == "0"); - TS_ASSERT(ws.formula_attributes["B7"]["ref"] == "B7:E7"); - TS_ASSERT(ws.get_cell("B7").value == "=B4*2"); - TS_ASSERT(ws.get_cell("C7").get_data_type() == "f"); - TS_ASSERT(ws.formula_attributes["C7"]["t"] == "shared"); - TS_ASSERT(ws.formula_attributes["C7"]["si"] == "0"); - TS_ASSERT("ref" not in ws.formula_attributes["C7"]); - TS_ASSERT(ws.get_cell("C7").value == "="); - TS_ASSERT(ws.get_cell("D7").get_data_type() == "f"); - TS_ASSERT(ws.formula_attributes["D7"]["t"] == "shared"); - TS_ASSERT(ws.formula_attributes["D7"]["si"] == "0"); - TS_ASSERT("ref" not in ws.formula_attributes["D7"]); - TS_ASSERT(ws.get_cell("D7").value == "="); - TS_ASSERT(ws.get_cell("E7").get_data_type() == "f"); - TS_ASSERT(ws.formula_attributes["E7"]["t"] == "shared"); - TS_ASSERT(ws.formula_attributes["E7"]["si"] == "0"); - TS_ASSERT("ref" not in ws.formula_attributes["E7"]); - TS_ASSERT(ws.get_cell("E7").value == "="); - - // Test array forumlae - TS_ASSERT(ws.get_cell("C10").get_data_type() == "f"); - TS_ASSERT("ref" not in ws.formula_attributes["C10"]["ref"]); - TS_ASSERT(ws.formula_attributes["C10"]["t"] == "array"); - TS_ASSERT("si" not in ws.formula_attributes["C10"]); - TS_ASSERT(ws.formula_attributes["C10"]["ref"] == "C10:C14"); - TS_ASSERT(ws.get_cell("C10").value == "=SUM(A10:A14*B10:B14)"); - TS_ASSERT(ws.get_cell("C11").get_data_type() != "f"); - */ - } - - void test_data_only() - { - auto path = path_helper::get_data_directory("reader/formulae.xlsx"); - - xlnt::workbook wb; - wb.set_data_only(true); - wb.load(path); - - auto ws = wb.get_active_sheet(); - - TS_ASSERT(ws.get_formula_attributes().empty()); - TS_ASSERT(ws.get_workbook().get_data_only()); - TS_ASSERT(ws.get_cell("A2").get_data_type() == xlnt::cell::type::numeric); - TS_ASSERT(ws.get_cell("A2").get_value() == 12345); - TS_ASSERT(!ws.get_cell("A2").has_formula()); - TS_ASSERT(ws.get_cell("A3").get_data_type() == xlnt::cell::type::numeric); - TS_ASSERT(ws.get_cell("A3").get_value() == 12345); - TS_ASSERT(!ws.get_cell("A3").has_formula()); - TS_ASSERT(ws.get_cell("A4").get_data_type() == xlnt::cell::type::numeric); - TS_ASSERT(ws.get_cell("A4").get_value() == 24690); - TS_ASSERT(!ws.get_cell("A4").has_formula()); - TS_ASSERT(ws.get_cell("A5").get_data_type() == xlnt::cell::type::numeric); - TS_ASSERT(ws.get_cell("A5").get_value() == 49380); - TS_ASSERT(!ws.get_cell("A5").has_formula()); - } - - void test_read_content_types() - { - std::vector> expected = - { - {"/xl/workbook.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}, - {"/xl/worksheets/sheet1.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"}, - {"/xl/chartsheets/sheet1.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml"}, - {"/xl/worksheets/sheet2.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"}, - {"/xl/theme/theme1.xml", "application/vnd.openxmlformats-officedocument.theme+xml"}, - {"/xl/styles.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}, - {"/xl/sharedStrings.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}, - {"/xl/drawings/drawing1.xml", "application/vnd.openxmlformats-officedocument.drawing+xml"}, - {"/xl/charts/chart1.xml", "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"}, - {"/xl/drawings/drawing2.xml", "application/vnd.openxmlformats-officedocument.drawing+xml"}, - {"/xl/charts/chart2.xml", "application/vnd.openxmlformats-officedocument.drawingml.chart+xml"}, - {"/xl/calcChain.xml", "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml"}, - {"/docProps/core.xml", "application/vnd.openxmlformats-package.core-properties+xml"}, - {"/docProps/app.xml", "application/vnd.openxmlformats-officedocument.extended-properties+xml"} - }; - - auto path = path_helper::get_data_directory("reader/contains_chartsheets.xlsx"); - - xlnt::workbook wb; - wb.load(path); - - auto &result = wb.get_manifest().get_parts(); - - if(result.size() != expected.size()) - { - TS_ASSERT_EQUALS(result.size(), expected.size()); - return; - } - - for(std::size_t i = 0; i < expected.size(); i++) - { - TS_ASSERT(wb.get_manifest().has_part(xlnt::path(expected[i].first))); - TS_ASSERT_EQUALS(wb.get_manifest().get_part_content_type_string(xlnt::path(expected[i].first)), expected[i].second); - } - } - - void test_guess_types() - { - bool guess; - xlnt::cell::type dtype; - std::vector> test_cases = {{true, xlnt::cell::type::numeric}, {false, xlnt::cell::type::string}}; - - for(const auto &expected : test_cases) - { - std::tie(guess, dtype) = expected; - auto path = path_helper::get_data_directory("genuine/guess_types.xlsx"); - - xlnt::workbook wb; - wb.set_guess_types(guess); - wb.load(path); - - auto ws = wb.get_active_sheet(); - TS_ASSERT(ws.get_cell("D2").get_data_type() == dtype); - } - } - - void test_read_autofilter() - { - auto path = path_helper::get_data_directory("reader/bug275.xlsx"); - - xlnt::workbook wb; - wb.load(path); - - auto ws = wb.get_active_sheet(); - TS_ASSERT_EQUALS(ws.get_auto_filter().to_string(), "A1:B6"); - } - - void test_bad_formats_xlsb() - { - auto path = path_helper::get_data_directory("genuine/a.xlsb"); - xlnt::workbook wb; - TS_ASSERT_THROWS(wb.load(path), xlnt::invalid_file); - } - - void test_bad_formats_xls() - { - auto path = path_helper::get_data_directory("genuine/a.xls"); - xlnt::workbook wb; - TS_ASSERT_THROWS(wb.load(path), xlnt::invalid_file); - } - - void test_bad_formats_no() - { - auto path = path_helper::get_data_directory("genuine/a.no-format"); - xlnt::workbook wb; - TS_ASSERT_THROWS(wb.load(path), xlnt::invalid_file); - } - - - void test_read_shared_strings_with_runs() - { - xlnt::workbook wb; - wb.load("reader/genuine/a.xlsx"); - - const auto &strings = wb.get_shared_strings(); - - TS_ASSERT_EQUALS(strings.size(), 1); - TS_ASSERT_EQUALS(strings.front().get_runs().size(), 1); - TS_ASSERT_EQUALS(strings.front().get_runs().front().get_size(), 13); - TS_ASSERT_EQUALS(strings.front().get_runs().front().get_color(), "color"); - TS_ASSERT_EQUALS(strings.front().get_runs().front().get_font(), "font"); - TS_ASSERT_EQUALS(strings.front().get_runs().front().get_family(), 12); - TS_ASSERT_EQUALS(strings.front().get_runs().front().get_scheme(), "scheme"); - } - - void test_read_inlinestr() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("genuine/empty.xlsx")); - TS_ASSERT_EQUALS(wb.get_sheet_by_index(0).get_cell("A1").get_value(), "This is cell A1 in Sheet 1"); - } - - void test_determine_document_type() - { - xlnt::workbook wb; - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("1_empty.txt")), xlnt::invalid_file); - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("2_not-empty.txt")), xlnt::invalid_file); - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("3_empty.zip")), xlnt::invalid_file); - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("4_not-package.zip")), xlnt::invalid_file); - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("5_visio.vsdx")), xlnt::invalid_file); - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("6_document.docx")), xlnt::invalid_file); - TS_ASSERT_THROWS(wb.load(path_helper::get_data_directory("7_presentation.pptx")), xlnt::invalid_file); - } -}; diff --git a/source/workbook/tests/test_round_trip.hpp b/source/workbook/tests/test_round_trip.hpp new file mode 100644 index 00000000..0d3dba15 --- /dev/null +++ b/source/workbook/tests/test_round_trip.hpp @@ -0,0 +1,82 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include +#include + +class test_round_trip : public CxxTest::TestSuite +{ +public: + bool round_trip_matches_wr(const xlnt::workbook &original) + { + std::vector serialized; + original.save(serialized); + + xlnt::workbook deserialized; + deserialized.load(serialized); + + return xml_helper::workbooks_match(original, deserialized); + } + + bool round_trip_matches_rw(const xlnt::path &file) + { + xlnt::zip_file original_archive(file); + + xlnt::workbook deserialized; + deserialized.load(file); + + std::vector serialized; + deserialized.save(serialized); + + xlnt::zip_file resulting_archive(serialized); + + return xml_helper::archives_match(original_archive, resulting_archive); + } + + void test_round_trip_minimal_wr() + { + TS_SKIP(""); + xlnt::workbook wb = xlnt::workbook::minimal(); + TS_ASSERT(round_trip_matches_wr(wb)); + } + + void test_round_trip_empty_excel_wr() + { + TS_SKIP(""); + xlnt::workbook wb = xlnt::workbook::empty_excel(); + TS_ASSERT(round_trip_matches_wr(wb)); + } + + void test_round_trip_empty_libre_office_wr() + { + TS_SKIP(""); + xlnt::workbook wb = xlnt::workbook::empty_libre_office(); + TS_ASSERT(round_trip_matches_wr(wb)); + } + + void test_round_trip_empty_pages_wr() + { + TS_SKIP(""); + xlnt::workbook wb = xlnt::workbook::empty_numbers(); + TS_ASSERT(round_trip_matches_wr(wb)); + } + + void test_round_trip_empty_excel_rw() + { + TS_SKIP(""); + auto path = path_helper::get_data_directory("xlsx/8_default-excel.xlsx"); + TS_ASSERT(round_trip_matches_rw(path)); + } + + void test_round_trip_empty_libre_rw() + { + TS_SKIP(""); + auto path = path_helper::get_data_directory("xlsx/9_default-libre-office.xlsx"); + TS_ASSERT(round_trip_matches_rw(path)); + } +}; diff --git a/source/workbook/tests/test_style_reader.hpp b/source/workbook/tests/test_style_reader.hpp deleted file mode 100644 index 1f7d993e..00000000 --- a/source/workbook/tests/test_style_reader.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include -#include - -#include -#include - -class test_style_reader : public CxxTest::TestSuite -{ -public: - void test_complex_formatting() - { - xlnt::workbook wb; - wb.load(path_helper::get_data_directory("reader/formatting.xlsx")); - - // border_style - auto ws = wb.get_active_sheet(); - auto e30 = ws.get_cell("E30"); - TS_ASSERT_EQUALS(e30.get_border().get_side(xlnt::border::side::top).get_color().get_indexed().get_index(), 10); - TS_ASSERT_EQUALS(e30.get_border().get_side(xlnt::border::side::top).get_style(), xlnt::border_style::thin); - - // underline_style - auto f30 = ws.get_cell("F30"); - TS_ASSERT_EQUALS(e30.get_font().get_underline(), xlnt::font::underline_style::none); - TS_ASSERT_EQUALS(f30.get_font().get_underline(), xlnt::font::underline_style::single); - - // gradient fill - auto e21 = ws.get_cell("E21"); - TS_ASSERT_EQUALS(e21.get_fill().get_type(), xlnt::fill::type::gradient); - TS_ASSERT_EQUALS(e21.get_fill().get_gradient_fill().get_type(), xlnt::gradient_fill::type::linear); - TS_ASSERT_EQUALS(e21.get_fill().get_gradient_fill().get_stops().size(), 2); - TS_ASSERT_EQUALS(e21.get_fill().get_gradient_fill().get_stops().at(0).get_rgb().get_hex_string(), "ffff0000"); - TS_ASSERT_EQUALS(e21.get_fill().get_gradient_fill().get_stops().at(1).get_rgb().get_hex_string(), "ff0000ff"); - } -}; diff --git a/source/workbook/tests/test_style_writer.hpp b/source/workbook/tests/test_style_writer.hpp deleted file mode 100644 index c616fe5b..00000000 --- a/source/workbook/tests/test_style_writer.hpp +++ /dev/null @@ -1,365 +0,0 @@ -#pragma once - -#include -#include - -#include - -class test_style_writer : public CxxTest::TestSuite -{ -public: - bool style_xml_matches(const std::string &expected_string, xlnt::workbook &wb) - { - std::vector bytes; - wb.save(bytes); - - xlnt::zip_file archive; - archive.load(bytes); - - pugi::xml_document observed; - observed.load(archive.read(xlnt::constants::part_styles()).c_str()); - - return xml_helper::string_matches_document(expected_string, observed); - } - - void test_write_custom_number_format() - { - xlnt::workbook wb; - wb.get_active_sheet().get_cell("A1").set_number_format(xlnt::number_format("YYYY")); - auto expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - TS_ASSERT(style_xml_matches(expected, wb)); - } - - void test_simple_styles() - { - xlnt::workbook wb; - wb.set_guess_types(true); - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_value("12.34%"); - auto now = xlnt::date::today(); - ws.get_cell("A2").set_value(now); - ws.get_cell("A3").set_value("This is a test"); - ws.get_cell("A4").set_value("31.31415"); - ws.get_cell("A5"); - - ws.get_cell("D9").set_number_format(xlnt::number_format::number_00()); - xlnt::protection locked(true, false); - ws.get_cell("D9").set_protection(locked); - xlnt::protection hidden(true, true); - ws.get_cell("E1").set_protection(hidden); - - xlnt::border b; - xlnt::border::border_property prop; - prop.set_style(xlnt::border_style::dashdot); - prop.set_color(xlnt::rgb_color("ffff0000")); - b.set_side(xlnt::border::side::top, prop); - ws.get_cell("D10").set_border(b); - - auto expected = path_helper::get_data_directory("writer/expected/simple-styles.xml"); - TS_ASSERT(style_xml_matches(expected.read_contents(), wb)); - } - - void test_empty_workbook() - { - xlnt::workbook wb; - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - TS_ASSERT(style_xml_matches(expected, wb)); - } - - void test_complex_font() - { - xlnt::font f; - f.set_bold(true); - f.set_color(xlnt::color::red()); - f.set_family(3); - f.set_italic(true); - f.set_name("Consolas"); - f.set_scheme("major"); - f.set_size(21); - f.set_strikethrough(true); - f.set_underline(xlnt::font::underline_style::double_accounting); - - xlnt::workbook wb; - wb.get_active_sheet().get_cell("A1").set_font(f); - - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - - TS_ASSERT(style_xml_matches(expected, wb)); - } - - void test_alignment() - { - xlnt::workbook wb; - xlnt::alignment a; - a.set_horizontal(xlnt::horizontal_alignment::center_continuous); - a.set_vertical(xlnt::vertical_alignment::justify); - a.set_wrap_text(true); - a.set_shrink_to_fit(true); - wb.get_active_sheet().get_cell("A1").set_alignment(a); - - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - TS_ASSERT(style_xml_matches(expected, wb)); - } - - void test_fill() - { - xlnt::workbook wb; - - xlnt::fill pattern_fill = xlnt::fill::pattern(xlnt::pattern_fill::type::solid); - pattern_fill.get_pattern_fill().set_foreground_color(xlnt::color::red()); - pattern_fill.get_pattern_fill().set_background_color(xlnt::color::blue()); - wb.get_active_sheet().get_cell("A1").set_fill(pattern_fill); - - xlnt::fill gradient_fill_linear = xlnt::fill::gradient(xlnt::gradient_fill::type::linear); - gradient_fill_linear.get_gradient_fill().set_degree(90); - wb.get_active_sheet().get_cell("A1").set_fill(gradient_fill_linear); - - xlnt::fill gradient_fill_path = xlnt::fill::gradient(xlnt::gradient_fill::type::path); - gradient_fill_path.get_gradient_fill().set_gradient_left(1); - gradient_fill_path.get_gradient_fill().set_gradient_right(2); - gradient_fill_path.get_gradient_fill().set_gradient_top(3); - gradient_fill_path.get_gradient_fill().set_gradient_bottom(4); - gradient_fill_path.get_gradient_fill().add_stop(0, xlnt::color::red()); - gradient_fill_path.get_gradient_fill().add_stop(1, xlnt::color::blue()); - wb.get_active_sheet().get_cell("A1").set_fill(gradient_fill_path); - - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - TS_ASSERT(style_xml_matches(expected, wb)); - } -}; diff --git a/source/workbook/tests/test_theme.hpp b/source/workbook/tests/test_theme.hpp index e4eb7a04..46a70a34 100644 --- a/source/workbook/tests/test_theme.hpp +++ b/source/workbook/tests/test_theme.hpp @@ -9,14 +9,4 @@ class test_theme : public CxxTest::TestSuite { -public: - void test_write_theme() - { - xlnt::workbook wb; - wb.set_theme(xlnt::theme()); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/theme1.xml"), - wb, xlnt::constants::part_theme())); - } }; diff --git a/source/workbook/tests/test_workbook.hpp b/source/workbook/tests/test_workbook.hpp index 0947a4ca..34350505 100644 --- a/source/workbook/tests/test_workbook.hpp +++ b/source/workbook/tests/test_workbook.hpp @@ -173,40 +173,6 @@ public: TS_ASSERT_THROWS(wb.remove_named_range("test_nr2"), std::runtime_error); } - void test_write_regular_date() - { - const xlnt::datetime today(2010, 1, 18, 14, 15, 20, 1600); - - xlnt::workbook book; - auto sheet = book.get_active_sheet(); - sheet.get_cell("A1").set_value(today); - temporary_file temp_file; - book.save(temp_file.get_path()); - - xlnt::workbook test_book; - test_book.load(temp_file.get_path()); - auto test_sheet = test_book.get_active_sheet(); - - TS_ASSERT_EQUALS(test_sheet.get_cell("A1").get_value(), today); - } - - void test_write_regular_float() - { - long double float_value = 1.0L / 3.0L; - - xlnt::workbook book; - auto sheet = book.get_active_sheet(); - sheet.get_cell("A1").set_value(float_value); - temporary_file temp_file; - book.save(temp_file.get_path()); - - xlnt::workbook test_book; - test_book.load(temp_file.get_path()); - auto test_sheet = test_book.get_active_sheet(); - - TS_ASSERT_EQUALS(test_sheet.get_cell("A1").get_value(), float_value); - } - void test_post_increment_iterator() { xlnt::workbook wb; @@ -262,7 +228,7 @@ public: xlnt::manifest m; TS_ASSERT(!m.has_default_type("xml")); TS_ASSERT_THROWS(m.get_default_type("xml"), xlnt::key_not_found); - TS_ASSERT(!m.has_part(xlnt::path("xl/workbook.xml"))); + TS_ASSERT(!m.has_package_relationship(xlnt::relationship::type::office_document)); TS_ASSERT_THROWS(m.get_part_relationships(xlnt::path("xl/workbook.xml")), xlnt::key_not_found); } diff --git a/source/workbook/tests/test_write.hpp b/source/workbook/tests/test_write.hpp deleted file mode 100644 index 7ffff15c..00000000 --- a/source/workbook/tests/test_write.hpp +++ /dev/null @@ -1,327 +0,0 @@ -#pragma once - -#include -#include - -#include -#include -#include -#include - -class test_write : public CxxTest::TestSuite -{ -public: - void test_write_empty_workbook() - { - xlnt::workbook wbk; - wbk.get_active_sheet().get_cell("A2").set_value("xlnt"); - wbk.get_active_sheet().get_cell("B5").set_value(88); - wbk.get_active_sheet().get_cell("B5").set_number_format(xlnt::number_format::percentage_00()); - wbk.save(temp_file.get_path()); - - if(temp_file.get_path().exists()) - { - path_helper::delete_file(temp_file.get_path()); - } - - TS_ASSERT(!temp_file.get_path().exists()); - wb_.save(temp_file.get_path()); - TS_ASSERT(temp_file.get_path().exists()); - } - - void test_write_virtual_workbook() - { - xlnt::workbook old_wb; - std::vector saved_wb; - old_wb.save(saved_wb); - xlnt::workbook new_wb; - new_wb.load(saved_wb); - TS_ASSERT_EQUALS(old_wb, new_wb); - } - - void test_write_workbook_rels() - { - xlnt::workbook wb; - wb.add_shared_string(xlnt::text()); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/workbook.xml.rels"), - wb, xlnt::path("xl/_rels/workbook.xml.rels"))); - } - - void test_write_workbook() - { - xlnt::workbook wb; - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/workbook.xml"), - wb, xlnt::path("xl/workbook.xml"))); - } - - void test_write_string_table() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("A1").set_value("hello"); - ws.get_cell("A2").set_value("world"); - ws.get_cell("A3").set_value("nice"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sharedStrings.xml"), - wb, xlnt::path("xl/sharedStrings.xml"))); - } - - void test_write_worksheet() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F42").set_value("hello"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_write_hidden_worksheet() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_page_setup().set_sheet_state(xlnt::sheet_state::hidden); - ws.get_cell("F42").set_value("hello"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_write_bool() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F42").set_value(false); - ws.get_cell("F43").set_value(true); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_bool.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_write_formula() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F1").set_value(10); - ws.get_cell("F2").set_value(32); - ws.get_cell("F3").set_formula("F1+F2"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_bool.xml"), - wb, xlnt::path("writer/expected/sheet1_formula.xml"))); - } - - void test_write_height() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F1").set_value(10); - ws.get_row_properties(ws.get_cell("F1").get_row()).height = 30; - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_height.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_write_hyperlink() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("A1").set_value("test"); - ws.get_cell("A1").set_hyperlink("http://test.com"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_hyperlink.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_write_hyperlink_rels() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("A1").set_value("test"); - ws.get_cell("A1").set_hyperlink("http://test.com/"); - ws.get_cell("A2").set_value("test"); - ws.get_cell("A2").set_hyperlink("http://test2.com/"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_hyperlink.xml.rels"), - wb, xlnt::path("xl/worksheets/_rels/sheet1.xml.rels"))); - } - - void _test_write_hyperlink_image_rels() - { - TS_SKIP("not implemented"); - } - - void test_hyperlink_value() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("A1").set_hyperlink("http://test.com"); - TS_ASSERT_EQUALS("http://test.com", ws.get_cell("A1").get_value()); - ws.get_cell("A1").set_value("test"); - TS_ASSERT_EQUALS("test", ws.get_cell("A1").get_value()); - } - - void test_write_auto_filter() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F42").set_value("hello"); - ws.auto_filter("A1:F1"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_auto_filter.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/workbook_auto_filter.xml"), - wb, xlnt::path("xl/workbook.xml"))); - } - - void test_write_auto_filter_filter_column() - { - - } - - void test_write_auto_filter_sort_condition() - { - - } - - void test_freeze_panes_horiz() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F42").set_value("hello"); - ws.freeze_panes("A4"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_freeze_panes_horiz.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_freeze_panes_vert() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F42").set_value("hello"); - ws.freeze_panes("D1"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_freeze_panes_vert.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_freeze_panes_both() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.get_cell("F42").set_value("hello"); - ws.freeze_panes("D4"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/sheet1_freeze_panes_both.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_long_number() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_value(9781231231230LL); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/long_number.xml"), - wb, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_short_number() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_value(1234567890); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/short_number.xml"), - wb_, xlnt::path("xl/worksheets/sheet1.xml"))); - } - - void test_write_page_setup() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - auto &page_setup = ws.get_page_setup(); - TS_ASSERT(page_setup.is_default()); - - page_setup.set_break(xlnt::page_break::column); - page_setup.set_fit_to_height(true); - page_setup.set_fit_to_page(true); - page_setup.set_fit_to_width(true); - page_setup.set_horizontal_centered(true); - page_setup.set_orientation(xlnt::orientation::landscape); - page_setup.set_paper_size(xlnt::paper_size::a5); - page_setup.set_scale(4.0); - page_setup.set_sheet_state(xlnt::sheet_state::visible); - page_setup.set_vertical_centered(true); - - TS_ASSERT(!page_setup.is_default()); - - std::vector bytes; - wb.save(bytes); - - xlnt::zip_file archive; - archive.load(bytes); - auto worksheet_xml_string = archive.read(xlnt::path("xl/worksheets/sheet1.xml")); - - pugi::xml_document worksheet_xml; - worksheet_xml.load(worksheet_xml_string.c_str()); - - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - - TS_ASSERT(xml_helper::string_matches_document(expected, worksheet_xml)); - } - - private: - temporary_file temp_file; - xlnt::workbook wb_; -}; diff --git a/source/workbook/tests/test_write_workbook.hpp b/source/workbook/tests/test_write_workbook.hpp deleted file mode 100644 index ff0d4934..00000000 --- a/source/workbook/tests/test_write_workbook.hpp +++ /dev/null @@ -1,219 +0,0 @@ -#pragma once - -#include -#include - -#include -#include -#include - -class test_write_workbook : public CxxTest::TestSuite -{ -public: - void test_write_auto_filter() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.get_cell("F42").set_value("hello"); - ws.auto_filter("A1:F1"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/workbook_auto_filter.xml"), - wb, xlnt::path("xl/workbook.xml"))); - } - - void test_write_hidden_worksheet() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - - ws.set_sheet_state(xlnt::sheet_state::hidden); - wb.create_sheet(); - - std::string expected_string = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - - TS_ASSERT(xml_helper::string_matches_workbook_part(expected_string, - wb, xlnt::path("xl/workbook.xml"))); - } - - void test_write_hidden_single_worksheet() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.set_sheet_state(xlnt::sheet_state::hidden); - std::vector trash; - TS_ASSERT_THROWS(wb.save(trash), xlnt::no_visible_worksheets); - } - - void test_write_empty_workbook() - { - xlnt::workbook wb; - temporary_file file; - - TS_ASSERT(!file.get_path().exists()) - wb.save(file.get_path()); - TS_ASSERT(file.get_path().exists()); - } - - void test_write_virtual_workbook() - { - xlnt::workbook old_wb, new_wb; - - std::vector wb_bytes; - old_wb.save(wb_bytes); - new_wb.load(wb_bytes); - - // TODO more tests! - } - - void test_write_workbook_rels() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - ws.get_cell("A1").set_value("string"); - - TS_ASSERT(xml_helper::file_matches_workbook_part( - path_helper::get_data_directory("writer/expected/workbook.xml.rels"), - wb, xlnt::path("xl/_rels/workbook.xml.rels"))); - } - - void test_write_workbook_part() - { - xlnt::workbook wb; - - auto filename = path_helper::get_data_directory("writer/expected/workbook.xml"); - TS_ASSERT(xml_helper::file_matches_workbook_part(filename, wb, xlnt::path("xl/_rels/workbook.xml.rels"))); - } - - void _test_write_named_range() - { - /* - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - wb.create_named_range("test_range", ws, "$A$1:$B$5"); - xlnt::workbook_serializer serializer(wb); - pugi::xml_document xml; - auto root = xml.root().append_child("root"); - serializer.write_named_ranges(root); - std::string expected = - "" - "'Sheet'!$A$1:$B$5" - ""; - - TS_ASSERT(xml_helper::string_matches_document(expected, xml)); - */ - } - - void test_read_workbook_code_name() - { -// with open(tmpl, "rb") as expected: -// TS_ASSERT(read_workbook_code_name(expected.read()) == code_name - } - - void test_write_workbook_code_name() - { - xlnt::workbook wb; - wb.set_code_name("MyWB"); - - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - - TS_ASSERT(xml_helper::string_matches_workbook_part(expected, wb, xlnt::path("xl/workbook.xml"))); - } - - void test_write_root_rels() - { - xlnt::workbook wb; - - std::string expected = - "" - " " - " " - " " - ""; - - TS_ASSERT(xml_helper::string_matches_workbook_part(expected, wb, xlnt::path("_rels/.rels"))); - } - - void test_write_shared_strings_with_runs() - { - xlnt::workbook wb; - auto ws = wb.get_active_sheet(); - auto cell = ws.get_cell("A1"); - xlnt::text_run run; - run.set_color("color"); - run.set_family(12); - run.set_font("font"); - run.set_scheme("scheme"); - run.set_size(13); - run.set_string("string"); - xlnt::text text; - text.add_run(run); - cell.set_value(text); - - std::string expected = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " string" - " " - " " - ""; - - TS_ASSERT(xml_helper::string_matches_workbook_part(expected, wb, - xlnt::constants::part_shared_strings())); - } - - void test_write_worksheet_order() - { - auto path = path_helper::get_data_directory("genuine/tab_order.xlsx"); - - // Load an original workbook produced by Excel - xlnt::workbook wb_src; - wb_src.load(path); - - // Save it to a new file, unmodified - temporary_file file; - wb_src.save(file.get_path()); - TS_ASSERT(file.get_path().exists()); - - // Load it again - xlnt::workbook wb_dst; - wb_dst.load(file.get_path()); - - TS_ASSERT_EQUALS(wb_src.get_sheet_titles(), wb_dst.get_sheet_titles()); - } - -private: - xlnt::workbook wb_; -}; diff --git a/source/workbook/workbook.cpp b/source/workbook/workbook.cpp index bd1c8fb3..6584f735 100644 --- a/source/workbook/workbook.cpp +++ b/source/workbook/workbook.cpp @@ -63,13 +63,22 @@ workbook workbook::minimal() auto impl = new detail::workbook_impl(); workbook wb(impl); - wb.d_->worksheets_.push_back(detail::worksheet_impl(&wb, 1, "Sheet")); + wb.d_->manifest_.register_default_type("rels", + "application/vnd.openxmlformats-package.relationships+xml"); - wb.d_->manifest_.register_package_part(path("workbook.xml"), - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", - relationship::type::workbook); - wb.d_->manifest_.register_part(path("sheet1.xml"), path("workbook.xml"), - "worksheet", relationship::type::worksheet); + wb.d_->manifest_.register_override_type(path("workbook.xml"), + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"); + wb.d_->manifest_.register_package_relationship(relationship::type::office_document, + path("workbook.xml"), target_mode::internal); + + std::string title("Sheet"); + wb.d_->worksheets_.push_back(detail::worksheet_impl(&wb, 1, title)); + + wb.d_->manifest_.register_override_type(path("sheet1.xml"), + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"); + auto ws_rel = wb.d_->manifest_.register_part_relationship(path("workbook.xml"), + relationship::type::worksheet, path("sheet1.xml"), target_mode::internal); + wb.d_->sheet_title_rel_id_map_[title] = ws_rel; return wb; } @@ -79,15 +88,52 @@ workbook workbook::empty_excel() auto impl = new detail::workbook_impl(); xlnt::workbook wb(impl); - wb.d_->manifest_.register_package_part(path("docProps/core.xml"), - "application/vnd.openxmlformats-package.coreproperties+xml", - relationship::type::core_properties); - wb.d_->manifest_.register_package_part(path("docProps/app.xml"), - "application/vnd.openxmlformats-officedocument.extended-properties+xml", - relationship::type::extended_properties); - wb.d_->manifest_.register_package_part(path("xl/workbook.xml"), - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", - relationship::type::workbook); + wb.d_->manifest_.register_override_type(path("xl/workbook.xml"), + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"); + wb.d_->manifest_.register_package_relationship(relationship::type::office_document, + path("xl/workbook.xml"), target_mode::internal); + + wb.d_->manifest_.register_default_type("rels", + "application/vnd.openxmlformats-package.relationships+xml"); + wb.d_->manifest_.register_default_type("xml", "application/xml"); + + const std::vector thumbnail = { + 0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x01, + 0x00,0x60,0x00,0x60,0x00,0x00,0xff,0xe1,0x00,0x16,0x45,0x78,0x69,0x66, + 0x00,0x00,0x49,0x49,0x2a,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0xff,0xdb,0x00,0x43,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, + 0xff,0xc0,0x00,0x11,0x08,0x00,0x01,0x00,0x01,0x03,0x01,0x22,0x00,0x02, + 0x11,0x01,0x03,0x11,0x01,0xff,0xc4,0x00,0x15,0x00,0x01,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a, + 0xff,0xc4,0x00,0x14,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc4,0x00,0x14,0x01,0x01, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xff,0xc4,0x00,0x14,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xda,0x00,0x0c, + 0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xbf,0x80,0x01,0xff, + 0xd9 + }; + + wb.set_thumbnail(thumbnail, "jpeg", "image/jpeg"); + + wb.d_->manifest_.register_override_type(path("docProps/core.xml"), + "application/vnd.openxmlformats-package.coreproperties+xml"); + wb.d_->manifest_.register_package_relationship(relationship::type::core_properties, + path("docProps/core.xml"), target_mode::internal); + + wb.d_->manifest_.register_override_type(path("docProps/app.xml"), + "application/vnd.openxmlformats-officedocument.extended-properties+xml"); + wb.d_->manifest_.register_package_relationship(relationship::type::extended_properties, + path("docProps/app.xml"), target_mode::internal); wb.set_application("Microsoft Excel"); wb.create_sheet(); @@ -236,10 +282,12 @@ worksheet workbook::create_sheet() d_->worksheets_.push_back(detail::worksheet_impl(this, sheet_id, title)); - auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::workbook); - d_->manifest_.register_part(sheet_path, workbook_rel.get_target_uri(), - "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml", - relationship::type::worksheet); + auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::office_document); + d_->manifest_.register_override_type(sheet_path, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"); + auto ws_rel = d_->manifest_.register_part_relationship(workbook_rel.get_target_uri(), + relationship::type::worksheet, sheet_path, target_mode::internal); + d_->sheet_title_rel_id_map_[title] = ws_rel; return worksheet(&d_->worksheets_.back()); } @@ -343,24 +391,24 @@ void workbook::load(const path &filename) consumer.read(filename); } -void workbook::save(std::vector &data) +void workbook::save(std::vector &data) const { detail::xlsx_producer producer(*this); producer.write(data); } -void workbook::save(const std::string &filename) +void workbook::save(const std::string &filename) const { return save(path(filename)); } -void workbook::save(const path &filename) +void workbook::save(const path &filename) const { detail::xlsx_producer producer(*this); producer.write(filename); } -void workbook::save(std::ostream &stream) +void workbook::save(std::ostream &stream) const { detail::xlsx_producer producer(*this); producer.write(stream); @@ -563,11 +611,14 @@ const theme &workbook::get_theme() const void workbook::set_theme(const theme &value) { - if (!d_->manifest_.has_part(constants::part_theme())) + auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::office_document); + + if (!d_->manifest_.has_part_relationship(workbook_rel.get_target_uri(), relationship::type::theme)) { - auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::workbook); - d_->manifest_.register_part(constants::part_theme(), workbook_rel.get_target_uri(), - "theme", relationship::type::theme); + d_->manifest_.register_override_type(constants::part_theme(), + "application/vnd.openxmlformats-officedocument.theme+xml"); + d_->manifest_.register_part_relationship(workbook_rel.get_target_uri(), + relationship::type::theme, constants::part_theme(), target_mode::internal); } d_->has_theme_ = true; @@ -591,12 +642,14 @@ std::vector workbook::get_named_ranges() const std::size_t workbook::add_format(const format &to_add) { - if (!d_->manifest_.has_part(constants::part_styles())) + auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::office_document); + + if (!d_->manifest_.has_part_relationship(workbook_rel.get_target_uri(), relationship::type::styles)) { - auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::workbook); - d_->manifest_.register_part(constants::part_styles(), workbook_rel.get_target_uri(), - "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml", - relationship::type::styles); + d_->manifest_.register_override_type(constants::part_styles(), + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"); + d_->manifest_.register_part_relationship(workbook_rel.get_target_uri(), + relationship::type::styles, constants::part_styles(), target_mode::internal); } return d_->stylesheet_.add_format(to_add); @@ -604,12 +657,14 @@ std::size_t workbook::add_format(const format &to_add) std::size_t workbook::add_style(const style &to_add) { - if (!d_->manifest_.has_part(constants::part_styles())) + auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::office_document); + + if (!d_->manifest_.has_part_relationship(workbook_rel.get_target_uri(), relationship::type::styles)) { - auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::workbook); - d_->manifest_.register_part(constants::part_styles(), workbook_rel.get_target_uri(), - "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml", - relationship::type::styles); + d_->manifest_.register_override_type(constants::part_styles(), + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"); + d_->manifest_.register_part_relationship(workbook_rel.get_target_uri(), + relationship::type::styles, constants::part_styles(), target_mode::internal); } return d_->stylesheet_.add_style(to_add); @@ -686,12 +741,14 @@ const std::vector &workbook::get_shared_strings() const void workbook::add_shared_string(const text &shared, bool allow_duplicates) { - if (!d_->manifest_.has_part(constants::part_shared_strings())) + auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::office_document); + + if (!d_->manifest_.has_part_relationship(workbook_rel.get_target_uri(), relationship::type::shared_string_table)) { - auto workbook_rel = d_->manifest_.get_package_relationship(relationship::type::workbook); - d_->manifest_.register_part(constants::part_shared_strings(), workbook_rel.get_target_uri(), - "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml", - relationship::type::shared_string_table); + d_->manifest_.register_override_type(constants::part_shared_strings(), + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"); + d_->manifest_.register_part_relationship(workbook_rel.get_target_uri(), + relationship::type::shared_string_table, constants::part_shared_strings(), target_mode::internal); } if (!allow_duplicates) @@ -716,8 +773,13 @@ bool workbook::contains(const std::string &sheet_title) const return false; } -void workbook::set_thumbnail(const std::vector &thumbnail) +void workbook::set_thumbnail(const std::vector &thumbnail, + const std::string &extension, const std::string &content_type) { + d_->manifest_.register_default_type(extension, content_type); + d_->manifest_.register_package_relationship(relationship::type::thumbnail, + path("docProps/thumbnail.jpeg"), target_mode::internal); + d_->thumbnail_.assign(thumbnail.begin(), thumbnail.end()); } diff --git a/source/worksheet/tests/test_worksheet.hpp b/source/worksheet/tests/test_worksheet.hpp index 9c18b116..7dbb756c 100644 --- a/source/worksheet/tests/test_worksheet.hpp +++ b/source/worksheet/tests/test_worksheet.hpp @@ -520,47 +520,32 @@ public: void test_print_titles_old() { xlnt::workbook wb; + + auto ws = wb.create_sheet(); + ws.add_print_title(3); + TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet1!1:3"); - { - wb.clear(); - auto ws = wb.create_sheet(); - ws.add_print_title(3); - TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet!1:3"); - } - - { - wb.clear(); - auto ws = wb.create_sheet(); - ws.add_print_title(4, "cols"); - TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet!A:D"); - } + auto ws2 = wb.create_sheet(); + ws2.add_print_title(4, "cols"); + TS_ASSERT_EQUALS(ws2.get_print_titles(), "Sheet2!A:D"); } void test_print_titles_new() { xlnt::workbook wb; - { - wb.clear(); - auto ws = wb.create_sheet(); - ws.set_print_title_rows("1:4"); - TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet!1:4"); - } - - { - wb.clear(); - auto ws = wb.create_sheet(); - ws.set_print_title_cols("A:F"); - TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet!A:F"); - } + auto ws = wb.create_sheet(); + ws.set_print_title_rows("1:4"); + TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet1!1:4"); - { - wb.clear(); - auto ws = wb.create_sheet(); - ws.set_print_title_rows("1:2"); - ws.set_print_title_cols("C:D"); - TS_ASSERT_EQUALS(ws.get_print_titles(), "Sheet!1:2,Sheet!C:D"); - } + auto ws2 = wb.create_sheet(); + ws2.set_print_title_cols("A:F"); + TS_ASSERT_EQUALS(ws2.get_print_titles(), "Sheet2!A:F"); + + auto ws3 = wb.create_sheet(); + ws3.set_print_title_rows("1:2"); + ws3.set_print_title_cols("C:D"); + TS_ASSERT_EQUALS(ws3.get_print_titles(), "Sheet3!1:2,Sheet3!C:D"); } void test_print_area() diff --git a/tests/data/2_not-empty.txt b/tests/data/2_not-empty.txt deleted file mode 100644 index 041ecf26..00000000 --- a/tests/data/2_not-empty.txt +++ /dev/null @@ -1 +0,0 @@ -not-empty diff --git a/tests/data/4_not-package.zip b/tests/data/4_not-package.zip deleted file mode 100644 index d80e9910d0c22a6cbf7be52cf30926e22e4488ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmWIWW@h1H0D;&Y-#mggSDAr$Ak5Do!(bGjmtUfrnp;p(saH}_5*otEz?^h%Quy@; zlfp|YxEUB(zA`c}u!sPa!xeG`cr!A|G2=2+0;raO0jP^%Nh64bVFfG13N+&byjj^m O${B$$6i5eyI1B)*c_=dg diff --git a/tests/data/5_visio.zip b/tests/data/5_visio.zip deleted file mode 100644 index 32b6589ec16f8174d5bb19ae5c0149efc838dcf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21063 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 NI^o{Hm*VHA{{v-uy72%2 diff --git a/tests/data/genuine/empty-no-string.xlsx b/tests/data/genuine/empty-no-string.xlsx deleted file mode 100644 index 39490ac32434e02546ef2a888f12dedf4f5b58f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7842 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 diff --git a/tests/data/genuine/empty-with-styles.xlsx b/tests/data/genuine/empty-with-styles.xlsx deleted file mode 100644 index 250e9b4365699542af00bce79d17024ea1ae1131..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7511 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 diff --git a/tests/data/genuine/empty.xlsx b/tests/data/genuine/empty.xlsx deleted file mode 100644 index 1b9e826b0de1fd86ede8a1ff29e816445c3f8581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9782 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 A^Z)<= diff --git a/tests/data/genuine/empty_libre.xlsx b/tests/data/genuine/empty_libre.xlsx deleted file mode 100644 index 9b66aa08820a3e8ec0677c0aab04d26dae4a70e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8107 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 diff --git a/tests/data/genuine/empty_no_dimensions.xlsx b/tests/data/genuine/empty_no_dimensions.xlsx deleted file mode 100644 index e402883cb832541b75ff0e0eac09e26766fca02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10300 zcmb7~1yq$=(|`}seP|Djgdm;L4bt66cOFteN;-r?iy)l}(xpgY?~5Ex^4^>5BNuiL^A4QY9n4(vt({57KGBtlEFvWSaQQV>>SP;N|oMB)O)5%n=FjS2)xnp5r|Xk$zyOJ&tFYS zTzyFP!Y#kGjIzZvpzq8$%@JWXaPVBLH$8lN3&#Svin$7v)X68fWoP)p&51w^6^oHd z5?k;~ouuuUD3z*M_E5@T8k>4(q$F=^0Ft^H`ZVGY=e#mQ#a8w+9DnA_l&Wm71gljr--lHQr<0FeCY2*#OjD=% zd`NpD$v57QS1`!rhg$-32B-zkDNMbL=U+TWLJ%|UxXwXf;_)0nerm!av|(BG$R|?| z1NMpCr`Of}+N-adsaXael4ujh!KPfZe}0my0qggXQ8^+QX-3c6I#3qw%*26(&qu=Tww?rkS6Oe ztb)9oKk1pM)CtlZq5i7$;yph$lk=?T*Sgrk3|yieEQX9y z>BbE)_A(aG`clm0(gAvtGe`I?oU}P@mU|+=Rqv7OWM
-9^4#wUfrDm68W&%)&# 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 K=0Nf7*Z%=_7p>0# diff --git a/tests/data/genuine/empty_with_no_properties.xlsx b/tests/data/genuine/empty_with_no_properties.xlsx deleted file mode 100644 index 8eaa8729f05fddf36996d42248d3394618fcb944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9476 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 MhH!QsG6n$ne}ZOyW&i*H diff --git a/tests/data/genuine/guess_types.xlsx b/tests/data/genuine/guess_types.xlsx deleted file mode 100644 index 5cfa19ff8e95c03f555c992492e5abfc3d1b52af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30133 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 T++d&zH~2?@d-R6i;;VlFf}8Yn diff --git a/tests/data/genuine/libreoffice_nrt.xlsx b/tests/data/genuine/libreoffice_nrt.xlsx deleted file mode 100644 index cdf0724d9ec7363b53e6d2cd11bd351b68ae158b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4534 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 diff --git a/tests/data/genuine/number_empty_shared_strings.xlsx b/tests/data/genuine/number_empty_shared_strings.xlsx deleted file mode 100644 index 4caadb75411fccc7374629ea90681f6fbf9f7b9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502196 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