mirror of
https://github.com/zaphar/sheetsui.git
synced 2025-07-23 05:19:48 -04:00
wip: feat: method to save sheet rows to csv file
This commit is contained in:
parent
473ba9c665
commit
8cd93cb6b0
16
Cargo.lock
generated
16
Cargo.lock
generated
@ -482,9 +482,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "csv"
|
name = "csv"
|
||||||
version = "1.3.0"
|
version = "1.3.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
|
checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"csv-core",
|
"csv-core",
|
||||||
"itoa",
|
"itoa",
|
||||||
@ -501,16 +501,6 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "csvx"
|
|
||||||
version = "0.1.17"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "92081efd8b1d03f5a1bf242876cfdd8fa2bf9fe521ddb2d31f8747dfa2dd2cb7"
|
|
||||||
dependencies = [
|
|
||||||
"csv",
|
|
||||||
"thiserror",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deranged"
|
name = "deranged"
|
||||||
version = "0.3.11"
|
version = "0.3.11"
|
||||||
@ -1507,7 +1497,7 @@ dependencies = [
|
|||||||
"clap",
|
"clap",
|
||||||
"colorsys",
|
"colorsys",
|
||||||
"crossterm",
|
"crossterm",
|
||||||
"csvx",
|
"csv",
|
||||||
"futures",
|
"futures",
|
||||||
"ironcalc",
|
"ironcalc",
|
||||||
"ratatui",
|
"ratatui",
|
||||||
|
@ -9,7 +9,6 @@ edition = "2021"
|
|||||||
anyhow = { version = "1.0.91", features = ["backtrace"] }
|
anyhow = { version = "1.0.91", features = ["backtrace"] }
|
||||||
clap = { version = "4.5.20", features = ["derive"] }
|
clap = { version = "4.5.20", features = ["derive"] }
|
||||||
crossterm = { version = "0.28.1", features = ["event-stream", "serde"] }
|
crossterm = { version = "0.28.1", features = ["event-stream", "serde"] }
|
||||||
csvx = "0.1.17"
|
|
||||||
# this revision introduces a way to get the Model back out of the UserModel
|
# this revision introduces a way to get the Model back out of the UserModel
|
||||||
ironcalc = { git = "https://github.com/ironcalc/IronCalc" }
|
ironcalc = { git = "https://github.com/ironcalc/IronCalc" }
|
||||||
futures = "0.3.31"
|
futures = "0.3.31"
|
||||||
@ -21,3 +20,4 @@ slice-utils = { git = "https://dev.zaphar.net/zaphar/slice-cursor-rs.git" }
|
|||||||
serde_json = "1.0.133"
|
serde_json = "1.0.133"
|
||||||
colorsys = "0.6.7"
|
colorsys = "0.6.7"
|
||||||
tui-markdown = { version = "0.3.1", features = [] }
|
tui-markdown = { version = "0.3.1", features = [] }
|
||||||
|
csv = "1.3.1"
|
||||||
|
@ -119,12 +119,23 @@ impl Book {
|
|||||||
)?))
|
)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_export_rows(&self) -> Result<Vec<Vec<String>>> {
|
pub fn csv_for_sheet<W>(&self, sheet: u32, sink: W) -> Result<()>
|
||||||
let sheet = self.location.sheet;
|
where W: std::io::Write,
|
||||||
Ok(self.export_rows_for_sheet(sheet)?)
|
{
|
||||||
|
let rows = self.get_export_rows_for_sheet(sheet)?;
|
||||||
|
let mut writer = csv::Writer::from_writer(sink);
|
||||||
|
for row in rows {
|
||||||
|
writer.write_record(row)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn export_rows_for_sheet(&self, sheet: u32) -> Result<Vec<Vec<String>>, anyhow::Error> {
|
pub fn get_export_rows(&self) -> Result<Vec<Vec<String>>> {
|
||||||
|
let sheet = self.location.sheet;
|
||||||
|
Ok(self.get_export_rows_for_sheet(sheet)?)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_export_rows_for_sheet(&self, sheet: u32) -> Result<Vec<Vec<String>>, anyhow::Error> {
|
||||||
let worksheet = self
|
let worksheet = self
|
||||||
.model
|
.model
|
||||||
.get_model()
|
.get_model()
|
||||||
@ -170,6 +181,15 @@ impl Book {
|
|||||||
Ok(Self::from_model(load_from_xlsx(path, locale, tz)?))
|
Ok(Self::from_model(load_from_xlsx(path, locale, tz)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Save a sheet in the book to a csv file
|
||||||
|
pub fn save_sheet_to_csv(&self, sheet: u32, path: &str) -> Result<()> {
|
||||||
|
let file_path = std::path::Path::new(path);
|
||||||
|
let file = std::fs::File::create(file_path)?;
|
||||||
|
let writer = std::io::BufWriter::new(file);
|
||||||
|
self.csv_for_sheet(sheet, writer)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Save book to an xlsx file.
|
/// Save book to an xlsx file.
|
||||||
pub fn save_to_xlsx(&mut self, path: &str) -> Result<()> {
|
pub fn save_to_xlsx(&mut self, path: &str) -> Result<()> {
|
||||||
// TODO(zaphar): Currently overwrites. Should we prompt in this case?
|
// TODO(zaphar): Currently overwrites. Should we prompt in this case?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user