首页 > 编程语言 >C# MiniExcel 导入和导出表格数据

C# MiniExcel 导入和导出表格数据

时间:2024-03-01 15:33:21浏览次数:32  
标签:stream filePath C# MiniExcel formFile 导入 item var new

C# MiniExcel 导入和导出表格数据

1.首先从NuGet包里下载MIniExcel文件引入

然后下面是一段Api控制器导入的代码

导入导出的表格用.xlsx或.xls工作表

 /// <summary>
 /// 上传文件到服务器端
 /// </summary>
 /// <param name="formFile"></param>
 /// <returns></returns>
 [HttpPost]
 public IActionResult Test(IFormFile formFile)
 {
     try
     {
         //获取文件名
         var FileName = formFile.FileName;
         //获取文件后缀
         var fileExtension = Path.GetExtension(FileName);
         //新文件名
         var newFileName = DateTime.Now.ToString("yyyyMMddhhmmss") + fileExtension;
         //文件保存路径
         var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "Upload", newFileName);
         //判断路径是否存在
         if (!Directory.Exists(filePath))
         {
             //创建路径
             Directory.CreateDirectory(filePath);
         }
         filePath = Path.Combine(filePath, newFileName);
         using (var stream = System.IO.File.Create(filePath))
         {
             formFile.CopyTo(stream);
             var list = MiniExcel.Query<ImportDTO>(filePath);
         }
         return Ok(newFileName);
     }
     catch (Exception)
     {

         throw;
     }
 }

 //下面是异步方法导入表格数据到数据库里  表格里的数据类型和字段必须和数据库一一对应

 /// <summary>
 /// 异步方法内存流导入  
 /// </summary>
 /// <param name="formFile">文件</param>
 /// <returns></returns>
 [HttpPost]
 public async Task<IActionResult> ImportExcel()
 {
     try
     {
         var formFile = Request.Form.Files[0];
         Api_Result<string> api_Result = new Api_Result<string>();
         //获取文件名
         var fileName = formFile.FileName;
         // 获取文件后缀
         var fileExtension = Path.GetExtension(fileName);
         // 判断后缀是否是xlsx或者xls
         if (fileExtension != ".xlsx" && fileExtension != ".xls")
         {
             return BadRequest("文件格式错误");
         }
         var length = formFile.Length;
         if (length > 1024 * 1024 * 10)
         {
             return BadRequest("文件大小不能超过10M");
         }
         // MemoryStream 内存流 在内存当中创建一个流(开辟空间)
         using (var stream = new MemoryStream())
         {
             //蒋文件写入内存流
             formFile.CopyTo(stream);
             //将流的位置归零
             stream.Position = 0;
             //将内存流转成List集合
             var list = await stream.QueryAsync<ImportDTO>();
             //将ImportDTO转成User
             //后期这个地方可以使用AutoMapper 来进行转换
             //可以将DTO转成实体 - 或实体类转成DTO
             var users = list.Select(x => new Users
             {
                 UId = YitIdHelper.NextId().ToString(),
                 UName = x.UName,
                 UPwd = x.UPwd,
                 UserName = x.UserName,
                 Age = x.Age,
                 Email = x.Email,
             }).ToList();
             //调用添加方法
             await _iusersService.AddRangeAsync(users);
         }
         api_Result.Success(formFile.ToString());
         return Ok(api_Result);
     }
     catch (Exception)
     {

         throw;
     }
 }

//下面是Excel导出数据库数据到表格的方法

/// <summary>
/// Excel导出
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IActionResult> GetExcel(List<UsersDTO> usersDTO)
{
    try
    {
        //  var list = await _usersService.GetUsersExcel();
        List<object> dataTable = new List<object>();
        foreach (var item in usersDTO)
        {
            dataTable.Add(new
            {
                用户名 = item.UName,
                密码 = item.UPwd,
                姓名 = item.UserName,
                年龄 = item.Age,
                邮箱 = item.Email
            });
        }
        var ms = new MemoryStream();
        ms.SaveAs(dataTable);
        ms.Seek(0, SeekOrigin.Begin);
        return new FileStreamResult(ms, contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
        {
            FileDownloadName = "domo.xlsx"
        };

    }
    catch (Exception)
    {

        throw;
    }
}

标签:stream,filePath,C#,MiniExcel,formFile,导入,item,var,new
From: https://www.cnblogs.com/Ouyx/p/18047157

相关文章

  • 454. 四数相加 II c
    typedefstructnode{intsum;intcount;structnode*repeatnext;}hash;voidinit_hash(hash*h){for(inti=0;i<128;i++){h[i].sum=0;h[i].count=0;h[i].repeatnext=NULL;}}hash*find_hash(hash*h,intnumb......
  • C#常用GDI+文字操作汇总
    这篇文章主要介绍了C#常用GDI+文字操作,包括文字投影、倒影、旋转等特效,对于提升程序界面的视觉效果有很大的用处。本文实例汇总了C#常用GDI+文字操作,包含了文字的投影、倒影、旋转等常见的效果,在进行C#应用程序开发中有不错的实用价值。分享给大家供大家参考之用。具体如下:一......
  • 介绍几个scss 与css 中的新的特性
    介绍几个scss与css中的新的特性css中的@layer。用法如下@layerlow,high;@layerlow{.btn{font-Size:10px;}}@layerhigh{.btn{font-Size:11px;}}@layer{.btn{font-Size:12px;}}.btn{font-Size:1......
  • 国产芯片方案:充气泵方案SIC8833C芯片
    车载手持充气泵是一个用在汽车、摩托车、电动车车胎打气,也常用于充气篮球、足球等球类补气用。在很多时候都是作为车载设备使用,通常用于车胎气压不够,爆胎修理补气使用,这种手持的充气泵,体积小,携带方便,几乎有车的人手一个。车载手持充气泵方案设计主要根据其工作原理,以传感......
  • C#中的GDI+图像编程详解
    本文详细讲解了C#中的GDI+图像编程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值。一、GraphicsGDI+是GDI(WindowsGraphicsDeviceInterface)的后继者,它是.NETFramework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于......
  • Pycharm:在工程目录下新建一个Python.exe
    1、起因公司电脑上把Python安装在了系统盘,但是我没有系统盘的修改权限,导致用pip时无法把包安装到系统盘2、解决方案在工程目录下,为工程新建一个Python.exe,之后该工程都采用这个python和它的pip,把包安装在工程包下。1)File→Settings→Project:xxx→PythonInterpreter2)Python......
  • 核心子方法5: invokeBeanFactoryPostProcessors(beanFactory)方法详解
    先总结: 该方法通过指定顺序,遍历调用各种实现了BeanDefinitionRegistryPostProcessor接口或BeanFactoryPostProcessor接口,的beanFactory后处理器注: BeanDefinitionRegistryPostProcessor接口继承了BeanFactoryPostProcessor接口调用顺序: 1.先调用已经提前放入Applicat......
  • C++static 存储类
    1#include<iostream>23//函数声明4voidfunc(void);56intmain()7{8intcount=10;9while(count--)10{11func();12std::cout<<",变量count为"<<count<<std::endl;13......
  • [转]acme自动化---免费SSL证书申请并自动续期
    原文地址:acme自动化---免费SSL证书申请并自动续期_createnewordererror.le_orderfinalizenotfound-CSDN博客背景:各CA厂家都在缩短免费证书的有效时间,包括现在与阿里合作的,普遍只有90天,这样如果频繁手动申请更换就很繁琐,正好github上有一个star数很高的工具acme.sh,......
  • python生成Excel文件减少使用内存
    1、openpyxl模块生成2、xlsxwriter模块contant_memory=True生成TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianChineseTraditionalIndonesianSlovak......