excel_cli/utils/
helpers.rs

1#[must_use]
2pub fn index_to_col_name(index: usize) -> String {
3    let mut col_name = String::new();
4    let mut n = index;
5
6    while n > 0 {
7        let remainder = (n - 1) % 26;
8        col_name.insert(0, (b'A' + remainder as u8) as char);
9        n = (n - 1) / 26;
10    }
11
12    if col_name.is_empty() {
13        col_name.push('A');
14    }
15
16    col_name
17}
18
19#[must_use]
20pub fn col_name_to_index(name: &str) -> Option<usize> {
21    let mut result = 0;
22
23    for c in name.chars() {
24        if !c.is_ascii_alphabetic() {
25            return None;
26        }
27
28        let val = (c.to_ascii_uppercase() as u8 - b'A' + 1) as usize;
29        result = result * 26 + val;
30    }
31
32    Some(result)
33}
34
35// Format cell reference (e.g., A1, B2)
36#[must_use]
37pub fn cell_reference(cell: (usize, usize)) -> String {
38    format!("{}{}", index_to_col_name(cell.1), cell.0)
39}