rust calcmine读取excel

use std::fs::{create_dir_all, remove_dir_all};

use std::path::Path;

use std::time::{SystemTime, UNIX_EPOCH};

use calamine::{open_workbook, DataType, Reader, Xlsx, Data};

use rbatis::rbdc::{Error};

use salvo::{Request, Response};

 

pub async fn import_excel_data(req:&mut Request){

    //创建临时文件

    create_dir_all("temp").unwrap();

    //创建时间戳

    let time = SystemTime::now()

        .duration_since(UNIX_EPOCH)

        .unwrap()

        .as_millis();

    //从req中获得上传的文件

    let file = req.file("file").await;

    let mut dest = "".to_string();

    if let Some(file) = file {

        dest = format!("temp/{}", time.to_string() + "_" + file.name().unwrap_or("file"));

 

        match std::fs::copy(file.path(), Path::new(&dest)) {

            Ok(_) => { println!("文件上传拷贝成功"); }

            Err(_) => { println!("文件上传拷贝失败"); }

        }

    }

 

    //导入到具体的实体类

    let mut vec_user_import_data: Vec<SysUserEntity> = Vec::new();

 

    let mut workbook: Xlsx<_> = open_workbook(dest).expect("无法读取文件");

 

    match workbook.worksheet_range("员工") {

        Ok(worksheet) => {

            //跳过第一行表头数据

            for row in worksheet.rows().skip(1) {

 

                // 将每一列的数据存入员工实体

                if let (Some(Data::String(user_name)),

                    Some(Data::String(nick_name)),

                    Some(Data::String(company)),

                    Some(Data::String(department)),

                    Some(Data::String(gender)),

                    Some(Data::String(email)),

                    Some(Data::String(telephone))) =

                    (row.get(0), row.get(1), row.get(2), row.get(3), row.get(4), row.get(5), row.get(6)) {

 

                    let mut user_entity = SysUserEntity{

                        user_id: None,

                        dept_id:Some(dept_id),

                        user_name: Some(user_name.to_string()),

                        nick_name: Some(nick_name.to_string()),

                        user_type: None,

                        email:Some(email.to_string()),

                        phone_number :Some(te

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rust有许多库可以用于解析Excel文件。其中一个流行的库是`xlsx-rs`。以下是一个简单的例子,说明如何使用`xlsx-rs`库来拆分Excel文件: ```rust use std::error::Error; use std::fs::File; use std::path::Path; use xlsx::Xlsx; fn main() -> Result<(), Box<dyn Error>> { // 打开Excel文件 let path = Path::new("example.xlsx"); let file = File::open(path)?; let mut excel = Xlsx::new(file)?; // 获取工作表列表 let sheet_names = excel.sheet_names(); // 遍历工作表,拆分文件 for sheet_name in sheet_names { // 获取工作表数据 let sheet_data = excel.worksheet_range(&sheet_name)?; // 创建新的Excel文件 let mut new_excel = Xlsx::default(); // 将工作表数据添加到新文件中 let mut new_sheet = new_excel.add_worksheet(&sheet_name)?; new_sheet.range("A1").merge_range("A1:C1")?; new_sheet.range("A1").set_value("Header")?; new_sheet.range("A2:C2").set_values(&sheet_data)?; // 将新文件保存 let new_path = format!("{}_{}.xlsx", path.file_stem().unwrap().to_str().unwrap(), sheet_name); let new_file = File::create(new_path)?; new_excel.write(new_file)?; } Ok(()) } ``` 在这个例子中,我们首先打开Excel文件,然后获取工作表列表。接下来,我们遍历每个工作表,并将其数据添加到新的Excel文件中。最后,我们将新的Excel文件保存到磁盘上。 请注意,在这个例子中,我们假设原始Excel文件只包含一个工作表。如果原始文件包含多个工作表,它们将被拆分成多个Excel文件,每个文件包含一个工作表。如果您想要将多个工作表合并到一个文件中,请参阅`xlsx-rs`文档中的其他方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值