分享一个 ASP.NET Web Api 上传和读取 Excel的方案

前言
许多业务场景下需要处理和分析大量的数据,而 Excel 是业务人员常用的数据表格工具,因此,将 Excel 表格中内容上传并读取到网站,是一个很常见的功能,目前有许多成熟的开源或者商业的第三方库,比如 NPOI,EPPlus,Spire.Office for .NET 等等,今天分享一个使用 Magicodes.IE.Excel 上传和读取 Excel的方案,这是近年来一个比较受欢迎的开源的第三方库,下面我们用一个 Step By Step 例子来感受它的魅力。
Step By Step 步骤
-
安装 nuget 包
Magicodes.IE.Excel
Magicodes.IE.Core -
创建一个 DTO 类
using Magicodes.ExporterAndImporter.Core;namespace ExcelSample.BusinessEntities.Dtos {public partial class ImportDto{/// <summary>/// ID/// </summary>[ImporterHeader(Name ="ID")]public string ItemGuid { get; set; }/// <summary>/// 巡检编号/// </summary>[ImporterHeader(Name = "巡检编号")]public string InspectionNumber { get; set; }/// <summary>/// 详细地址/// </summary>[ImporterHeader(Name = "详细位置")]public string FormattedAddress { get; set; }/// <summary>/// 开始日期/// </summary>[ImporterHeader(Name = "开始日期")]public string BeginDate { get; set; }/// <summary>/// 截止日期/// </summary>[ImporterHeader(Name = "结束日期")]public string EndDate { get; set; }/// <summary>/// 故障描述/// </summary>[ImporterHeader(Name = "故障描述")]public string FaultInfo { get; set; }/// <summary>/// 单位名称/// </summary>[ImporterHeader(Name = "单位")]public string CustomerName { get; set; }/// <summary>/// 维修说明/// </summary>[ImporterHeader(Name = "维修说明")]public string HandleMeasuresOther { get; set; }} } -
写公共读取 Export 文件内容方法
using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Core.Extension; using Magicodes.ExporterAndImporter.Core.Models; using Magicodes.ExporterAndImporter.Excel; using System.Collections.Generic; using System.IO; using System.Threading.Tasks;namespace ExcelSample.Common {/// <summary>/// excel 工具类/// </summary>public static class ExportHelper{/// <summary>/// 通用导入 excel 文件/// </summary>/// <param name="filePath">Excel 文件路径</param>public static async Task<ImportResult<T>> ImportExcel<T>(string filePath) where T : class, new(){IImporter importer = new ExcelImporter();var result = await importer.Import<T>(filePath);return result;}} } -
写上传 Excel 文件的业务方法
public string UploadFile() {HttpFileCollection files = HttpContext.Current.Request.Files;if (files == null || files.Count == 0){throw new Exception("没有上传文件");}HttpPostedFile file = files[0];string fileExt = Path.GetExtension(file.FileName);if (fileExt != ".xlsx" && fileExt != ".xls"){throw new Exception("不是Excel文件");}string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ExcelImport");if (!Directory.Exists(dir)){Directory.CreateDirectory(dir);}string fileName = Path.GetFileNameWithoutExtension(file.FileName);string fileSaveName = string.Format("{0}{1}.xlsx", fileName, DateTime.Now.ToFlowWaterDate()); string fileSavePath = Path.Combine(dir, fileSaveName);_logger.Value.Info($"上传文件:[{fileSavePath}]");file.SaveAs(fileSavePath);return fileSavePath; } -
写具体的读取 Excel 文件内容的业务方法
public List<ImportDto> ReadExcel(string filePath) {var importData = ExportHelper.ImportExcel<ImportDto>(filePath).Result;var list = importData.Data.ToList();if (list.HasData()){return list;}return null; } -
在控制器中写 API 向外提供上传和读取 Excel 的接口
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Web.Http; using ExcelSample.Contracts.IService; using ExcelSample.BusinessEntities.Dtos; namespace ExcelSample.WebAPI.Controllers.V1 {[Authorize][RoutePrefix("api/v1/excelSample")]public partial class ExcelSampleController : BaseController{// ......[HttpPost][Route("uploadExcel")]public IHttpActionResult UploadExcel(){// 1. 上传文件string fileUpload = "";try{fileUpload = UploadFile();}catch (Exception ex){_log.Value.Error(ex, "上传文件失败!");return BadRequest(ex.Message);}// 2. 读取数据var list = ReadExcel(fileUpload);if (list== null || list.Count == 0){return BadRequest("文件没有数据或者数据格式不正确!");}// 3. 更新数据// 存储数据到数据库中return Ok(Success(result));}// ......} } -
运行项目并在 Postman 中进行测试
总结
Magicodes.IE.Excel 功能不比 NPOI 等其他第三方库逊色,使用也相对比较简单,只需几行代码就可以读取 Excel 文件的内容,不失为一个新的读写 Excel 方案的选择,大家有兴趣可以到 GitHub 下载其源码深入了解。
相关文章:
分享一个 ASP.NET Web Api 上传和读取 Excel的方案
前言 许多业务场景下需要处理和分析大量的数据,而 Excel 是业务人员常用的数据表格工具,因此,将 Excel 表格中内容上传并读取到网站,是一个很常见的功能,目前有许多成熟的开源或者商业的第三方库,比如 NPO…...
【算法实战】每日一题:将某个序列中内的每个元素都设为相同的值的最短次数(差分数组解法,附概念理解以及实战操作)
题目 将某个序列中内的每个元素都设为相同的值的最短次数 1.差分数组(后面的减去前面的值存储的位置可以理解为中间) 差分数组用于处理序列中的区间更新和查询问题。它存储序列中相邻元素之间的差值,而不是直接存储每个元素的值 怎么对某…...
EXCEL数据透视图中的日期字段,怎样自动分出年、季度、月的功能?
在excel里,这个果然是有个设置的地方,修改后就好了。 点击文件选项卡,选项,在高级里,将图示选项的勾选给取消,然后再创建数据透视表或透视图,日期就不会自动组合了: 这个选项只对新…...
【设计模式深度剖析】【1】【行为型】【模板方法模式】| 以烹饪过程为例加深理解
👈️上一篇:结构型设计模式对比 文章目录 模板方法模式定义英文原话直译如何理解呢? 2个角色类图代码示例 应用优点缺点使用场景 示例解析:以烹饪过程为例类图代码示例 模板方法模式 模板方法模式(Template Method Pattern&…...
JAVA:异步任务处理类CompletableFuture让性能提升一倍
一、前言 CompletableFuture 是 Java 8 引入的一个功能强大的类,用于异步编程。它表示一个可能尚未完成的计算的结果,你可以对其添加回调函数来在计算完成时执行某些操作。在 Spring Boot 应用中,CompletableFuture 可以用于提高应用的响应性…...
10Linux 进程管理学习笔记
Linux 进程管理 目录 文章目录 Linux 进程管理一.进程1.显示当前进程状态(ps)进程树(pstree)1.1实时显示进程信息(top)顶部概览信息:CPU 状态:内存状态:进程信息表头:进程列表:1.2(htop) 2.终止进程(kill)2.1通过名称…...
一些关于深度聚类以及部分对比学习的论文阅读笔记
目录 资料SwAV问题方法方法的创新点为什么有效有什么可以借鉴的地方聚类Multi-crop 代码 PCL代码 Feature Alignment and Uniformity for Test Time Adaptation代码 SimSiam 资料 深度聚类算法研究综述(很赞,从聚类方法和深度学习方法两个方面进行了总结࿰…...
【ARM-Linux篇】u-boot编译
一、u-boot简介 uboot是一种通用的引导加载程序,它可以用于多种嵌入式系统,支持多种操作系统,如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备(如Flash, SD卡等)加载到内存中,并执…...
Lombok一文通
1、Lombok简介 作为java的忠实粉丝,但也不得不承认,java是一门比较啰嗦的语言,很多代码的编写远不如其他静态语言方便,更别说跟脚本语言比较了。 因此,lombok应运而生。 Lombok是一种工具库,它提供了一组…...
Seq2Seq模型:详述其发展历程、深远影响与结构深度剖析
Seq2Seq(Sequence-to-Sequence)模型是一种深度学习架构,专为处理从一个输入序列到一个输出序列的映射任务设计。这种模型最初应用于机器翻译任务,但因其灵活性和有效性,现已被广泛应用于自然语言处理(NLP&a…...
公网如何访问内网?
公网和内网已经成为我们生活中不可或缺的存在。由于内网的安全性考虑,公网无法直接访问内网资源。如何实现公网访问内网呢?本文将介绍一种名为【天联】的私有通道技术,通过安全加密,保障数据传输的安全性。 【天联】私有通道技术 …...
手机定制开发_基于天玑900的5G安卓手机定制方案
手机定制方案基于联发科天玑900强劲旗舰八核2.4GHz处理器。这款处理器采用了6nm先进制程工艺,为用户带来了痛快淋漓的性能体验。不论是进行游戏还是日常娱乐,用户都能轻松驾驭。手机搭载了最新的Android 13操作系统,提高了数据读取的准确性&a…...
免费,C++蓝桥杯等级考试真题--第2级
C蓝桥杯等级考试真题–第2级...
panic 、asset、crash 的含义和区别
在编程中,“panic” 和 “assert” 都是用于处理错误和异常情况的机制,但在不同的编程语言和框架中有一些区别。 panic: 含义:通常表示程序发生了无法恢复的错误或异常情况,需要立即终止程序的执行。 用法࿱…...
解决Windows 10通过SSH连接Ubuntu 20.04时的“Permission Denied”错误
在使用SSH连接远程服务器时,我们经常可能遇到各种连接错误,其中“Permission denied, please try again”是较为常见的一种。本文将分享一次实际案例的解决过程,帮助你理解如何排查并解决这类问题。 问题描述 在尝试从Windows 10系统通过SS…...
Windows 下 PostgreSQL 图形化界面安装、配置详解
相信大家对PostgreSQL都不陌生吧,自从MySQL被Oracle所控制后,PostgreSQL就成为了国内去O的首选数据库了,并且PostgreSQL目前不受任何商业公司控制,所以国内很多厂商都是基于PostgreSQL做二次开发来实现数据库自主可控的目标(国内很…...
曾巩,散文的艺术与哲思
曾巩,字子固,世称南丰先生,南丰(今江西)人,生于北宋真宗天禧三年(公元1019年),卒于北宋元丰六年(公元1083年),享年64岁。他是中国北宋…...
【SpringBoot】怎么在一个大的SpringBoot项目中创建多个小的SpringBoot项目,从而形成子父依赖
父子项目工程创建 步骤 先创建父项目 具体操作步骤请看本文章:使用maven工程创建spring boot项目 创建子项目 file- project structure module–new module 剩下步骤请看创建父工程时的操作使用maven工程创建spring boot项目 应用 确认即可 之后创建启动类…...
vue3组件通信与props
title: vue3组件通信与props date: 2024/5/31 下午9:00:57 updated: 2024/5/31 下午9:00:57 categories: 前端开发 tags: Vue3组件Props详解生命周期数据通信模板语法Composition API单向数据流 Vue 3 组件基础 在 Vue 3 中,组件是构建用户界面的基本单位&#…...
并发和异步编程:详细概述
01 Concurrency and Asynchronous Programming: a Detailed Overview 并发和异步编程:详细概述 Asynchronous programming is one of those topics many programmers find confusing. You come to the point when you think you’ve got it, only to later realize that the …...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
