.NET MVC+angular导入导出
cshtml:
<form class="form-horizontal" id="form1" role="form" ng-submit="import ()" enctype="multipart/form-data">
<button class="btn btn-primary" type="button" ng-click="downloadTemp()">下载模板</button>
<button type="submit" class="btn btn-primary">导入</button>
</form>
js:
//下载模板
$scope.downloadTemp = function () {
downloadfile({
url: "/Temp/DownloadTemp"
});
} //导入
$scope.import = function () {
var url = "/Temp/Import";
var formData = new FormData();//使用FormData进行文件上传
formData.append("file", file.files[0]);//拿到当前文件
$http.post(url, formData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).success(function (data, status) {
var success = "";
if (data.success = false)
{
success = "导入失败!";
}
$scope.AlertMesage(success + data.Message, 1);
}).error(function (data, status) {
$scope.AlertMesage("导入异常:[" + data.Message + "]!", 3);
});
};
Controller:
/// <summary>
/// 模板下载
/// </summary>
/// <returns></returns>
[HttpPost]
public FileResult DownloadTemp()
{
try
{
var fileName = $"数据_{DateTime.Now:yyyyMMdd}.xls";
//创建Excel文件的对象
HSSFWorkbook book = new HSSFWorkbook();
//添加一个sheet
ISheet sheet1 = book.CreateSheet("Sheet1");
#region 给sheet1添加第一行的头部标题
IRow row1 = sheet1.CreateRow();
//给sheet1添加第一行的头部标题
row1.CreateCell().SetCellValue("编号");
row1.CreateCell().SetCellValue("名称");
row1.CreateCell().SetCellValue("运能");
#endregion
//获取正常状态(自营,在用,有效)的站点运能数据
var list = GetAllListInfo();
if (list != null && list .Any())
{
for (int i = ; i < list.Count(); i++)
{
NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
rowtemp.CreateCell().SetCellValue(capacityList[i].Code);
rowtemp.CreateCell().SetCellValue(capacityList[i].Name);
rowtemp.CreateCell().SetCellValue(capacityList[i].Capacity); }
}
// 写入到客户端
MemoryStream ms = new MemoryStream();
book.Write(ms);
ms.Seek(, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel", fileName);
}
catch (Exception ex)
{
throw new Exception("导出数据失败:" + ex.ToString());
}
}
/// <summary>
/// 导入
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult Import()
{
try
{
//接收客户端传递过来的数据
HttpPostedFileBase file = Request.Files["file"];
if (file == null)
{
return Json(new
{
Success = false,
Message = "请选择上传的Excel文件",
});
}
//对文件的格式判断,此处省略
string fileExt = Path.GetExtension(file.FileName.Replace("\"", ""));
var supportArr = new string[] { ".xls", ".xlsx" };
if (supportArr.Contains(fileExt) == false)
{
//throw new ArgumentException(string.Format("不支持的文件类型:{0}", fileExt));
return Json(new
{
Success = false,
Message = string.Format("不支持的文件类型:{0}", fileExt),
});
} Stream inputStream = file.InputStream;
//HSSFWorkbook hssfworkbook = new HSSFWorkbook(inputStream);
IWorkbook workbook = null;
if (fileExt == ".xlsx")
{
workbook = new XSSFWorkbook(inputStream); // .xlsx
}
else
{
workbook = new HSSFWorkbook(inputStream); // .xls
}
NPOI.SS.UserModel.ISheet sheet = workbook.GetSheetAt();
// IRow headerRow = sheet.GetRow(0);//第一行为标题行
// int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells
int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1
List<StationEntity> list = new List<StationEntity>();
if (rowCount > )
{
try
{
for (int i = (sheet.FirstRowNum + ); i <= rowCount; i++)
{
IRow row = sheet.GetRow(i);
StationEntity model = new StationEntity(); if (row != null)
{ model.Code = row.GetCell() != null ? GetCellValue(row.GetCell()) : string.Empty ;
model.Name = row.GetCell() != null ? GetCellValue(row.GetCell()) : string.Empty;
model.Capacity = row.GetCell() != null ? ConvertHelper.ToInt32(GetCellValue(row.GetCell())) : ;
list.Add(model);
}
}
}
catch (Exception)
{
return Json(new
{
Success = false,
Message = "请填写正确格式的数据",
});
}
} //导入运能数据
if (list != null && list.Any())
{
string msg = string.Empty;
var success = StationBLL.RefreshData(list,out msg);
return Json(new
{
Success = success,
Message = msg,
});
}
else
return Json(new
{
Success = false,
Message = "没有要导入的数据",
});
}
catch (Exception ex)
{ throw new Exception("导入数据失败:" + ex.ToString());
}
}
/// 根据Excel列类型获取列的值
/// </summary>
/// <param name="cell">Excel列</param>
/// <returns></returns>
private static string GetCellValue(ICell cell)
{
if (cell == null)
return string.Empty;
switch (cell.CellType)
{
case CellType.Blank:
return string.Empty;
case CellType.Boolean:
return cell.BooleanCellValue.ToString();
case CellType.Error:
return cell.ErrorCellValue.ToString();
case CellType.Numeric:
case CellType.Unknown:
default:
return cell.ToString();
case CellType.String:
return cell.StringCellValue;
case CellType.Formula:
try
{
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(cell.Sheet.Workbook);
e.EvaluateInCell(cell);
return cell.ToString();
}
catch
{
return cell.NumericCellValue.ToString();
}
}
}
.NET MVC+angular导入导出的更多相关文章
- MVC execl 导入导出
MVC execl 导入导出 <input id="xls" name="xls" type="file" style="w ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(87)-MVC Excel导入和导出
本文示例代码下载: 链接:http://pan.baidu.com/s/1jHBdgCA 密码:hzh7 ps:Vs数据库脚本在解压目录下,修改web.config数据库链接,示例代码包含:导入,导出 ...
- 用MVC导入导出
导入导出对于刚做的人一脸懵逼,但是明白思路之后就感觉非常容易,我也是研究了好久,才总算做了出来,放在这里给大家分享一下 一.先看下导出 视图脚本 <script type ="text ...
- .NET导入导出Excel
若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...
- NPOI导入导出Excel
.net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交 代码: 第一步. 在页面里面加入2个隐藏的iframe, 如下 ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
- java 中Excel的导入导出
部分转发原作者https://www.cnblogs.com/qdhxhz/p/8137282.html雨点的名字 的内容 java代码中的导入导出 首先在d盘创建一个xlsx文件,然后再进行一系列 ...
- ASP.NET MVC NPOI导入Excel DataTable批量导入到数据库
使用NPOI导入Excel 首先在MVC项目中导入NPOI 查询NPOI安装,排序依据,选择:最高下载量,选择第一个. 在控制器中创建ExcelController 在Index视图中写入代码: @u ...
随机推荐
- Lintcode470-Tweaked Identical Binary Tree-Easy
470. Tweaked Identical Binary Tree Check two given binary trees are identical or not. Assuming any n ...
- Vue-admin工作整理(七):路由的切换动效
思路就是通过 transition-group 这个组件来对多组件进行控制,效果是通过样式来写,transition-group要有指定的key值,样式中通过name来命名类的名字 <templ ...
- Mac连接非22端口linux服务器
Mac连接非22端口linux服务器 原文链接:https://www.cnblogs.com/blog5277/p/9507080.html 原文作者:博客园--曲高终和寡 1:ssh连接 打开终端 ...
- P2678 跳石头
传送门 思路: 二分跳跃的最短距离 mid .暴力判断如果有两个石头直接的距离小于 mid ,就把这个石头拿走.如果拿走的石头数目 cnt ≤ m,说明二分的答案可行,ans = mid,接着二分更短 ...
- Hash索引和BTree索引区别【转】
索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...
- UI组件--element-ui--Table组件自定义合计行
需求: Element-ui的Table组件自带合计行, 但是需求需要在合计行的某些单元格有特别的样式以及事件, 没有研究出怎么在既有合计行上完成此需求, 于是利用其原本的一些属性完成自定义合计行. ...
- xshell 使用root 连接ubuntu server
下载一个虚拟机,安装Ubuntu server 下载一个xshell 第一步 :先使用账号登录 第二步:给root设置初始密码 sudo passwd root 第三步:切换root 账户,使用vi ...
- JS-getHours()方法
var time=new Date().getHours(); 获取当前系统时间的小时值,eg:若当前系统时间为2019.4.25 10:52 则返回10
- springboot缓存注解——@CacheEvict
@CacheEvict:缓存清除 可以通过key指定清除的数据 如果不写默认参数的值 allEntries = true (是否删除该缓存名中所有数据,默认为false) beforeInvocati ...
- Ubuntu - Start - 必要软件安装
1.安装Chromium浏览器 sudo apt install chromium-browser 如果出错, 先更新下apt sudo apt update 2. 安装rime输入法 sudo ap ...