net core 上传并使用EPPlus导入Excel文件
1. cshtml页面 form
<form id="form" method="post" action="/SaveValueBatch"
enctype="multipart/form-data">
<input type="file" name="uploadExcel" style="width:200px;" />
</form>
2. controller
[HttpPost]
public ActionResult SaveValueBatch(IFormCollection form)
{
try
{
var files =Request.Form.Files.Where(x => x.Name.Equals("uploadExcel")); //非空限制
if (files == null || files.Count() <= ) { return Json(new { isSuccess = false, message = "请选择要上传的Excel文件" }, "text/html"); } //格式限制
var allowType = new string[] { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};
if (files.Any(b => !allowType.Contains(b.ContentType)))
{
return Json(new { isSuccess = false, message = "只能上传Excel 2007 格式文件" }, "text/html");
} //大小限制
if (files.Sum(b => b.Length) >= * * )
{
return Json(new { isSuccess = false, message = "上传文件的总大小只能在4M以下" }, "text/html");
} //写入服务器磁盘
foreach (var file in files)
{ var fileName = file.FileName;
var path = Path.Combine(_host.ContentRootPath+ "/Upload", fileName);
using (var stream = System.IO.File.Create(path))
{
file.CopyTo(stream);
}
}
return Json(new { isSuccess = true, message = "保存成功" }, "text/html");
}
catch (Exception e)
{ return Json(new { isSuccess = false, message = "保存失败:" + e.InnerException.Message }, "text/html");
}
}
private IHostingEnvironment _host; public ExcelController(IHostingEnvironment host)
{
_host = host;
}
3. 读取excel内容,用context.AddRange 插入数据(这个是用Merge SQL语句操作的.), 之前用SQLServer 2005,不支持Merge语句, 只有升级到到新版本. 我选择升级到SQL2014了. (SQL 2016/2017开始支持Linux,暂时我不需要)
using (ExcelPackage ep = new ExcelPackage(new FileInfo(path)))
{
ExcelWorksheet ws = ep.Workbook.Worksheets[]; //第1张Sheet int colStart = ws.Dimension.Start.Column; //工作区开始列,start=1
int colEnd = ws.Dimension.End.Column; //工作区结束列
int rowStart = ws.Dimension.Start.Row; //工作区开始行号,start=1
int rowEnd = ws.Dimension.End.Row; //工作区结束行号 Guid[] columnsGuid = new Guid[colEnd+]; //skip zero index
for (int k = colStart; k <= colEnd; k++)
{
string columnName = ws.Cells[, k].Text;//列名 }
for (int i = rowStart + ; i <= rowEnd; i++) //第1行是列名,跳过
{
Guid rowGuid = Guid.NewGuid();
for (int j = colStart; j <= colEnd; j++)
{
var info = new BaseInfo();
info.Id = ;
info.RowGuid = rowGuid;
info.Guid = columnsGuid[j];
info.FieldValue = ws.Cells[i, j].Text;
infos.Add(info); } }
_context.ChangeTracker.AutoDetectChangesEnabled = false;
_context.AddRange(infos);
_context.SaveChanges();
_context.ChangeTracker.AutoDetectChangesEnabled = true; }
有一个注意点: 如果你是用excel上传数据,同时做新增和修改的话, DB已有的数据,不要放在Infos 这个数组 _context.AddRange(infos);
因为如果你把DB已有的数据再AddRange,它会尝试插入一条新的记录,SQL语句里包括主键,而你的主键是自动生成的话.就会出现这个错误
System.Data.SqlClient.SqlException (0x80131904): 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'XXXXXX' 中的标识列插入显式值。
net core 上传并使用EPPlus导入Excel文件的更多相关文章
- Java web实时进度条整个系统共用(如java上传进度条、导入excel进度条等)
先上图: 这上文件上传的: 这是数据实时处理的: 1:先说说什么是进度条:进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,显示方式 ...
- ASP.NET Core 上传多文件 超简单教程
示例源码下载地址 https://qcloud.coding.net/api/project/3915794/files/4463836/download 项目地址 https://dev.tence ...
- .NET CORE上传文件到码云仓库【搭建自己的图床】
.NET CORE上传文件到码云仓库[搭建自己的图床] 先建一个公共仓库(随意提交一个README文件或者.gitignore文件保证master分支的存在),然后到gitee的个人设置页面找到[私人 ...
- .net Core 上传文件详解
.net core 和.net framework上传文件有很多需要注意的地方 .net framework 上传文件用httppostedfilebase .net core 上传文件用 IForm ...
- java 处理上传exl数据 并导入数据库
思路:处理上传exl表格,并读取文件,数据,讲数据放去集合,循环插入数据库. 重点,读取文件时需要读数据,格式和数据是否正确,(因为只是把整条路打通,所以这块没有细弄): 项目使用ssm框架, str ...
- POI上传,导入excel文件到服务器1
首先说一下所使用的POI版本3.8,需要用的的Jar包: dom4j-1.6.1.jarpoi-3.8-20120326.jarpoi-ooxml-3.8-20120326.jarpoi-ooxml- ...
- python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)
一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...
- 文件上传之——用SWF插件实现文件异步上传和头像截取
之前写过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Fla ...
- uedit修改文件上传路劲,支持api文件接口
首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来 serverUrl: &quo ...
随机推荐
- Tomcat日志系统详解
综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...
- P2002 消息扩散
其实这道题蛮水的 思路: 根据题意,他说有环,自然想到要用tarjan,后面就很简单了: 缩完点之后重新建图,开一个inin数组表示该点的入度是多少(psps:该点表示缩完点之后的大点): 最后统计一 ...
- go 单进程并发
demo1 // This sample program demonstrates how to create goroutines and // how the scheduler behaves. ...
- go 内嵌对象类型
demo1 // Sample program to show how to embed a type into another type and // the relationship betwee ...
- 小程序模板template
WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用. 定义模板 使用 name 属性,作为模板的名字.然后在<template/>内定义代码片段,如: & ...
- 文件编码检测.ZC
1.今天(20181101) 发现 g文件中的 xml头 和 文件编码不一致,最后发现 貌似是我搞错了,人家的文件 编码方式写的是对的. 我发现的现象是:XML里面写的是"GBK" ...
- Qt解析Json数据
1 JSON数据简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范) ...
- MYSQL常用函数(类型转化函数)
为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型.类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED 示例: ...
- <%@page contentType="text/html;charset=gbk"%> 与 <meta http-equiv="Content-Type" content="text/html; charset=GBK">区别
前一个是在服务端起作用,是告诉应用服务器采用何种编码输出JSP文件流, 后一个是在客户端起作用,是告诉浏览器是采用何种编码方式显示HTML页面
- 雷林鹏分享:jQuery EasyUI 窗口 - 窗口与布局
jQuery EasyUI 窗口 - 窗口与布局 Layout 组件可以内嵌在窗口(window)中.我们可以创建一个复杂的布局窗口,甚至不需要写任何的 js 代码.jquery-easyui 框架帮 ...