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文件的更多相关文章

  1. Java web实时进度条整个系统共用(如java上传进度条、导入excel进度条等)

    先上图: 这上文件上传的: 这是数据实时处理的: 1:先说说什么是进度条:进度条即计算机在处理任务时,实时的,以图片形式显示处理任务的速度,完成度,剩余未完成任务量的大小,和可能需要处理时间,显示方式 ...

  2. ASP.NET Core 上传多文件 超简单教程

    示例源码下载地址 https://qcloud.coding.net/api/project/3915794/files/4463836/download 项目地址 https://dev.tence ...

  3. .NET CORE上传文件到码云仓库【搭建自己的图床】

    .NET CORE上传文件到码云仓库[搭建自己的图床] 先建一个公共仓库(随意提交一个README文件或者.gitignore文件保证master分支的存在),然后到gitee的个人设置页面找到[私人 ...

  4. .net Core 上传文件详解

    .net core 和.net framework上传文件有很多需要注意的地方 .net framework 上传文件用httppostedfilebase .net core 上传文件用 IForm ...

  5. java 处理上传exl数据 并导入数据库

    思路:处理上传exl表格,并读取文件,数据,讲数据放去集合,循环插入数据库. 重点,读取文件时需要读数据,格式和数据是否正确,(因为只是把整条路打通,所以这块没有细弄): 项目使用ssm框架, str ...

  6. POI上传,导入excel文件到服务器1

    首先说一下所使用的POI版本3.8,需要用的的Jar包: dom4j-1.6.1.jarpoi-3.8-20120326.jarpoi-ooxml-3.8-20120326.jarpoi-ooxml- ...

  7. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...

  8. 文件上传之——用SWF插件实现文件异步上传和头像截取

    之前写过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Fla ...

  9. uedit修改文件上传路劲,支持api文件接口

    首先修改一个东西ueditor/ueditor.config.js serverUrl: URL + "php/controller.php" 原来 serverUrl: &quo ...

随机推荐

  1. 如何将exe注册为windows服务,直接从后台运行

    方法一:使用windows自带的命令sc 使用sc create 方法创建. 如:注册服务 sc create ResharperServices binpath= D:\ResharperServi ...

  2. VC.【转】窗口置于前台并激活的方法

    1.VC 窗口置于前台并激活的方法 - CSDN博客.html https://blog.csdn.net/oXunFeng/article/details/52681279 2.(http://ww ...

  3. Linux Ubuntu下用Android NDK 生成独立交叉编译链

    本文主要介绍使用Android NDK生成独立交叉编译链,然后使用独立交叉编译链编译Android程序 下载NDK 下载与自己操作系统相吻合的版本 下载地址 解压到安装目录(如~/myndk): ta ...

  4. 牛客网NOIP赛前集训营-普及组(第一场)C 括号

    括号 思路: dp 状态:dp[i][j]表示到i位置为止未匹配的 '(' 个数为j的方案数 状态转移: 如果s[i] == '(' dp[i][j] = dp[i-1][j] + dp[i-1][j ...

  5. maven配置环境变量失败解决办法

    配置maven路径什么的统统正确,最后测hi不成功.在网上搜索了好多资料方法都解不了 具体问题具体对待吧,如果有和我类似的小伙伴,可以尝试一下我的这个办法,在maven路径后面加/bin path变量 ...

  6. 解决微信video全屏的问题,不在本页面播放

    在微信浏览器中使用video标签,点击播放会跳出本页面,自动进行全屏播放,原因是自动跳转到手机微信内置的浏览器中去播放去了!!! 在video中加上连个属性就好了,反正最近的一个项目,我是这样做的就好 ...

  7. js获取url传递得参数

    方法一:正则法 function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(& ...

  8. django-simple-captcha 验证码插件介绍 django-simple-captcha 使用 以及添加动态ajax刷新验证

    django-simple-captcha作为一款django的验证码插件,使用方法非常简单,能够快速应用到web应用中. 文档官网地址:django-simple-captcha 参考博客:http ...

  9. 雷林鹏分享:jQuery EasyUI 插件

    jQuery EasyUI 插件 jQuery EasyUI 提供了用于创建跨浏览器网页的完整的组件集合,包括功能强大的 datagrid(数据网格).treegrid(树形表格). panel(面板 ...

  10. OnSen UI结合AngularJs打造”美团"APP"订单”页面 --Hybrid App

    1.页面效果图: 演示链接地址:http://www.nxl123.cn/bokeyuan/meiTuanDemo_order/ 2.核心代码 order.html: <ons-page id= ...