use super::zero_temp_workbook::ZeroTempWorkbook;
use crate::error::Result;
use crate::types::{CellValue, ProtectionOptions};
use std::path::Path;
pub struct UltraLowMemoryWorkbook {
inner: ZeroTempWorkbook,
compression_level: u32,
}
impl UltraLowMemoryWorkbook {
pub fn new<P: AsRef<Path>>(path: P) -> Result<Self> {
Self::with_compression(path, 6)
}
pub fn with_compression<P: AsRef<Path>>(path: P, compression_level: u32) -> Result<Self> {
let inner = ZeroTempWorkbook::new(
path.as_ref().to_str().unwrap_or("output.xlsx"),
compression_level.min(9),
)?;
Ok(UltraLowMemoryWorkbook {
inner,
compression_level: compression_level.min(9),
})
}
pub fn protect_sheet(&mut self, options: ProtectionOptions) -> Result<()> {
self.inner.protect_sheet(options)
}
pub fn add_worksheet(&mut self, name: &str) -> Result<()> {
self.inner.add_worksheet(name)
}
pub fn write_row<I, S>(&mut self, values: I) -> Result<()>
where
I: IntoIterator<Item = S>,
S: AsRef<str>,
{
self.inner.write_row(values)
}
pub fn write_row_typed(&mut self, values: &[CellValue]) -> Result<()> {
let styled_cells: Vec<crate::types::StyledCell> = values
.iter()
.map(|v| crate::types::StyledCell::new(v.clone(), crate::types::CellStyle::Default))
.collect();
self.inner.write_row_styled(&styled_cells)
}
pub fn write_row_styled(&mut self, values: &[crate::types::StyledCell]) -> Result<()> {
self.inner.write_row_styled(values)
}
pub fn set_compression_level(&mut self, level: u32) {
self.compression_level = level.min(9);
}
pub fn compression_level(&self) -> u32 {
self.compression_level
}
pub fn close(self) -> Result<()> {
self.inner.close()
}
pub fn set_column_width(&mut self, _col: u32, _width: f64) -> Result<()> {
Ok(())
}
pub fn set_next_row_height(&mut self, _height: f64) -> Result<()> {
Ok(())
}
pub fn set_flush_interval(&mut self, _interval: u32) {
}
pub fn set_max_buffer_size(&mut self, _size: usize) {
}
}