v1.1.0: 增加交互提示、路径输入、窗口属性配置
- 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: 修改需求评估文档
This commit is contained in:
51
Releases/v1.0.1/source/utils.py
Normal file
51
Releases/v1.0.1/source/utils.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user