mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
Fix for issue #228: Worksheet ID is not always unique
- Worksheet ID now generated from the maximum of existing IDs - Worksheet ID no longer copied from existing sheet - Added tests
This commit is contained in:
parent
c214c6ca0b
commit
c05b9f33c1
|
@ -700,7 +700,11 @@ worksheet workbook::create_sheet()
|
||||||
title = "Sheet" + std::to_string(++index);
|
title = "Sheet" + std::to_string(++index);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto sheet_id = d_->worksheets_.size() + 1;
|
size_t sheet_id = 1;
|
||||||
|
for (const auto ws : *this)
|
||||||
|
{
|
||||||
|
sheet_id = std::max(sheet_id, ws.id() + 1);
|
||||||
|
}
|
||||||
std::string sheet_filename = "sheet" + std::to_string(sheet_id) + ".xml";
|
std::string sheet_filename = "sheet" + std::to_string(sheet_id) + ".xml";
|
||||||
|
|
||||||
d_->worksheets_.push_back(detail::worksheet_impl(this, sheet_id, title));
|
d_->worksheets_.push_back(detail::worksheet_impl(this, sheet_id, title));
|
||||||
|
@ -726,6 +730,7 @@ worksheet workbook::copy_sheet(worksheet to_copy)
|
||||||
detail::worksheet_impl impl(*to_copy.d_);
|
detail::worksheet_impl impl(*to_copy.d_);
|
||||||
auto new_sheet = create_sheet();
|
auto new_sheet = create_sheet();
|
||||||
impl.title_ = new_sheet.title();
|
impl.title_ = new_sheet.title();
|
||||||
|
impl.id_ = new_sheet.id();
|
||||||
*new_sheet.d_ = impl;
|
*new_sheet.d_ = impl;
|
||||||
|
|
||||||
return new_sheet;
|
return new_sheet;
|
||||||
|
|
|
@ -56,6 +56,7 @@ public:
|
||||||
register_test(test_memory);
|
register_test(test_memory);
|
||||||
register_test(test_clear);
|
register_test(test_clear);
|
||||||
register_test(test_comparison);
|
register_test(test_comparison);
|
||||||
|
register_test(test_id_gen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_active_sheet()
|
void test_active_sheet()
|
||||||
|
@ -78,6 +79,7 @@ public:
|
||||||
auto new_sheet = wb.create_sheet();
|
auto new_sheet = wb.create_sheet();
|
||||||
new_sheet.cell("A6").value(1.498);
|
new_sheet.cell("A6").value(1.498);
|
||||||
wb.copy_sheet(new_sheet);
|
wb.copy_sheet(new_sheet);
|
||||||
|
xlnt_assert_differs(wb[1].id(), wb[2].id());
|
||||||
xlnt_assert(wb[1].compare(wb[2], false));
|
xlnt_assert(wb[1].compare(wb[2], false));
|
||||||
wb.create_sheet().cell("A6").value(1.497);
|
wb.create_sheet().cell("A6").value(1.497);
|
||||||
xlnt_assert(!wb[1].compare(wb[3], false));
|
xlnt_assert(!wb[1].compare(wb[3], false));
|
||||||
|
@ -327,4 +329,14 @@ public:
|
||||||
wb.style("style1");
|
wb.style("style1");
|
||||||
wb_const.style("style1");
|
wb_const.style("style1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_id_gen()
|
||||||
|
{
|
||||||
|
xlnt::workbook wb;
|
||||||
|
wb.create_sheet();
|
||||||
|
wb.create_sheet();
|
||||||
|
wb.remove_sheet(wb[1]);
|
||||||
|
wb.create_sheet();
|
||||||
|
xlnt_assert_differs(wb[1].id(), wb[2].id());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user