```python
def cell_name(row: int, column: int) -> str:
    """
    Turns a row and a column, both counted from zero, into a spreadsheet name:
    a column letter from A upward followed by a row number counted from one.
    """
    if column < 0 or row < 0:
        raise ValueError("Column and row indices must be non-negative.")
    if column >= 26:
        column -= 26
        row += 1
    return chr(65 + column) + str(row + 1)

def grid_cells(rows: int, columns: int) -> list:
    """
    Returns the names of every cell in a grid of a given size, row by row.
    """
    if rows <= 0 or columns <= 0:
        raise ValueError("Grid dimensions must be positive.")
    return [cell_name(row, col) for row in range(rows) for col in range(columns)]
```