下载模板、Excel导入、导出
下载模板
/// <summary>
/// 下载模板
/// </summary>
/// <returns></returns>
public ActionResult DownTemplate()
{
string path = Server.MapPath("/Template/TeacherTpl.xlsx");
return File(new FileStream(path, FileMode.Open), "application/octet-stream", "教师模板.xlsx");
}
使用时直接请求方法就行
window.location.href = '/Student/DownTemplate';
导入
引文件
<link href="~/Scripts/webuploader-0.1.5/webuploader.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/webuploader-0.1.5/webuploader.js"></script>
html
<div id="import">
<input type="hidden" id="filePath" />
<div id="uploader" class="wu-example">
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list"></div>
<div class="btns">
<div id="picker">选择文件</div>
<button type="button" id="ctlBtn" class="btn btn-default">开始上传</button>
</div>
</div>
</div>
初始化webuploader
function initUpload() {
var $list = $("#thelist");
var uploader = WebUploader.create({
// swf文件路径
swf: '~/Scripts/webuploader-0.1.5/Uploader.swf',
// 文件接收服务端。
server: '/Files/UploadFile?address=TemplateData',
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: {
id: '#picker',
multiple: false
},
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
resize: false,
fileNumLimit: 1,
fileSingleSizeLimit: 1024 * 1024 * 10,
accept: {
extensions: 'xlsx,xls'
}
});
// 当有文件被添加进队列的时候
uploader.on('fileQueued', function (file) {
$('#uploader .item').remove();
$list.append('<div id="' + file.id + '" class="item">' +
'<h4 class="info">' + file.name + '</h4><a class="upload-del" my-data-fid=' + file.id + '>x<a/><p class="state">等待上传...</p></div>');
});
// 文件上传过程中创建进度条实时显示。
uploader.on('uploadProgress', function (file, percentage) {
var $li = $('#' + file.id);
// $percent = $li.find('.progress .progress-bar');
//// 避免重复创建
//if (!$percent.length) {
// $percent = $('<div class="progress progress-striped active">' +
// '<div class="progress-bar" role="progressbar" style="width: 0%">' +
// '</div>' +
// '</div>').appendTo($li).find('.progress-bar');
//}
$li.find('p.state').text('上传中');
// $percent.css('width', percentage * 100 + '%');
});
uploader.on('uploadSuccess', function (file, data) {
if (data.error == 1) {
$('#filePath').val(data.filePath);
$('#' + file.id).find('p.state').text('已上传');
uploader.removeFile(file.id);
} else {
$('#' + file.id).find('p.state').text(res.msg);
}
});
uploader.on('uploadError', function (file) {
$('#' + file.id).find('p.state').text('上传出错');
});
uploader.on('uploadComplete', function (file) {
$('#' + file.id).find('.progress').fadeOut();
});
$('#thelist').on('click', '.upload-del', function () {
var fid = $(this).attr('my-data-fid');
uploader.removeFile(fid);
$(this).parent('.item').remove();
});
uploader.on("error", function (type) {
if (type == "F_EXCEED_SIZE") {
alert("文件大小不能超过10M");
}
else if (type == "Q_EXCEED_SIZE_LIMIT") {
alert("文件大小不能超过10M");
} else if (type == 'Q_EXCEED_NUM_LIMIT') {
alert("请先移除文件,再添加新文件");
} else {
alert("上传出错!请检查后重新上传!错误代码" + type);
}
// 点击上传
$('#ctlBtn').on('click', function () {
uploader.upload();
});
});
文件上传后台方法
public ActionResult UploadFile()
{
if (Request.Files.Count <= )
{
return Content(JsonConvert.SerializeObject(new {error = "", msg = "文件为空。"}));
}
string addr = Request["Address"];
if (string.IsNullOrEmpty(addr))
{
return Content(JsonConvert.SerializeObject(new { error = "", msg = "地址为空。" }));
}
string dirPath = Server.MapPath("/UploadFiles/" + addr);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
var file = Request.Files[];
string ext = Path.GetExtension(file.FileName);
string fileName = Guid.NewGuid().ToString() + ext;
string filePath = Path.Combine(dirPath, fileName); // 绝对路径
string returnPath = Path.Combine("/UploadFiles/" + addr, fileName); // 返回的路径
try
{
file.SaveAs(filePath);
return Content(JsonConvert.SerializeObject(new { error = "", msg = "上传成功", filePath = returnPath }));
}
catch (Exception e)
{
return Content(JsonConvert.SerializeObject(new { error = "", msg = "上传失败" }));
}
}
请求后台方法
var url = $('#filePath').val();
$.post('/Student/AddImportData', { path: url }, function (msg) {
if (msg=="success") {
$('#filePath').val('');
$("#thelist").remove();
$.messager.alert("提示", "导入成功",'info');
ReloadClearData();
$("#import").dialog('close');
return;
}
$.messager.alert("提示", msg, 'error');
})
后台方法
/// <summary>
/// 插入导入数据
/// </summary>
/// <returns></returns>
public ActionResult AddImportData()
{
bool flag;
string path;
if (string.IsNullOrEmpty(Request["path"]))
{
return Content("参数错误");
} path = Server.MapPath(Request["path"]);
if (!System.IO.File.Exists(path))
{
return Content("路径不存在");
}
var list = Import(path, out flag);
if (!flag)
{
return Content("导入失败");
}return bo.AddBulk(list) ? Content("ok") : Content("导入失败");
}
/// <summary>
/// 导入
/// </summary>
/// <returns></returns>
public List<Model.Teacher> Import(string path, out bool flag)
{
flag = true;
List<Teacher> list = new List<Teacher>();
//TODO 更改文件路径
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
IWorkbook wb = new XSSFWorkbook(fs); ;
var extension = Path.GetExtension(path);
ISheet sheet = wb.GetSheetAt();
int index = ;
IRow row = sheet.GetRow();
try
{
while (row != null)
{
list.Add(new Teacher()
{
TeacherName = row.GetCell().ToString(),
Password = WebHelper.ToMD5(""),
Birthday = WebHelper.StrToDate(row.GetCell().ToString()),
IDCard = row.GetCell().ToString(),
Gender = row.GetCell().ToString() == "男" ? : ,
MobilePhone = row.GetCell().ToString(),
QQNum = row.GetCell().ToString(),
WechatNum = row.GetCell().ToString(),
EmailNum = row.GetCell().ToString()
});
row = sheet.GetRow(++index);
}
return list;
}
catch (Exception)
{
flag = false;
return null;
}
}
}
导出(待测)
var workBook = new HSSFWorkbook();
var table = workBook.CreateSheet("writeExcel");
for (int i = ; i < ; i++)
{
var row = table.CreateRow(i);
for (int j = ; j < ; j++)
{
var cell = row.CreateCell(j);
cell.SetCellValue(j);
}
}
using (var fs = File.OpenWrite(@"D:/writeExcels.xls"))
{
workBook.Write(fs);
MessageBox.Show("Create succeed!");
}
下载模板、Excel导入、导出的更多相关文章
- 关于Excel导入导出的用例设计
目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...
- JeeSite中Excel导入导出
在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...
- Java之POI的excel导入导出
一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...
- excel 导入导出测试点
目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...
- Excel导入导出的业务进化场景及组件化的设计方案(上)
1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
- Excel导入导出帮助类
/// <summary> /// Excel导入导出帮助类 /// 记得引入 NPOI /// 下载地址 http://npoi.codeplex.com/rele ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- poi excel导入导出
pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artif ...
- java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)
最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...
随机推荐
- ML.NET 示例:多类分类之鸢尾花分类
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- 使用PHPExcel解析Excel表格
安装类库 从GitHub上下载PHPExcel类库 地址:https://github.com/PHPOffice/PHPExcel 解压后将Classes文件夹移动到ThinkPHP的extend目 ...
- IT程序员的抉择:我要离开帝都了
不知不觉在北京已经漂泊了近5年了,共为3家公司打过工,其中有几十人的小公司,也有几万人的大公司.随着工作技能的提升和工作经验的积累,薪水自然也涨了不少,但是看着北京的房价.物价飞涨,感觉自己赚多少都是 ...
- .NET Core 2.1中的分层编译(预览)
如果您是.NET性能的粉丝,最近有很多好消息,例如.NET Core 2.1中的性能改进和宣布.NET Core 2.1,但我们还有更多的好消息.分层编译是一项重要的新特性功能,我们可以作为预览供任何 ...
- python 打包下载 zipfile & tarfile
看百度网盘我们会发现这么一个需求,新建一个文件夹,然后向文件夹中上传文件,点击文件夹可以直接下载,下载的是一个压缩文件,将文件夹中所有文件全部打包了下载下来. 在python中,我们要做文件打包下载, ...
- awk分析mysql状态
今天是腊月27,明天是腊月28,一到过年,就习惯说农历,而不说公历.这两天挺闲的,就再造一把. 话说Linux处理文本工具有三剑客,awk.grep.sed,其中awk最为厉害,grep也挺是常用.今 ...
- hibernate坑边闲话3
could not initialize proxy - no Session] with root cause org.hibernate.LazyInitializationException: ...
- Sparse Principal Component Analysis via Regularized Low Rank Matrix Approximation(Adjusted Variance)
目录 前言 文章概述 固定\(\widetilde{\mathrm{v}}\) 固定\(\widetilde{\mathrm{u}}\) Adjusted Variance 前言 这篇文章用的也是交替 ...
- Python—re模块
re模块 正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re 常用的表达式规则 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹 ...
- C#对摄像头的操作示例,采用Aforge库
操作摄像头有三个办法:VFW.DirectShow.花钱买第三方控件 VFW技术比较古老,无法解决驱动不完善造成的某些问题 DirectShow技术相对完善一些,但这是C++才能实现的技术.如果用.N ...