Using cell_access for repeated operations on same cell

You can obtain a cell_access instance either from model_context or document class.

Here is an example of how to obtain it from a model_context instance:

ixion::model_context cxt;
cxt.append_sheet("Sheet");

// fill this model context

ixion::abs_address_t A1(0, 0, 0);
ixion::cell_access ca = cxt.get_cell_access(A1);

Here is an example of how to obtain it from a document instance:

ixion::document doc;
doc.append_sheet("Sheet");

// fill this document

ixion::cell_access ca = doc.get_cell_access("A1");

Once you have your cell_access instance, you can, for instance, print the value of the cell as follows:

switch (ca.get_value_type())
{
    case ixion::cell_value_t::numeric:
    {
        double v = ca.get_numeric_value();
        std::cout << "numeric value: " << v << std::endl;
        break;
    }
    case ixion::cell_value_t::string:
    {
        std::string_view s = ca.get_string_value();
        std::cout << "string value: " << s << std::endl;
        break;
    }
    case ixion::cell_value_t::boolean:
    {
        std::cout << "boolean value: " << ca.get_boolean_value() << std::endl;
        break;
    }
    case ixion::cell_value_t::error:
    {
        ixion::formula_error_t err = ca.get_error_value();
        std::cout << "error value: " << ixion::get_formula_error_name(err) << std::endl;
        break;
    }
    case ixion::cell_value_t::empty:
    {
        std::cout << "empty cell" << std::endl;
        break;
    }
    default:
        std::cout << "???" << std::endl;
}

The complete source code of this example is avaiable here.