.Net Core 使用NPOI导入数据
时间:2019-09-20
本文章向大家介绍.Net Core 使用NPOI导入数据,主要包括.Net Core 使用NPOI导入数据使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、搭建环境
1.新建ASP.NET Core Web 应用程序
2.选择API
3.引用Swashbuckle.AspNetCore NuGet 包进行安装. Swashbuckle.AspNetCore 是一个开源项目,用于生成 ASP.NET Core Web API 的 Swagger 文档。
前端开发人员可在浏览器中访问此接口文档。
4.光引用此NuGet包是不行的,还要在Startup中添加并配置Swaage中间件
首先在ConfigureServices中写入以下代码:
public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); #region services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "API文档", Version = "v1" }); }); #endregion }
然后在Configure中写入以下代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseHsts(); } #region app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); #endregion app.UseHttpsRedirection(); app.UseMvc(); }
5.右键项目生成XML文件,并在Startup中注册服务,用于读取这个XML文档,不然写的接口都不会显示出来.
引用NuGet包:Microsoft.Extensions.PlatformAbstractions
接着在Startup类ConfigureServices方法中,添加如下代码:
public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); #region services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "API文档", Version = "v1" }); #region var basePath = PlatformServices.Default.Application.ApplicationBasePath; //MyImport.xml是我的项目生成XML文档的后缀名,具体的以你项目为主 var xmlPath = Path.Combine(basePath, "MyImport.xml"); c.IncludeXmlComments(xmlPath); #endregion }); #endregion }
OK ,现在可以新建一个控制器,写一个接口看看有没有效果
将地址栏修改一下
我们也可以在launchSettings.json中做一下更改,这样就不用每次都改浏览器地址栏了,如下:
二·、数据库新建表及项目中实体类的建立
--商品表 Create Table Commodity ( Cid int primary key identity(1,1),--主键,自增 Name varchar(50) not null,--商品名称 Price decimal(18,2) not null,--价格 [Type] varchar(50) not null,--商品类别 [Time] varchar(50) not null,--保质期 Remarks varchar(100)--备注 )
using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MyImport.Model { /// <summary> /// 商品类 /// </summary> public class Commodity { /// <summary> /// 主键Id /// </summary> [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)] public int Cid { get; set; } /// <summary> /// 商品名称 /// </summary> [SugarColumn(Length = 50, IsNullable = false)] public string Name { get; set; } /// <summary> /// 商品价格 /// </summary> [SugarColumn(IsNullable = false)] public double Price { get; set; } /// <summary> /// 商品类别 /// </summary> [SugarColumn(Length = 50, IsNullable = false)] public string Type { get; set; } /// <summary> /// 保质期 /// </summary> [SugarColumn(Length = 50, IsNullable = false)] public string Time { get; set; } /// <summary> /// 备注 /// </summary> [SugarColumn(Length = 100, IsNullable = true)] public string Remarks { get; set; } } }
三、代码编写
注:在写代码之前,先引用两个NuGet包:NPOI(这个包用来操作Excel)和SqlSugarCore(这是一个高性能的ORM框架,操作数据库更便捷)
话不多说,贴代码:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MyImport.Model; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using SqlSugar; namespace MyImport.Controllers { [Route("api/[controller]")] [ApiController] public class MyCoreController : Controller { public MyCoreController() { } SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "Data Source=LENOVO-PC;Initial Catalog=School;Integrated Security=True", DbType = SqlSugar.DbType.SqlServer, IsAutoCloseConnection = true }); /// <summary> /// 数据导入 /// </summary> /// <returns></returns> [HttpPost] public async Task<string> Import(IFormFile file) { string ReturnValue = string.Empty; //定义一个bool类型的变量用来做验证 bool flag = true; try { string fileExt = Path.GetExtension(file.FileName).ToLower(); //定义一个集合一会儿将数据存储进来,全部一次丢到数据库中保存 var Data = new List<Commodity>(); MemoryStream ms = new MemoryStream(); file.CopyTo(ms); ms.Seek(0, SeekOrigin.Begin); IWorkbook book; if (fileExt == ".xlsx") { book = new XSSFWorkbook(ms); } else if (fileExt == ".xls") { book = new HSSFWorkbook(ms); } else { book = null; } ISheet sheet = book.GetSheetAt(0); int CountRow = sheet.LastRowNum + 1;//获取总行数 if (CountRow - 1 == 0) { return "Excel列表数据项为空!"; } #region 循环验证 for (int i = 1; i < CountRow; i++) { //获取第i行的数据 var row = sheet.GetRow(i); if (row != null) { //循环的验证单元格中的数据 for (int j = 0; j < 5; j++) { if (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == 0) { flag = false; ReturnValue += $"第{i + 1}行,第{j + 1}列数据不能为空。"; } } } } #endregion if (flag) { for (int i = 1; i < CountRow; i++) { //实例化实体对象 Commodity commodity = new Commodity(); var row = sheet.GetRow(i); if (row.GetCell(0) != null && row.GetCell(0).ToString().Trim().Length > 0) { commodity.Name = row.GetCell(0).ToString(); } if (row.GetCell(1) != null && row.GetCell(1).ToString().Trim().Length > 0) { commodity.Price = Convert.ToDouble(row.GetCell(1).ToString()); } if (row.GetCell(2) != null && row.GetCell(2).ToString().Trim().Length > 0) { commodity.Type = row.GetCell(2).ToString(); } if (row.GetCell(3) != null && row.GetCell(3).ToString().Trim().Length > 0) { commodity.Time = row.GetCell(3).ToString().ToString(); } if (row.GetCell(4) != null && row.GetCell(4).ToString().Trim().Length > 0) { commodity.Remarks = row.GetCell(4).ToString(); } else { commodity.Remarks = "暂无"; } Data.Add(commodity); } var data = db.Insertable<Commodity>(Data).ExecuteCommand(); ReturnValue = $"数据导入成功,共导入{CountRow - 1}条数据。"; } if (!flag) { ReturnValue = "数据存在问题!" + ReturnValue; } } catch (Exception) { return "服务器异常"; } return ReturnValue; } } }
建一个Excel文件,填写好测试数据
打开接口文档,选择这个Excel文件,进行导入
搞定!希望可以帮助到你、^-^
原文地址:https://www.cnblogs.com/zhangnever/p/11426643.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Head First设计模式——简单工厂、工厂、抽象工厂
- Golang | 简介channel常见用法,完成goroutin通信
- Head First设计模式——单例模式
- 【日拱一卒】链表——两个有序的链表合并
- Head First设计模式——命令模式
- Flask表单之WTForms和flask-wtf
- Head First设计模式——适配器和外观模式
- 「2020最新」Spring最易学习教程 4—整合Mybatis 事务控制
- Head First设计模式——模板方法模式
- Head First设计模式——迭代器模式
- PR工具自带的电源网络分析功能靠谱吗?
- flask_admin使用教程
- C#使用FtpWebRequest 基础连接已经关闭:连接被意外关闭(The underlying connection was closed:The connection was closed u
- 自动化运维实践 | Ansible入门
- 通过设置JDK解决存在多个Gradle后台进程的问题