From b10b2a2bd3df78b558f0a79997886a9dd69d433b Mon Sep 17 00:00:00 2001 From: Thomas Fussell Date: Fri, 22 Jul 2016 22:48:50 -0400 Subject: [PATCH] test manifest --- source/detail/excel_serializer.cpp | 21 ++++++++------------- source/workbook/tests/test_workbook.hpp | 6 ++++++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/source/detail/excel_serializer.cpp b/source/detail/excel_serializer.cpp index ce11d44c..2eb5b358 100644 --- a/source/detail/excel_serializer.cpp +++ b/source/detail/excel_serializer.cpp @@ -148,26 +148,21 @@ bool load_workbook(xlnt::zip_file &archive, bool guess_types, bool data_only, xl style_xml.load(archive.read(xlnt::constants::part_styles()).c_str()); style_serializer.read_stylesheet(style_xml); - auto sheets_node = root_node.child("sheets"); - - for (auto sheet_node : sheets_node.children()) + for (auto sheet_node : root_node.child("sheets").children()) { auto rel = wb.get_relationship(sheet_node.attribute("r:id").value()); - auto ws = wb.create_sheet(sheet_node.attribute("name").value(), rel); - - //TODO: this is really bad - auto ws_filename = (rel.get_target_uri().substr(0, 3) != "xl/" ? "xl/" : "") + rel.get_target_uri(); - - auto sheet_type = wb.get_manifest().get_override_type(ws_filename); - - if(rel.get_type() != xlnt::relationship::type::worksheet) + + // TODO impelement chartsheets + if(rel.get_type() == xlnt::relationship::type::chartsheet) { continue; } - + + auto ws = wb.create_sheet(sheet_node.attribute("name").value(), rel); xlnt::worksheet_serializer worksheet_serializer(ws); pugi::xml_document worksheet_xml; - worksheet_xml.load(archive.read(ws_filename).c_str()); + worksheet_xml.load(archive.read("xl/" + rel.get_target_uri()).c_str()); + worksheet_serializer.read_worksheet(worksheet_xml, stylesheet); } diff --git a/source/workbook/tests/test_workbook.hpp b/source/workbook/tests/test_workbook.hpp index fcd5c6de..97acd01a 100644 --- a/source/workbook/tests/test_workbook.hpp +++ b/source/workbook/tests/test_workbook.hpp @@ -303,6 +303,12 @@ public: xlnt::override_type o; TS_ASSERT(o.get_content_type().empty()); TS_ASSERT(o.get_part_name().empty()); + + xlnt::manifest m; + TS_ASSERT(!m.has_default_type("xml")); + TS_ASSERT_THROWS(m.get_default_type("xml"), std::out_of_range); + TS_ASSERT(!m.has_override_type("xl/workbook.xml")); + TS_ASSERT_THROWS(m.get_override_type("xl/workbook.xml"), std::out_of_range); } void test_get_bad_relationship()