pull/3/head
Nicolas Sanchez 2 months ago
parent 3edfd57d4b
commit f9cc0ecc60

@ -0,0 +1 @@
,sanchezn,pc-sanchezn,07.10.2025 21:40,file:///home/sanchezn/.config/libreoffice/4;

@ -4,13 +4,13 @@ pub mod xlsxtocsv;
use clap::Parser; use clap::Parser;
use arguments::Arguments; use arguments::Arguments;
use xlsxtocsv::xlsxtocsv2; use xlsxtocsv::xlsxtocsv;
fn main() { fn main() {
let args = Arguments::parse(); let args = Arguments::parse();
if let Err(error) = xlsxtocsv2(&args) { if let Err(error) = xlsxtocsv(&args) {
eprintln!("{}", error); eprintln!("{}", error);
} }
} }

@ -4,7 +4,7 @@ use umya_spreadsheet::{Range, Worksheet, reader};
use crate::arguments::{Arguments, TrimSpaces}; use crate::arguments::{Arguments, TrimSpaces};
use crate::error::Error; use crate::error::Error;
pub fn xlsxtocsv2(args: &Arguments) -> Result<(), Error> { pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
let book = reader::xlsx::read(Path::new(&args.file)) let book = reader::xlsx::read(Path::new(&args.file))
.expect(format!("Can't open {}", args.file).as_str()); .expect(format!("Can't open {}", args.file).as_str());
@ -35,66 +35,37 @@ pub fn xlsxtocsv2(args: &Arguments) -> Result<(), Error> {
// get all the merged cells // get all the merged cells
let merged_cells = MergedCells::new(sheet, horiz, vert); let merged_cells = MergedCells::new(sheet, horiz, vert);
// get size of the worksheet // get non-empty value size of the worksheet
let mut col_max = 0; let mut num_cols = 0;
let mut row_max = 0; let mut num_rows = 0;
for cell in sheet.get_cell_collection() {
let value = cell.get_formatted_value();
if value == "" {
continue;
}
for cell in sheet.get_cell_collection_sorted() {
let coord = cell.get_coordinate(); let coord = cell.get_coordinate();
let col_num = coord.get_col_num().clone(); let col_num = coord.get_col_num().clone();
let row_num = coord.get_row_num().clone(); let row_num = coord.get_row_num().clone();
if col_num > col_max { if col_num > num_cols {
col_max = col_num; num_cols = col_num;
} }
if row_num > row_max { if row_num > num_rows {
col_max = col_num; num_rows = row_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());
// 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 mut empty_row = String::from("");
let (horiz, vert) = match args.fill_merged_cells { for _ in 1..num_cols {
crate::arguments::FillMergedCells::None => (false, false), empty_row += ";"
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 (num_cols, num_rows) = sheet.get_highest_column_and_row();
// TODO get every hidden columns // TODO get every hidden columns
// for each row... // for each row...
for i in 1..=num_rows { for i in 1..=num_rows {
// Avoid hidden rows if asked for // Avoid hidden rows if asked for
if !args.include_hidden_lines { if !args.include_hidden_lines {
match sheet.get_row_dimension(&i) { match sheet.get_row_dimension(&i) {
@ -103,7 +74,10 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
continue; continue;
} }
} }
None => continue, None => {
println!("{}", empty_row);
continue;
}
} }
} }
@ -118,7 +92,7 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
let cell = match sheet.get_cell((j, i)) { let cell = match sheet.get_cell((j, i)) {
Some(cell) => cell, Some(cell) => cell,
None => continue, None => break,
}; };
// get value from cell depending on merged cells and fill merged policy // get value from cell depending on merged cells and fill merged policy
@ -209,4 +183,3 @@ impl MergedCells {
None None
} }
} }

Binary file not shown.
Loading…
Cancel
Save