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 ...
随机推荐
- 堆排序 java实现
import java.util.Arrays; /* * 思路: * 1.方法adjustDown:对于一个数组a[],针对第i个数进行向下(直到len-1)调整,使得该位置成为大顶堆 * 2.方法 ...
- eclipse配置tomcat后出现:java virtual machine launcher Error:Could not ……,Program will exit.
原贴在stack overflow上:https://stackoverflow.com/questions/50085750/apache-tomcat-9-x-not-working-with-e ...
- Qt的QVariant类
QStandardItemModel类中的函数 bool setData(const QModelIndex &index, const QVariant &value, int ro ...
- JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断).Action层:引用对应的Servi ...
- nginx如何处理请求
有必要了解一下nginx转发请求的方式,弄清它是如何转发请求的对我们理解nginx的server块的配置很有意义(虽然我也还不是很明白) 上一节说了配置文件中可以有多个server块,所以这里我配置2 ...
- 雷林鹏分享:使用 XSLT 显示 XML
使用 XSLT 显示 XML 通过使用 XSLT,您可以把 XML 文档转换成 HTML 格式. 使用 XSLT 显示 XML XSLT 是首选的 XML 样式表语言. XSLT(eXtensible ...
- 2017-2018-2 20165303 实验二《Java面向对象程序设计》实验报告
实验一 实验要求 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST 完成单元测试的学习 提交最后三个JUnit测试用例(正常情况, ...
- English trip V1 - B 2. May I Help You? 它是多少钱? Teacher:Lamb Key:
In this lesson you will learn to ask for things in shops 这节课您将学习如何在商店中寻找东西 课上内容(Lesson) 你通常去哪里购物? W ...
- PHP 练习项目------歆语微博项目
一个简单微博项目,php+mysql+apache开发,个人购买资料的项目练习,适合新手练习. 测试账号:zhangqie 密码:123456 功能列表: 数据库增删改查, 图片上传 表情,@好友 ...
- caffe 动态库 Release X64
Release X64平台 createdll.h#ifndef CREARDLL_H_#define CREARDLL_H_ extern "C" _declspec(dllex ...