From 3edfd57d4b1703b6e9ced46ec9a22fa2e7edcd76 Mon Sep 17 00:00:00 2001 From: Nicolas Sanchez Date: Tue, 7 Oct 2025 21:26:04 +0200 Subject: [PATCH] readme.md --- src/main.rs | 4 ++-- src/xlsxtocsv.rs | 53 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index c3f3559..fbf2d27 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,13 +4,13 @@ pub mod xlsxtocsv; use clap::Parser; use arguments::Arguments; -use xlsxtocsv::xlsxtocsv; +use xlsxtocsv::xlsxtocsv2; fn main() { let args = Arguments::parse(); - if let Err(error) = xlsxtocsv(&args) { + if let Err(error) = xlsxtocsv2(&args) { eprintln!("{}", error); } } \ No newline at end of file diff --git a/src/xlsxtocsv.rs b/src/xlsxtocsv.rs index 0327b66..1b40be2 100644 --- a/src/xlsxtocsv.rs +++ b/src/xlsxtocsv.rs @@ -4,6 +4,58 @@ use umya_spreadsheet::{Range, Worksheet, reader}; use crate::arguments::{Arguments, TrimSpaces}; use crate::error::Error; +pub fn xlsxtocsv2(args: &Arguments) -> Result<(), Error> { + let book = reader::xlsx::read(Path::new(&args.file)) + .expect(format!("Can't open {}", args.file).as_str()); + + // get the sheet from name or number if specified, else the first of the spreadsheet + let sheet = match book.get_sheet_by_name(&args.worksheet) { + Some(sheet) => sheet, + None => { + let sheetnum: u32 = match args.worksheet.parse() { + Ok(sheetnum) => sheetnum, + Err(_) => return Err(Error::new("cannot open sheet")), + }; + let sheet = match book.get_sheet(&(sheetnum as usize)) { + Some(sheet) => sheet, + None => return Err(Error::new("cannot open sheet")), + }; + sheet + } + }; + + // set the merged cells policy + let (horiz, vert) = match args.fill_merged_cells { + crate::arguments::FillMergedCells::None => (false, false), + crate::arguments::FillMergedCells::Horizontal => (true, false), + crate::arguments::FillMergedCells::Vertical => (false, true), + crate::arguments::FillMergedCells::Both => (true, true), + }; + + // get all the merged cells + let merged_cells = MergedCells::new(sheet, horiz, vert); + + // get size of the worksheet + let mut col_max = 0; + let mut row_max = 0; + + for cell in sheet.get_cell_collection_sorted() { + let coord = cell.get_coordinate(); + let col_num = coord.get_col_num().clone(); + let row_num = coord.get_row_num().clone(); + if col_num > col_max { + col_max = col_num; + } + if row_num > row_max { + col_max = col_num; + } + println!("({}, {})", col_num, row_num); + } + println!("highest : ({}, {})", col_max, row_max); + + Ok(()) +} + pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> { let book = reader::xlsx::read(Path::new(&args.file)) .expect(format!("Can't open {}", args.file).as_str()); @@ -157,3 +209,4 @@ impl MergedCells { None } } +