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