import string


def column_number_to_column_id(number):
    """
    Takes a one-based index and converts it to a column identifier string
    such as used in Excel. Examples:
    0 => A
    25 => Z
    26 => AA
    703 => AAB
    Note that this is similar to converting numbers to base-26, but not quite
    the same — this numbering scheme has no concept of 0. We go from
    "Z" to "AA" which is like going from 9 to 11 with no intervening 10.
    Only works for positive integers.
    """
    if not isinstance(number, int) or number <= 0:
        raise AttributeError(
            "column_number_to_column_id requires a non-negative int")
    digits = string.ascii_uppercase
    parts = []
    while number > 0:
        number, mod = divmod(number - 1, len(digits))
        parts.insert(0, digits[mod])
    return ''.join(parts)