Exemple #1
0
bool worksheet::has_cell(const cell_reference &reference) const
{
    const auto row = d_->cell_map_.find(reference.row());
    if (row == d_->cell_map_.cend()) return false;

    const auto col = row->second.find(reference.column_index());
    if (col == row->second.cend()) return false;

    return true;
}
Exemple #2
0
cell worksheet::cell(const cell_reference &reference)
{
    auto &row = d_->cell_map_[reference.row()];
    auto match = row.find(reference.column_index());

    if (match == row.end())
    {
        match = row.emplace(reference.column_index(), detail::cell_impl()).first;
        auto &impl = match->second;

        impl.parent_ = d_;
        impl.column_ = reference.column_index();
        impl.row_ = reference.row();
    }

    return xlnt::cell(&match->second);
}
Exemple #3
0
cell worksheet::get_cell(const cell_reference &reference)
{
    if (d_->cell_map_.find(reference.get_row()) == d_->cell_map_.end())
    {
        d_->cell_map_[reference.get_row()] = std::unordered_map<column_t, detail::cell_impl>();
    }

    auto &row = d_->cell_map_[reference.get_row()];

    if (row.find(reference.get_column_index()) == row.end())
    {
        row[reference.get_column_index()] = detail::cell_impl(d_, reference.get_column_index(), reference.get_row());
    }

    return cell(&row[reference.get_column_index()]);
}
Exemple #4
0
void worksheet::freeze_panes(const cell_reference &ref)
{
    if (ref == "A1")
    {
        unfreeze_panes();
        return;
    }
    if (!has_view())
    {
        d_->views_.push_back(sheet_view());
    }

    auto &primary_view = d_->views_.front();
    if (!primary_view.has_pane())
    {
        primary_view.pane(pane());
    }

    primary_view.pane().top_left_cell = ref;
    primary_view.pane().state = pane_state::frozen;

    primary_view.clear_selections();
    if (ref.column() == "A") // no column is frozen
    {
        primary_view.add_selection(selection(pane_corner::bottom_left, ref));
        primary_view.pane().active_pane = pane_corner::bottom_left;
        primary_view.pane().y_split = ref.row() - 1;
    }
    else if (ref.row() == 1) // no row is frozen
    {
        primary_view.add_selection(selection(pane_corner::top_right, ref));
        primary_view.pane().active_pane = pane_corner::top_right;
        primary_view.pane().x_split = ref.column_index() - 1;
    }
    else // column and row is frozen
    {
        primary_view.add_selection(selection(pane_corner::top_right, cell_reference(ref.column(), 1)));
        primary_view.add_selection(selection(pane_corner::bottom_left, cell_reference(1, ref.row())));
        primary_view.add_selection(selection(pane_corner::bottom_right, ref));
        primary_view.pane().active_pane = pane_corner::bottom_right;
        primary_view.pane().x_split = ref.column_index() - 1;
        primary_view.pane().y_split = ref.row() - 1;
    }
}
std::size_t cell_reference_hash::operator()(const cell_reference &k) const
{
    return k.get_row_index() * constants::MaxColumn + k.get_column_index();
}
Exemple #6
0
const cell worksheet::get_cell(const cell_reference &reference) const
{
    return cell(&d_->cell_map_.at(reference.get_row()).at(reference.get_column_index()));
}
Exemple #7
0
void worksheet::clear_cell(const cell_reference &ref)
{
    d_->cell_map_.at(ref.row()).erase(ref.column());
    // TODO: garbage collect newly unreferenced resources such as styles?
}
Exemple #8
0
const cell worksheet::cell(const cell_reference &reference) const
{
    return xlnt::cell(&d_->cell_map_.at(reference.row()).at(reference.column_index()));
}
Exemple #9
0
std::size_t cell_reference_hash::operator()(const cell_reference &k) const
{
    return k.row() * constants::max_column().index + k.column_index();
}