mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
fix sheet deletion, #71
This commit is contained in:
parent
071f5962c2
commit
0a80c302b3
|
@ -94,6 +94,11 @@ public:
|
||||||
/// </summary>
|
/// </summary>
|
||||||
std::string register_relationship(const uri &source, relationship::type type, const uri &target, target_mode mode, const std::string &rel_id);
|
std::string register_relationship(const uri &source, relationship::type type, const uri &target, target_mode mode, const std::string &rel_id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
void unregister_relationship(const uri &source, const std::string &rel_id);
|
||||||
|
|
||||||
// Content Types
|
// Content Types
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -98,6 +98,11 @@ void manifest::register_override_type(const path &part, const std::string &conte
|
||||||
override_content_types_[part] = content_type;
|
override_content_types_[part] = content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void manifest::unregister_override_type(const path &part)
|
||||||
|
{
|
||||||
|
override_content_types_.erase(part);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<path> manifest::get_parts_with_overriden_types() const
|
std::vector<path> manifest::get_parts_with_overriden_types() const
|
||||||
{
|
{
|
||||||
std::vector<path> overriden;
|
std::vector<path> overriden;
|
||||||
|
@ -176,6 +181,11 @@ std::string manifest::register_relationship(const uri &source, relationship::typ
|
||||||
return rel_id;
|
return rel_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void manifest::unregister_relationship(const uri &source, const std::string &rel_id)
|
||||||
|
{
|
||||||
|
relationships_.at(source.get_path()).erase(rel_id);
|
||||||
|
}
|
||||||
|
|
||||||
bool manifest::has_default_type(const std::string &extension) const
|
bool manifest::has_default_type(const std::string &extension) const
|
||||||
{
|
{
|
||||||
return default_content_types_.find(extension) != default_content_types_.end();
|
return default_content_types_.find(extension) != default_content_types_.end();
|
||||||
|
|
|
@ -121,4 +121,20 @@ public:
|
||||||
|
|
||||||
wb.save("simple.xlsx");
|
wb.save("simple.xlsx");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_save_after_sheet_deletion()
|
||||||
|
{
|
||||||
|
xlnt::workbook workbook;
|
||||||
|
|
||||||
|
TS_ASSERT_EQUALS(workbook.get_sheet_titles().size(), 1);
|
||||||
|
|
||||||
|
auto sheet = workbook.create_sheet();
|
||||||
|
sheet.set_title("XXX1");
|
||||||
|
TS_ASSERT_EQUALS(workbook.get_sheet_titles().size(), 2);
|
||||||
|
|
||||||
|
workbook.remove_sheet(workbook.get_sheet_by_title("XXX1"));
|
||||||
|
TS_ASSERT_EQUALS(workbook.get_sheet_titles().size(), 1);
|
||||||
|
|
||||||
|
TS_ASSERT_THROWS_NOTHING(workbook.save("sample.xlsx"));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -694,15 +694,19 @@ bool workbook::get_guess_types() const
|
||||||
void workbook::remove_sheet(worksheet ws)
|
void workbook::remove_sheet(worksheet ws)
|
||||||
{
|
{
|
||||||
auto match_iter = std::find_if(d_->worksheets_.begin(), d_->worksheets_.end(),
|
auto match_iter = std::find_if(d_->worksheets_.begin(), d_->worksheets_.end(),
|
||||||
[=](detail::worksheet_impl &comp) { return worksheet(&comp) == ws; });
|
[=](detail::worksheet_impl &comp) { return &comp == ws.d_; });
|
||||||
|
|
||||||
if (match_iter == d_->worksheets_.end())
|
if (match_iter == d_->worksheets_.end())
|
||||||
{
|
{
|
||||||
throw invalid_parameter();
|
throw invalid_parameter();
|
||||||
}
|
}
|
||||||
|
|
||||||
auto sheet_filename = path("worksheets/sheet" + std::to_string(d_->worksheets_.size()) + ".xml");
|
auto ws_rel_id = d_->sheet_title_rel_id_map_.at(ws.get_title());
|
||||||
|
auto wb_rel = d_->manifest_.get_relationship(xlnt::path("/"), xlnt::relationship_type::office_document);
|
||||||
|
auto ws_rel = d_->manifest_.get_relationship(wb_rel.get_target().get_path(), ws_rel_id);
|
||||||
|
d_->manifest_.unregister_override_type(ws_rel.get_target().get_path());
|
||||||
|
d_->manifest_.unregister_relationship(wb_rel.get_target(), ws_rel_id);;
|
||||||
|
d_->sheet_title_rel_id_map_.erase(ws.get_title());
|
||||||
d_->worksheets_.erase(match_iter);
|
d_->worksheets_.erase(match_iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user