1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
use crate::api::cell::location::Location;
use crate::{Cell, Format, WorkSheet, WorkSheetResult};
use crate::api::cell::values::{CellDisplay, CellType, CellValue};
use crate::api::worksheet::format::_Format;
use crate::api::worksheet::hyperlink::_Hyperlink;
use crate::result::{CellError, RowError, WorkSheetError};
pub trait Read: _Read {
fn read_cell<L: Location>(&self, loc: L) -> WorkSheetResult<Cell<String>> {
self.read_api_cell(&loc)
}
// fn read_text<L: Location>(&self, loc: L) -> WorkSheetResult<&str> { self.read_value(loc) }
// fn read_string<L: Location>(&self, loc: L) -> WorkSheetResult<&str> { self.read_value(loc) }
// fn read_shared_string<L: Location>(&self, loc: L) -> WorkSheetResult<&str> { self.read_value(loc) }
// fn read_url<L: Location>(&self, loc: L) -> WorkSheetResult<&str> { Ok("") }
// fn read_format<L: Location>(&self, loc: L) -> WorkSheetResult<Format> {self.read_format_all(loc)}
}
trait _Read {
fn read_api_cell<L: Location>(&self, loc: &L) -> WorkSheetResult<Cell<String>>;
// fn get_cell_type<L: Location>(&self, loc: L) -> WorkSheetResult<&CellType>;
// fn read_value<L: Location>(&self, loc: L) -> WorkSheetResult<&str>;
// fn read_text<L: Location>(&self, loc: L) -> WorkSheetResult<&str>;
// fn read_format_all<L: Location>(&self, loc: L) -> WorkSheetResult<Format>;
}
impl _Read for WorkSheet {
fn read_api_cell<L: Location>(&self, loc: &L) -> WorkSheetResult<Cell<String>> {
let mut cell = self.worksheet.sheet_data.read_api_cell(loc)?;
if let Some(style) = cell.style {
cell.format = Some(self.get_format(style));
}
if let Some(CellType::SharedString) = cell.cell_type {
let id: usize = if let Some(s) = cell.text {
s.parse().unwrap_or_default()
} else { 0 };
cell.text = Some(self.shared_string.get_text(id).unwrap().to_string());
};
cell.hyperlink = self.worksheet.get_hyperlink(loc);
Ok(cell)
}
// fn get_cell_type<L: Location>(&self, loc: L) -> WorkSheetResult<&CellType> {
// let worksheet = &self.worksheet;
// let sheet_data = &worksheet.sheet_data;
// let cell_type = sheet_data.get_cell_type(&loc);
// cell_type.ok_or(WorkSheetError::RowError(RowError::CellError(CellError::CellNotFound)))
// }
// fn read_value<L: Location>(&self, loc: L) -> WorkSheetResult<&str> {
// let worksheet = &self.worksheet;
// let sheet_data = &worksheet.sheet_data;
// let cell_type = sheet_data.get_cell_type(&loc);
// let value = sheet_data.get_value(&loc);
// let text = match cell_type {
// Some(CellType::SharedString) => {
// let id: usize = value.unwrap_or("0").parse().unwrap();
// self.shared_string.get_text(id)
// },
// _ => value
// };
// text.ok_or(WorkSheetError::RowError(RowError::CellError(CellError::CellNotFound)))
// }
// fn read_text<L: Location>(&self, loc: L) -> WorkSheetResult<&str> {
// let worksheet = &self.worksheet;
// let sheet_data = &worksheet.sheet_data;
// let value = sheet_data.get_value(&loc);
// let cell_type = sheet_data.get_cell_type(&loc);
// match cell_type {
// Some(CellType::SharedString) => {
// Ok("SharedString")
// }
// _ => {
// value.ok_or(WorkSheetError::RowError(RowError::CellError(CellError::CellNotFound)))
// }
// }
// }
// fn read_format_all<L: Location>(&self, loc: L) -> WorkSheetResult<Format> {
// let worksheet = &self.worksheet;
// // let sheet_data = &worksheet.sheet_data;
// match worksheet.get_default_style(&loc) {
// Some(style) => Ok(self.get_format(style)),
// None => Err(WorkSheetError::FileNotFound)
// }
// }
}