df_excel/
write.rs

1use std::path::Path;
2use json::{JsonValue, object};
3use umya_spreadsheet::{new_file, Spreadsheet, writer};
4use crate::Head;
5
6pub struct Write {
7    path: String,
8    page: usize,
9    excel: Spreadsheet,
10}
11
12impl Write {
13    pub fn new(filepath: &str) -> Self {
14        let book = new_file();
15        Self {
16            path: filepath.to_string(),
17            page: 0,
18            excel: book,
19        }
20    }
21    /// 设置数据
22    /// * page 1开始
23    pub fn set_page(&mut self, page: usize, name: &str, headers: Vec<Head>, data: JsonValue) -> &mut Self {
24        self.page = page - 1;
25        if self.page > 0 {
26            self.excel.new_sheet(name).unwrap();
27        }
28        self.excel.get_sheet_mut(&self.page).unwrap().set_name(name);
29        let mut row_line = 1;
30        let mut col_line = 1;
31        let mut header_key_value = object! {};
32        for header in headers.iter() {
33            self.excel.get_sheet_mut(&self.page).unwrap().get_cell_mut((col_line, row_line)).set_value_string(header.clone().title);
34            header_key_value[header.clone().field] = JsonValue::from(col_line);
35            col_line += 1;
36        }
37        for row in data.members() {
38            row_line += 1;
39            for (key, value) in row.entries() {
40                col_line = header_key_value[key].as_u32().unwrap();
41                self.excel.get_sheet_mut(&self.page).unwrap().get_cell_mut((col_line, row_line)).set_value_string(value.to_string().clone());
42            }
43        }
44        self
45    }
46
47    pub fn save(&mut self) -> bool {
48        let path = Path::new(self.path.as_str().clone());
49        match writer::xlsx::write(&self.excel, path) {
50            Ok(_) => true,
51            Err(_) => false
52        }
53    }
54}