```python
import string

def cell_name(row: int, column: int) -> str:
    """Turns a row and a column, both counted from zero, into a spreadsheet name."""
    if column < 0 or row < 0:
        raise ValueError("Row and column must be non-negative integers.")
    
    col_letter = ""
    while column >= 0:
        column, remainder = divmod(column, 26)
        col_letter = string.ascii_uppercase[remainder] + col_letter
    
    return f"{col_letter}{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("Rows and columns must be positive integers.")
    
    return [cell_name(r, c) for r in range(rows) for c in range(columns)]
```