下载模板

 /// <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导入、导出的更多相关文章

  1. 关于Excel导入导出的用例设计

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

  2. JeeSite中Excel导入导出

    在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...

  3. Java之POI的excel导入导出

    一.Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件.这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Offic ...

  4. excel 导入导出测试点

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

  5. Excel导入导出的业务进化场景及组件化的设计方案(上)

    1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...

  6. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

  7. Excel导入导出帮助类

    /// <summary>    /// Excel导入导出帮助类    /// 记得引入 NPOI    /// 下载地址   http://npoi.codeplex.com/rele ...

  8. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  9. poi excel导入导出

    pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artif ...

  10. java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

    最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...

随机推荐

  1. 【转】DataTable与实体类互相转换

    原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...

  2. jquery tooltip

    这是个加了点淡入淡出效果的顶部tooltip控件,会自动消失 用法: <head> <title></title> <link href="base ...

  3. jqGrid之treeGrid及行拖拽

    单纯的做个小记录 今天做功能用到了jqGrid里面的treeGrid,遇到几个问题,这里做下记录 treeGrid 树表格的应用在官网给出了很直白的例子: 1.http://blog.mn886.ne ...

  4. WinForm 之 窗口最小化到托盘及右键图标显示菜单

    Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. ...

  5. Appium-超过60s的应用场景如何处理

    前言: 最近在搞appium自动化项目,遇到超过60s的应用场景时,总是报错报错.如何解决呢?见下文. 报错信息: 2018-05-21 14:03:42:253 - [HTTP] <-- PO ...

  6. JS 执行上下文

    先看个小例子 function fn(){ console.log(a);//undefined; var a = 1; } fn(); 为什么打印出来的是 undefined 呢? 执行上下文概念 ...

  7. 解决sqoop连接mysq错误

    一.问题描述 1.由于当前集群没有配置Zookeeper.hcatalog.accumlo,因此应该在sqoop的配置文件中注释掉判断Zookeeper.hcatalog.accumlo路径是否正确的 ...

  8. h5小功能_classList和自定义属性data

    ###1.classList返回一个对象集 通过obj.classList.add()或obj.classList.remove()可操作对象的class属性值 classList.toggle( ) ...

  9. Laravel自带SMTP邮件组件实现发送邮件(QQ、163、企业邮箱都可)

    Laravel自带SMTP邮件组件实现发送邮件(QQ.163.企业邮箱都可)     laravel自带SMTP邮件配置和遇到的坑 laravel自带SwiftMailer库,集成了多种邮件API,可 ...

  10. [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的

    震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...