excel_cli/utils/
helpers.rs1#[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#[must_use]
37pub fn cell_reference(cell: (usize, usize)) -> String {
38 format!("{}{}", index_to_col_name(cell.1), cell.0)
39}