static GnmExpr const *analysis_tool_combine_area (GnmValue *val_1, GnmValue *val_2, Workbook *wb) { GnmFunc *fd_array; GnmExpr const *expr; if (val_1->type == VALUE_CELLRANGE && val_2->type == VALUE_CELLRANGE && val_1->v_range.cell.a.sheet == val_2->v_range.cell.a.sheet) { GnmRange r_1, r_2; gboolean combined = FALSE; range_init_rangeref (&r_1, &val_1->v_range.cell); range_init_rangeref (&r_2, &val_2->v_range.cell); if (r_1.start.row == r_2.start.row && range_height (&r_1) == range_height (&r_2)) { if (r_1.end.col == r_2.start.col - 1) { combined = TRUE; r_1.end.col = r_2.end.col; } else if (r_2.end.col == r_1.start.col - 1) { combined = TRUE; r_1.start.col = r_2.start.col; } } else if (r_1.start.col == r_2.start.col && range_width (&r_1) == range_width (&r_2)) { if (r_1.end.row == r_2.start.row - 1) { combined = TRUE; r_1.end.row = r_2.end.row; } else if (r_2.end.row == r_1.start.row - 1) { combined = TRUE; r_1.start.row = r_2.start.row; } } if (combined) { GnmValue *val = value_new_cellrange_r (val_1->v_range.cell.a.sheet, &r_1); return gnm_expr_new_constant (val); } } fd_array = gnm_func_lookup_or_add_placeholder ("ARRAY"); gnm_func_ref (fd_array); expr = gnm_expr_new_funcall2 (fd_array, gnm_expr_new_constant (value_dup (val_1)), gnm_expr_new_constant (value_dup (val_2))); gnm_func_unref (fd_array); return expr; }
GnmRange * range_init_value (GnmRange *range, GnmValue const *v) { g_return_val_if_fail (range != NULL && v != NULL && v->type == VALUE_CELLRANGE, NULL); return range_init_rangeref (range, &v->v_range.cell); }