mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
commit
51406e4755
|
@ -2091,13 +2091,15 @@ void xlsx_consumer::read_shared_string_table()
|
||||||
{
|
{
|
||||||
expect_start_element(qn("spreadsheetml", "si"), xml::content::complex);
|
expect_start_element(qn("spreadsheetml", "si"), xml::content::complex);
|
||||||
auto rt = read_rich_text(qn("spreadsheetml", "si"));
|
auto rt = read_rich_text(qn("spreadsheetml", "si"));
|
||||||
target_.add_shared_string(rt);
|
//by reading in it can happen we have similar strings from modified excel worksheets...
|
||||||
|
//so allow to add duplicates
|
||||||
|
target_.add_shared_string(rt, true);
|
||||||
expect_end_element(qn("spreadsheetml", "si"));
|
expect_end_element(qn("spreadsheetml", "si"));
|
||||||
}
|
}
|
||||||
|
|
||||||
expect_end_element(qn("spreadsheetml", "sst"));
|
expect_end_element(qn("spreadsheetml", "sst"));
|
||||||
|
|
||||||
if (has_unique_count && unique_count != target_.shared_strings().size())
|
if (has_unique_count && unique_count != target_.shared_strings_by_id().size())
|
||||||
{
|
{
|
||||||
throw invalid_file("sizes don't match");
|
throw invalid_file("sizes don't match");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1390,9 +1390,18 @@ std::size_t workbook::add_shared_string(const rich_text &shared, bool allow_dupl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto sz = d_->shared_strings_ids_.size();
|
//it can happen that similar strings are more then onetime in the shared stringtable (Excel bugfix?)
|
||||||
d_->shared_strings_ids_[shared] = sz;
|
//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_values_[sz] = shared;
|
||||||
|
d_->shared_strings_ids_[shared] = sz;
|
||||||
|
|
||||||
|
|
||||||
return sz;
|
return sz;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user