diff --git a/source/workbook/workbook.cpp b/source/workbook/workbook.cpp index fcea0b12..59f9a8af 100644 --- a/source/workbook/workbook.cpp +++ b/source/workbook/workbook.cpp @@ -1374,9 +1374,18 @@ std::size_t workbook::add_shared_string(const rich_text &shared, bool allow_dupl } } - auto sz = d_->shared_strings_ids_.size(); - d_->shared_strings_ids_[shared] = sz; + //it can happen that similar strings are more then onetime in the shared stringtable (Excel bugfix?) + //shared_strings_values map should start on position 0 + auto sz = d_->shared_strings_values_.size(); + if (d_->shared_strings_values_.count(sz) > 0) + { + // something went wrong! + throw invalid_file("Error in shared string table!"); + } + d_->shared_strings_values_[sz] = shared; + d_->shared_strings_ids_[shared] = sz; + return sz; }