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