diff --git a/.~lock.test_masque.xlsx# b/.~lock.test_masque.xlsx# index 540f683..58cf175 100644 --- a/.~lock.test_masque.xlsx# +++ b/.~lock.test_masque.xlsx# @@ -1 +1 @@ -,sanchezn,pc-sanchezn,07.10.2025 21:40,file:///home/sanchezn/.config/libreoffice/4; \ No newline at end of file +,sanchezn,pc-sanchezn,07.10.2025 21:58,file:///home/sanchezn/.config/libreoffice/4; \ No newline at end of file diff --git a/src/arguments.rs b/src/arguments.rs index b9be083..34aac97 100644 --- a/src/arguments.rs +++ b/src/arguments.rs @@ -38,6 +38,23 @@ impl ToString for TrimSpaces { } } +#[derive(Clone, Debug, ValueEnum)] +pub enum NumberRows { + AsIs, + Sequential, + None, +} + +impl ToString for NumberRows { + fn to_string(&self) -> String { + match self { + NumberRows::AsIs => "as-is".into(), + NumberRows::Sequential => "sequential".into(), + NumberRows::None => "none".into(), + } + } +} + #[derive(Parser, Debug)] pub struct Arguments { @@ -63,6 +80,6 @@ pub struct Arguments { #[arg(short, long, default_value_t = TrimSpaces::None)] pub trim: TrimSpaces, /// number the rows - #[arg(short, long, default_value_t = false)] - pub number_rows: bool, + #[arg(short, long, default_value_t = NumberRows::None)] + pub number_rows: NumberRows, } diff --git a/src/xlsxtocsv.rs b/src/xlsxtocsv.rs index 5ecb723..97ed067 100644 --- a/src/xlsxtocsv.rs +++ b/src/xlsxtocsv.rs @@ -1,7 +1,7 @@ use std::path::Path; use umya_spreadsheet::{Range, Worksheet, reader}; -use crate::arguments::{Arguments, TrimSpaces}; +use crate::arguments::{Arguments, NumberRows, TrimSpaces}; use crate::error::Error; pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { @@ -65,7 +65,9 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { // TODO get every hidden columns // for each row... + let mut seq_row_num = 0; for i in 1..=num_rows { + // Avoid hidden rows if asked for if !args.include_hidden_rows { match sheet.get_row_dimension(&i) { @@ -75,9 +77,8 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { } } None => { - if args.number_rows { - print!("{}{}", i, args.separator); - } + seq_row_num += 1; + number_row(&args.number_rows, args.separator, seq_row_num, i); println!("{}", empty_row); continue; } @@ -85,9 +86,8 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { } // number the row - if args.number_rows { - print!("{}{}", i, args.separator); - } + seq_row_num += 1; + number_row(&args.number_rows, args.separator, seq_row_num, i); // for each column in row... let mut first = true; @@ -147,6 +147,14 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { Ok(()) } +fn number_row(number_row: &NumberRows, separator: char, seqrownum: u32, i: u32) { + match number_row { + NumberRows::AsIs => print!("{}{}", i, separator), + NumberRows::Sequential => print!("{}{}", seqrownum, separator), + NumberRows::None => {}, + } +} + struct MergedCells { merged_cells: Vec, fill_horizontal: bool, diff --git a/test_masque.xlsx b/test_masque.xlsx index ca413f2..cb2cb9e 100644 Binary files a/test_masque.xlsx and b/test_masque.xlsx differ