1use crate::args::Tail;
2use crate::utils::cli_result::CliResult;
3use crate::utils::constants::COMMA;
4use crate::utils::filename::new_path;
5use crate::utils::reader::ExcelReader;
6use crate::utils::writer::Writer;
7
8impl Tail {
9 pub fn excel_run(&self) -> CliResult {
10 let path = &self.path();
11 let out = new_path(path, "-tail").with_extension("csv");
12 let mut wtr = Writer::file_or_stdout(self.export, &out)?;
13 let mut range = ExcelReader::new(path, self.sheet)?;
14
15 if !self.no_header {
17 let Some(r) = range.next() else {
18 return Ok(());
19 };
20 wtr.write_excel_line_unchecked(r, COMMA);
21 }
22
23 range
25 .iter()
26 .skip(range.next_called)
27 .rev()
28 .take(self.n)
29 .rev()
30 .for_each(|r| wtr.write_excel_line_unchecked(r, COMMA));
31
32 if self.export {
33 println!("Saved to file: {}", out.display())
34 }
35
36 Ok(())
37 }
38}