|
|
|
|
@ -1,3 +1,4 @@
|
|
|
|
|
use std::io::{BufWriter, Write, stdout};
|
|
|
|
|
use std::path::Path;
|
|
|
|
|
use umya_spreadsheet::{Cell, Range, Worksheet, reader};
|
|
|
|
|
|
|
|
|
|
@ -8,8 +9,6 @@ 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());
|
|
|
|
|
|
|
|
|
|
let mut buffer = BufferWriter::new();
|
|
|
|
|
|
|
|
|
|
if args.list_worksheets {
|
|
|
|
|
println!("Liste of worksheets :");
|
|
|
|
|
let mut i = 0;
|
|
|
|
|
@ -103,6 +102,9 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
|
|
|
|
|
return Err(Error::new("Number of rows < number of rows to skip"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let stdout = stdout();
|
|
|
|
|
let mut writer = BufWriter::new(stdout.lock());
|
|
|
|
|
|
|
|
|
|
// for each row...
|
|
|
|
|
let mut seq_row_num = 0;
|
|
|
|
|
for i in (args.skip_rows+1)..=num_rows {
|
|
|
|
|
@ -116,16 +118,18 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
|
|
|
|
|
}
|
|
|
|
|
None => {
|
|
|
|
|
seq_row_num += 1;
|
|
|
|
|
number_row(&args.number_rows, args.separator, seq_row_num, i);
|
|
|
|
|
print!("{}", empty_row);
|
|
|
|
|
writer.write(number_row(&args.number_rows, args.separator, seq_row_num, i).as_bytes()).unwrap();
|
|
|
|
|
writer.write(empty_row.as_bytes()).unwrap();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let mut line = String::from("");
|
|
|
|
|
|
|
|
|
|
// number the row
|
|
|
|
|
seq_row_num += 1;
|
|
|
|
|
number_row(&args.number_rows, args.separator, seq_row_num, i);
|
|
|
|
|
line += number_row(&args.number_rows, args.separator, seq_row_num, i).as_str();
|
|
|
|
|
|
|
|
|
|
// for each column in row...
|
|
|
|
|
let mut first = true;
|
|
|
|
|
@ -137,7 +141,7 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
|
|
|
|
|
if first {
|
|
|
|
|
first = false;
|
|
|
|
|
} else {
|
|
|
|
|
print!("{}", args.separator);
|
|
|
|
|
line.push(args.separator);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let cell = match sheet.get_cell((j, i)) {
|
|
|
|
|
@ -194,19 +198,20 @@ pub fn xlsxtocsv(args: &Arguments) -> Result<(), Error> {
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
print!("{}", value);
|
|
|
|
|
line += value.as_str();
|
|
|
|
|
}
|
|
|
|
|
print!("{}", args.end_of_line);
|
|
|
|
|
line += args.end_of_line.as_str();
|
|
|
|
|
writer.write(line.as_bytes()).unwrap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn number_row(number_row: &NumberRows, separator: char, seqrownum: u32, i: u32) {
|
|
|
|
|
fn number_row(number_row: &NumberRows, separator: char, seqrownum: u32, i: u32) -> String {
|
|
|
|
|
match number_row {
|
|
|
|
|
NumberRows::AsIs => print!("{}{}", i, separator),
|
|
|
|
|
NumberRows::Sequential => print!("{}{}", seqrownum, separator),
|
|
|
|
|
NumberRows::None => {}
|
|
|
|
|
NumberRows::AsIs => format!("{}{}", i, separator),
|
|
|
|
|
NumberRows::Sequential => format!("{}{}", seqrownum, separator),
|
|
|
|
|
NumberRows::None => String::from(""),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|