一、搭建环境

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(,),--主键,自增
Name varchar() not null,--商品名称
Price decimal(,) not null,--价格
[Type] varchar() not null,--商品类别
[Time] varchar() not null,--保质期
Remarks varchar()--备注
)
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 = , IsNullable = false)]
public string Name { get; set; } /// <summary>
/// 商品价格
/// </summary>
[SugarColumn(IsNullable = false)]
public double Price { get; set; } /// <summary>
/// 商品类别
/// </summary>
[SugarColumn(Length = , IsNullable = false)]
public string Type { get; set; } /// <summary>
/// 保质期
/// </summary>
[SugarColumn(Length = , IsNullable = false)]
public string Time { get; set; } /// <summary>
/// 备注
/// </summary>
[SugarColumn(Length = , 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(, 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(); int CountRow = sheet.LastRowNum + ;//获取总行数 if (CountRow - == )
{
return "Excel列表数据项为空!"; }
#region 循环验证
for (int i = ; i < CountRow; i++)
{
//获取第i行的数据
var row = sheet.GetRow(i);
if (row != null)
{
//循环的验证单元格中的数据
for (int j = ; j < ; j++)
{
if (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == )
{
flag = false;
ReturnValue += $"第{i + 1}行,第{j + 1}列数据不能为空。";
}
}
}
}
#endregion
if (flag)
{
for (int i = ; i < CountRow; i++)
{
//实例化实体对象
Commodity commodity = new Commodity();
var row = sheet.GetRow(i); if (row.GetCell() != null && row.GetCell().ToString().Trim().Length > )
{
commodity.Name = row.GetCell().ToString();
}
if (row.GetCell() != null && row.GetCell().ToString().Trim().Length > )
{
commodity.Price = Convert.ToDouble(row.GetCell().ToString());
}
if (row.GetCell() != null && row.GetCell().ToString().Trim().Length > )
{
commodity.Type = row.GetCell().ToString();
}
if (row.GetCell() != null && row.GetCell().ToString().Trim().Length > )
{
commodity.Time = row.GetCell().ToString().ToString();
}
if (row.GetCell() != null && row.GetCell().ToString().Trim().Length > )
{
commodity.Remarks = row.GetCell().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文件,进行导入

搞定!希望可以帮助到你、^-^

.Net Core 使用NPOI导入数据的更多相关文章

  1. .Net Core 使用 NPOI 导入Excel

    由于之前在网上查阅一些资料发现总是不能编译通过,不能正常使用,现把能正常使用的代码贴出: /// <summary> /// Excel导入帮助类 /// </summary> ...

  2. .Net core NPOI导入导出Excel

    最近在想.net core NPOI 导入导出Excel,一开始感觉挺简单的,后来真的遇到很多坑.所以还是写一篇博客让其他人少走一些弯路,也方便忘记了再重温一遍.好了,多的不说,直接开始吧. 在.Ne ...

  3. NPOI导入导出Excel数据

    代码: using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; usi ...

  4. .net core利用MySqlBulkLoader大数据批量导入MySQL

    最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...

  5. .NET Core使用NPOI导出复杂Word详解

    前言: 最近使用NPOI做了个导出Word文档的功能,关于使用.NET Core 导出Word文档的方式有很多.最终我为什么选择了NPOI来实现了这个功能,首先是NPOI是一个开源,免费且容易上手的第 ...

  6. .NET Core使用NPOI导出复杂,美观的Excel详解

    前言: 这段时间一直专注于数据报表的开发,当然涉及到相关报表的开发数据导出肯定是一个不可避免的问题啦.客户要求要导出优雅,美观的Excel文档格式的来展示数据,当时的第一想法就是使用NPOI开源库来做 ...

  7. 搜索引擎Solr系列(二): Solr6.2.1 从MySql中导入数据

     一:建立MySql测试表,如下图: 二:solr导入配置: 1.新建demo core文件夹,并修改managed-schema里面的配置文件建立索引字段: 2.把mysql-connector-j ...

  8. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  9. c#.net 使用NPOI导入导出标准Excel (asp.net winform csharp)

    尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...

随机推荐

  1. 浏览器安装Tampermonkey(俗称油猴子插件),实现免费观看Vip视频、免费下载付费资源等……

    应用场景 说起浏览器,本人常用google,谷歌浏览器,速度快,里面有很多插件,可以实现用户百度云盘下载限制,破解vip视频.百度广告屏蔽,视频广告的屏蔽,百度网盘资源直接下载等实用功能.今天就来分享 ...

  2. Django之CBV视图源码分析(工作原理)

    1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ...

  3. 雷子聊并发编程(001):基础知识之串行&并行&并发

    前言 编写正确的程序很难,而编写正确的并发程序则难上加难.与串行程序相比,在并发程序中存在更多容易出错的地方.那么,为什么还要编写并发程序?原因很简单,能充分发挥与利用多处理器系统的强大计算能力. 在 ...

  4. vue 请求图片方法

    node的每一个文件,都是一个域,那么里面所有的变量都不允许被外界引用,除非导出.要使用外界的变量,也必须使用导入的方式来导入.import 文件路径. css可以直接使用import +文件路径导入 ...

  5. QHDYZ模拟赛20191027 提前透题

    你们想的美 我给你们透一下题目名称 别刷博客了快去做题

  6. Sublime text3配置C++环境

    前言 传说sublime是全球最好的编辑器,可是只是编辑器啊!!!如果要运行,对于我们这些蒟蒻来说,不得不去使用DEV_C++.我们总是幻想能让sublime变成一个轻量级IDE,那该多好啊!!! 那 ...

  7. 这次,我是如何监控服务器CPU和内存的

    背景 在新项目A中,要结合业务做性能测试.对于做过N次性能测试的我,这次有些巧妇有难无米之炊的感觉.以往的项目,服务器都是部署在AWS或者阿里云,像这样的云服务器厂商是可以通过轻松配置各种Dashbo ...

  8. Redis性能解析--Redis为什么那么快?

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...

  9. Laravel用户认证

    前期准备 Laravel的权限配置文件位于 config/auth.php,Laravel的认证组件由"guards"和"providers"组成, Guard ...

  10. Flink中发送端反压以及Credit机制(源码分析)

    上一篇<Flink接收端反压机制>说到因为Flink每个Task的接收端和发送端是共享一个bufferPool的,形成了天然的反压机制,当Task接收数据的时候,接收端会根据积压的数据量以 ...