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}