mirror of
https://github.com/tfussell/xlnt.git
synced 2024-03-22 13:11:17 +08:00
fix last few tests
This commit is contained in:
parent
e1e29e1f30
commit
916883e427
|
@ -190,7 +190,7 @@ public:
|
|||
/// Read all named styles from named_style_node and cell_styles_node and add them to workbook.
|
||||
/// Return true on success.
|
||||
/// </summary>
|
||||
bool read_named_styles(const xml_node &named_styles_node, const xml_node &cell_styles_node);
|
||||
bool read_named_styles(const xml_node &cell_styles_node, const xml_node &cell_style_formats_node);
|
||||
|
||||
/// <summary>
|
||||
/// Read all borders from number_formats_node and add them to workbook.
|
||||
|
|
|
@ -187,6 +187,8 @@ public:
|
|||
const cell_style &get_style(std::size_t style_index) const;
|
||||
std::size_t add_style(const cell_style &style);
|
||||
void clear_styles();
|
||||
std::vector<cell_style> &get_styles();
|
||||
const std::vector<cell_style> &get_styles() const;
|
||||
|
||||
// Named Styles
|
||||
bool has_named_style(const std::string &name);
|
||||
|
|
|
@ -357,17 +357,15 @@ cell_style style_serializer::read_cell_style(const xml_node &style_node)
|
|||
return s;
|
||||
}
|
||||
|
||||
named_style style_serializer::read_named_style(const xml_node &named_style_node, const xml_node &style_parent_node)
|
||||
named_style style_serializer::read_named_style(const xml_node &cell_style_node, const xml_node &cell_style_format_node)
|
||||
{
|
||||
named_style s;
|
||||
|
||||
s.set_name(named_style_node.get_attribute("name"));
|
||||
s.set_hidden(named_style_node.has_attribute("hidden") && is_true(named_style_node.get_attribute("hidden")));
|
||||
s.set_builtin_id(std::stoull(named_style_node.get_attribute("builtinId")));
|
||||
s.set_name(cell_style_node.get_attribute("name"));
|
||||
s.set_hidden(cell_style_node.has_attribute("hidden") && is_true(cell_style_node.get_attribute("hidden")));
|
||||
s.set_builtin_id(std::stoull(cell_style_node.get_attribute("builtinId")));
|
||||
|
||||
auto base_style_id = std::stoull(named_style_node.get_attribute("xfId"));
|
||||
auto base_style_node = style_parent_node.get_children().at(base_style_id);
|
||||
auto base_style = read_cell_style(base_style_node);
|
||||
auto base_style = read_cell_style(cell_style_format_node);
|
||||
|
||||
//TODO shouldn't have to set apply after set_X()
|
||||
s.set_alignment(base_style.get_alignment());
|
||||
|
@ -441,14 +439,35 @@ bool style_serializer::read_cell_styles(const xlnt::xml_node &cell_styles_node)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool style_serializer::read_named_styles(const xlnt::xml_node &named_styles_node, const xlnt::xml_node &cell_styles_node)
|
||||
bool style_serializer::read_named_styles(const xlnt::xml_node &cell_styles_node, const xlnt::xml_node &cell_style_formats_node)
|
||||
{
|
||||
for (auto named_style_node : named_styles_node.get_children())
|
||||
{
|
||||
auto ns = read_named_style(named_style_node, cell_styles_node);
|
||||
auto named_style_index = std::stoull(named_style_node.get_attribute("xfId"));
|
||||
std::size_t style_index = 0;
|
||||
|
||||
named_styles_[named_style_index] = ns;
|
||||
for (auto cell_style_format_node : cell_style_formats_node.get_children())
|
||||
{
|
||||
for (auto cell_style_node : cell_styles_node.get_children())
|
||||
{
|
||||
auto cell_style_format_index = std::stoull(cell_style_node.get_attribute("xfId"));
|
||||
|
||||
if (cell_style_format_index == style_index)
|
||||
{
|
||||
auto ns = read_named_style(cell_style_node, cell_style_format_node);
|
||||
named_styles_[style_index] = ns;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
style_index++;
|
||||
}
|
||||
|
||||
if (named_styles_.empty())
|
||||
{
|
||||
named_style ns;
|
||||
ns.set_name("Standard");
|
||||
ns.set_hidden(false);
|
||||
ns.set_builtin_id(0);
|
||||
named_styles_[0] = ns;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -478,6 +497,11 @@ bool style_serializer::read_number_formats(const xml_node &number_formats_node)
|
|||
number_formats_.push_back(nf);
|
||||
}
|
||||
|
||||
if (number_formats_.empty())
|
||||
{
|
||||
number_formats_.push_back(number_format::general());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -730,23 +754,27 @@ color style_serializer::read_color(const xml_node &color_node)
|
|||
|
||||
void style_serializer::initialize_vectors()
|
||||
{
|
||||
std::unordered_set<cell_style, std::hash<hashable>> cell_styles_set;
|
||||
bool any_style = false;
|
||||
|
||||
for (auto ws : workbook_)
|
||||
{
|
||||
for (auto row : ws)
|
||||
{
|
||||
for (auto c : row)
|
||||
for (auto cell : row)
|
||||
{
|
||||
if (c.has_style())
|
||||
if (cell.has_style())
|
||||
{
|
||||
cell_styles_set.insert(c.get_style());
|
||||
any_style = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cell_styles_.assign(cell_styles_set.begin(), cell_styles_set.end());
|
||||
if (any_style)
|
||||
{
|
||||
cell_styles_.assign(workbook_.get_styles().begin(), workbook_.get_styles().end());
|
||||
}
|
||||
|
||||
colors_.clear();
|
||||
borders_.clear();
|
||||
fills_.clear();
|
||||
|
|
|
@ -74,16 +74,6 @@ public:
|
|||
TS_ASSERT_EQUALS(s.get_number_formats().size(), 1);
|
||||
}
|
||||
|
||||
void test_merge_named_styles()
|
||||
{
|
||||
xlnt::xml_document doc;
|
||||
auto xml = PathHelper::read_file(PathHelper::GetDataDirectory("/reader/styles/complex-styles.xml"));
|
||||
doc.from_string(xml);
|
||||
xlnt::workbook wb;
|
||||
xlnt::style_serializer s(wb);
|
||||
TS_ASSERT(s.read_stylesheet(doc));
|
||||
TS_ASSERT_EQUALS(wb.get_named_styles().size(), 3);
|
||||
}
|
||||
/*
|
||||
void _test_unprotected_cell()
|
||||
{
|
||||
|
|
|
@ -736,4 +736,14 @@ named_style &workbook::create_named_style(const std::string &name)
|
|||
return d_->named_styles_.back();
|
||||
}
|
||||
|
||||
std::vector<cell_style> &workbook::get_styles()
|
||||
{
|
||||
return d_->cell_styles_;
|
||||
}
|
||||
|
||||
const std::vector<cell_style> &workbook::get_styles() const
|
||||
{
|
||||
return d_->cell_styles_;
|
||||
}
|
||||
|
||||
} // namespace xlnt
|
||||
|
|
Loading…
Reference in New Issue
Block a user