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. 理解 Redis(6) - List 值

    list 值就是一组根据插入顺序排列的字符串, 从左向右排列, 左边为头(head), 右侧为尾(tail). 左边为顶部, 右边为底部. 下图为 list 值的示意图: 从左侧开始向键为 num 的 ...

  2. modal结合art-template

    内容div <div id="modal-cont"></div> 模板tpl <script id="modal-tpl" ty ...

  3. eclipse中配置maven和创建第一个 Spring Boot Application

    关于Maven的下载.环境变量的配置自行百度,今天记录一下在Eclipse中配置Maven的操作: mvn -v 出现上图说明maven和jdk的要求都达到了(jdk要8.0及以上的版本) 然后在ec ...

  4. R语言多层绘图

    #########################################################第一种实现方法close.screen(all.screens = T)split.s ...

  5. 学习笔记49—matlab FDR校正

    matlab自带函数mafdr,当ttest数较多时,可直接用[FDR, Q]=mafdr(P):但是Storey procedure在p值少于1000个时会崩溃,此时应改用BH FDR方法:mafd ...

  6. Python Selenium 文件上传之Autoit

    今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python Selenium 文件上传之SendKeys 这种方法直接通过命令行执行脚本时没有问题,可以成功 ...

  7. 如何在ubuntu中安装中文输入法?

    如何在ubuntu中安装中文输入法  在桌面右上角设置图标中找到“System Setting”,双击打开. 在打开的窗口里找到“Language Support”,双击打开.  可能打开会说没有安装 ...

  8. [maven] introduction to the standard directory layout

    The next section documents the directory layout expected by Maven and the directory layout created b ...

  9. WPF经典编程模式-MVVM示例讲解

    https://www.cnblogs.com/lvdongjie/p/5515962.html

  10. 错误不能中断(不许因错误或异常而产生阻断性Bug)

    错误不能终断(不许因错误或异常而产生阻断性Bug),当遇到错误或异常时,要处理掉,并且给予合理提示(比如:XXX失败,请重试)