- main.py: 增加show_banner()启动说明、各阶段[INFO]日志、结果摘要、任意键退出 - file_selector.py: 重写为路径输入→验证→空输入弹窗回退→不存在循环重试 - run.bat: 新建启动脚本(chcp 65001, mode con cols=80 lines=20, color 0B, title固定署名, pause) - Code/docs/modification-assessment.md: 修改需求评估文档
52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
"""Column coordinate conversion utilities."""
|
|
|
|
|
|
def col_to_letter(col: int) -> str:
|
|
"""Convert 0-based column index to Excel letter.
|
|
|
|
0 → A, 1 → B, ..., 25 → Z, 26 → AA, 27 → AB, ...
|
|
"""
|
|
result = ''
|
|
col += 1
|
|
while col > 0:
|
|
col -= 1
|
|
result = chr(col % 26 + ord('A')) + result
|
|
col //= 26
|
|
return result
|
|
|
|
|
|
def letter_to_col(letter: str) -> int:
|
|
"""Convert Excel column letter to 0-based index.
|
|
|
|
A → 0, B → 1, ..., Z → 25, AA → 26, ...
|
|
"""
|
|
result = 0
|
|
for ch in letter.upper():
|
|
result = result * 26 + (ord(ch) - ord('A') + 1)
|
|
return result - 1
|
|
|
|
|
|
def cell_ref_to_rc(ref: str) -> tuple[int, int]:
|
|
"""Convert Excel cell reference (e.g. 'A1', 'BC42') to (row, col).
|
|
|
|
Returns 0-based (row, col).
|
|
"""
|
|
col_letters = []
|
|
row_digits = []
|
|
for ch in ref:
|
|
if ch.isalpha():
|
|
col_letters.append(ch)
|
|
else:
|
|
row_digits.append(ch)
|
|
col = letter_to_col(''.join(col_letters))
|
|
row = int(''.join(row_digits)) - 1 # 1-based → 0-based
|
|
return row, col
|
|
|
|
|
|
def rc_to_cell_ref(row: int, col: int) -> str:
|
|
"""Convert 0-based (row, col) to Excel cell reference.
|
|
|
|
(0, 0) → 'A1', (1, 2) → 'C2', ...
|
|
"""
|
|
return col_to_letter(col) + str(row + 1)
|