From a03805acbf8672b19db405ec36fde6d989efad92 Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Sun, 11 Sep 2016 14:57:34 -0400 Subject: [PATCH] begin testing styles more extensively --- appveyor.yml => .appveyor.yml | 0 source/detail/xlsx_consumer.cpp | 49 +++++++++++++------- source/detail/xlsx_producer.cpp | 17 ++++++- source/workbook/tests/test_produce_xlsx.hpp | 41 +++++++--------- source/workbook/tests/test_round_trip.hpp | 11 +++++ tests/data/13_all_styles.xlsx | Bin 0 -> 43567 bytes 6 files changed, 77 insertions(+), 41 deletions(-) rename appveyor.yml => .appveyor.yml (100%) create mode 100644 tests/data/13_all_styles.xlsx diff --git a/appveyor.yml b/.appveyor.yml similarity index 100% rename from appveyor.yml rename to .appveyor.yml diff --git a/source/detail/xlsx_consumer.cpp b/source/detail/xlsx_consumer.cpp index 54864eba..f51e22d5 100644 --- a/source/detail/xlsx_consumer.cpp +++ b/source/detail/xlsx_consumer.cpp @@ -652,6 +652,32 @@ void xlsx_consumer::populate_workbook() const auto workbook_rel = manifest.get_relationship(path("/"), relationship::type::office_document); + // First pass of workbook relationship parts which must be read before sheets (e.g. shared strings) + + for (const auto &rel : manifest.get_relationships(workbook_rel.get_target().get_path())) + { + pugi::xml_document document; + path part_path(rel.get_source().get_path().parent().append(rel.get_target().get_path())); + document.load_string(source_.read(part_path).c_str()); + + switch (rel.get_type()) + { + case relationship::type::shared_string_table: + read_shared_string_table(document); + break; + case relationship::type::styles: + read_stylesheet(document); + break; + case relationship::type::theme: + read_theme(document); + break; + default: + break; + } + } + + // Second pass, read sheets themselves + for (const auto &rel : manifest.get_relationships(workbook_rel.get_target().get_path())) { pugi::xml_document document; @@ -669,25 +695,11 @@ void xlsx_consumer::populate_workbook() case relationship::type::worksheet: read_worksheet(document.root(), rel.get_id()); break; - case relationship::type::shared_string_table: - read_shared_string_table(document); - break; - case relationship::type::styles: - read_stylesheet(document); - break; - case relationship::type::theme: - read_theme(document); - break; default: break; } } - // Sheet Relationship Target Parts - - void read_comments(); - void read_drawings(); - // Unknown Parts void read_unknown_parts(); @@ -1173,9 +1185,12 @@ void xlsx_consumer::read_stylesheet(const pugi::xml_node root) format.protection(protection, protection_applied); // Style - auto style_index = string_to_size_t(xf_node.attribute("xfId").value()); - auto style_name = stylesheet.styles.at(style_index).name(); - format.style(stylesheet.get_style(style_name)); + if (xf_node.attribute("xfId")) + { + auto style_index = string_to_size_t(xf_node.attribute("xfId").value()); + auto style_name = stylesheet.styles.at(style_index).name(); + format.style(stylesheet.get_style(style_name)); + } } } diff --git a/source/detail/xlsx_producer.cpp b/source/detail/xlsx_producer.cpp index bd436097..e3de2122 100644 --- a/source/detail/xlsx_producer.cpp +++ b/source/detail/xlsx_producer.cpp @@ -762,8 +762,23 @@ void xlsx_producer::write_shared_string_table(const relationship &rel, pugi::xml auto sst_node = root.append_child("sst"); sst_node.append_attribute("xmlns").set_value("http://schemas.openxmlformats.org/spreadsheetml/2006/main"); + std::size_t string_count = 0; - sst_node.append_attribute("count").set_value(std::to_string(source_.get_shared_strings().size()).c_str()); + for (const auto ws : source_) + { + for (const auto row : ws.rows()) + { + for (const auto cell : row) + { + if (cell.get_data_type() == cell::type::string) + { + ++string_count; + } + } + } + } + + sst_node.append_attribute("count").set_value(std::to_string(string_count).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()) diff --git a/source/workbook/tests/test_produce_xlsx.hpp b/source/workbook/tests/test_produce_xlsx.hpp index 8f921c7d..ecf85bd9 100644 --- a/source/workbook/tests/test_produce_xlsx.hpp +++ b/source/workbook/tests/test_produce_xlsx.hpp @@ -88,37 +88,32 @@ public: ws.get_cell("A12").set_value("number (std::uint64_t)"); ws.get_cell("B12").set_value(std::numeric_limits::max()); -#if UINT64_MAX != SIZE_MAX && UINT32_MAX != SIZE_MAX - ws.get_cell("A13").set_value("number (std::size_t)"); - ws.get_cell("B13").set_value(std::numeric_limits::max()); -#endif + ws.get_cell("A13").set_value("number (float)"); + ws.get_cell("B13").set_value(std::numeric_limits::max()); - ws.get_cell("A14").set_value("number (float)"); - ws.get_cell("B14").set_value(std::numeric_limits::max()); + ws.get_cell("A14").set_value("number (double)"); + ws.get_cell("B14").set_value(std::numeric_limits::max()); - ws.get_cell("A15").set_value("number (double)"); - ws.get_cell("B15").set_value(std::numeric_limits::max()); + ws.get_cell("A15").set_value("number (long double)"); + ws.get_cell("B15").set_value(std::numeric_limits::max()); - ws.get_cell("A16").set_value("number (long double)"); - ws.get_cell("B16").set_value(std::numeric_limits::max()); + ws.get_cell("A16").set_value("text (char *)"); + ws.get_cell("B16").set_value("string"); - ws.get_cell("A17").set_value("text (char *)"); - ws.get_cell("B17").set_value("string"); + ws.get_cell("A17").set_value("text (std::string)"); + ws.get_cell("B17").set_value(std::string("string")); - ws.get_cell("A18").set_value("text (std::string)"); - ws.get_cell("B18").set_value(std::string("string")); + ws.get_cell("A18").set_value("date"); + ws.get_cell("B18").set_value(xlnt::date(2016, 2, 3)); - ws.get_cell("A19").set_value("date"); - ws.get_cell("B19").set_value(xlnt::date(2016, 2, 3)); + ws.get_cell("A19").set_value("time"); + ws.get_cell("B19").set_value(xlnt::time(1, 2, 3, 4)); - ws.get_cell("A20").set_value("time"); - ws.get_cell("B20").set_value(xlnt::time(1, 2, 3, 4)); + ws.get_cell("A20").set_value("datetime"); + ws.get_cell("B20").set_value(xlnt::datetime(2016, 2, 3, 1, 2, 3, 4)); - ws.get_cell("A21").set_value("datetime"); - ws.get_cell("B21").set_value(xlnt::datetime(2016, 2, 3, 1, 2, 3, 4)); - - ws.get_cell("A22").set_value("timedelta"); - ws.get_cell("B22").set_value(xlnt::timedelta(1, 2, 3, 4, 5)); + ws.get_cell("A21").set_value("timedelta"); + ws.get_cell("B21").set_value(xlnt::timedelta(1, 2, 3, 4, 5)); ws.freeze_panes("B2"); diff --git a/source/workbook/tests/test_round_trip.hpp b/source/workbook/tests/test_round_trip.hpp index 39d3e33d..604d65ea 100644 --- a/source/workbook/tests/test_round_trip.hpp +++ b/source/workbook/tests/test_round_trip.hpp @@ -97,4 +97,15 @@ public: auto path = path_helper::get_data_directory("10_default-libre-office.xlsx"); TS_ASSERT(round_trip_matches_rw(path)); } + + void test_round_trip_all_styles_rw() + { + auto path = path_helper::get_data_directory("13_all_styles.xlsx"); + xlnt::workbook original_workbook; + original_workbook.load(path); + + std::vector buffer; + original_workbook.save(buffer); +// TS_ASSERT(round_trip_matches_rw(path)); + } }; diff --git a/tests/data/13_all_styles.xlsx b/tests/data/13_all_styles.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..829eb176971bd1a0217d37c2b5d06d926b19cc99 GIT binary patch literal 43567 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%0DMsfilWl9?i#}tt2N`4UW$y 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