zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
// use umya_spreadsheet::Worksheet;
use anyhow::Context;
use calamine::{open_workbook, Reader, Xlsx};

// 读 excel
pub fn excel_to_vec(
    path: &str,
    sheet_index: usize,
) -> crate::core::error2::Result<Vec<Vec<String>>> {
    let mut workbook: Xlsx<_> =
        open_workbook(path).with_context(|| format!("failed to open workbook: {}", path))?;
    let mut all_rows: Vec<Vec<String>> = Vec::new();

    if let Some(Ok(range)) = workbook.worksheet_range_at(sheet_index) {
        for row in range.rows() {
            let mut row_data: Vec<String> = Vec::new();

            for cell in row {
                print!("{}\t", cell);
                row_data.push(format!("{}", cell));
            }

            all_rows.push(row_data);
            println!();
        }
    }

    Ok(all_rows)
}

// 写 excel
pub fn write_excel(path: &str, data: &[Vec<String>]) -> crate::core::error2::Result<bool> {
    let mut book = umya_spreadsheet::new_file();
    let mut sheet = book.get_sheet_mut(&0);

    for (row_idx, row) in data.iter().enumerate() {
        for (col_idx, value) in row.iter().enumerate() {
            sheet
                .as_mut()
                .unwrap()
                .get_cell_mut(((col_idx + 1) as u32, (row_idx + 1) as u32))
                .set_value(value);
        }
    }

    umya_spreadsheet::writer::xlsx::write(&book, path)
        .with_context(|| format!("failed to write workbook: {}", path))?;

    Ok(true)
}