64 return {column_nr_is_relative, column_nr - 1, row_nr_is_relative, row_nr - 1};
78 auto [column_nr_is_relative, column_nr, row_nr_is_relative, row_nr] = _parse_spreadsheet_address(address);
79 hi_parse_check(address.empty(),
"Extra characters in spread sheet address {}", address);
81 if (column_nr_is_relative) {
82 column_nr += start_column_nr;
84 if (row_nr_is_relative) {
85 row_nr += start_row_nr;
87 return {column_nr, row_nr};
101 auto [column_nr_is_relative1, column_nr1, row_nr_is_relative1, row_nr1] = _parse_spreadsheet_address(address);
102 if (column_nr_is_relative1) {
103 column_nr1 += start_column_nr;
105 if (row_nr_is_relative1) {
106 row_nr1 += start_row_nr;
109 if (address.starts_with(
":")) {
110 address.remove_prefix(1);
111 auto [column_nr_is_relative2, column_nr2, row_nr_is_relative2, row_nr2] = _parse_spreadsheet_address(address);
112 hi_parse_check(address.empty(),
"Extra characters in spread sheet address {}", address);
114 if (column_nr_is_relative2) {
115 column_nr2 += start_column_nr;
117 if (row_nr_is_relative2) {
118 row_nr2 += start_row_nr;
121 hi_parse_check(column_nr1 <= column_nr2,
"Column range must be in ascending direction");
122 hi_parse_check(row_nr1 <= row_nr2,
"Column range must be in ascending direction");
123 return {column_nr1, row_nr1, column_nr2 + 1, row_nr2 + 1};
126 hi_parse_check(address.empty(),
"Extra characters in spread sheet address {}", address);
127 return {column_nr1, row_nr1, column_nr1 + 1, row_nr1 + 1};
std::pair< std::size_t, std::size_t > parse_spreadsheet_address(std::string_view address, std::size_t start_column_nr=0, std::size_t start_row_nr=0)
Parse a spreadsheet address.
Definition spreadsheet_address.hpp:76
std::tuple< std::size_t, std::size_t, std::size_t, std::size_t > parse_spreadsheet_range(std::string_view address, std::size_t start_column_nr=0, std::size_t start_row_nr=0)
Parse a spreadsheet range.
Definition spreadsheet_address.hpp:99