下载模板

 /// <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. HandlerThread解析

    HandlerThread是一种具有消息循环的线程.HandlerThread可以接收消息并处理消息,并执行一些耗时操作,这样UI线程就可以把一些耗时的操作命令发送给HandlerThread,由该线 ...

  2. docker部署nginx

    1. 下载nginx [root@localhost my.Shells]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ ...

  3. 失物找寻APP软件需求规格说明书——第三次团队作业

    ⭐对于软件需求规格说明书的理解 在没写这份软件需求规格说明书的时候我们组成员都不是很理解它的必要性,当然,写完之后才知道它的作用. 软件需求说明书的存在是为了使用户和软件开发者双方对该软件的初始规定有 ...

  4. Python-生成器_36

    #生成器函数 def generator(): print(1) return 'a' ret = generator() print(ret) #只要含有yield关键字的函数都是生成器函数 # y ...

  5. hybrid App cordova打包webapp PhoneGap

    Hybrid APP基础篇(一)->什么是Hybrid App APP三种开发模式--之--HybridApp解决方案 Hybrid App开发 四大主流平台分析 Hybrid App 开发模式 ...

  6. Java基础之一反射

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))   一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

  7. Java Core - JVM运行时内存管理

    在读正文之前,阅读以下两篇博客学习并理解堆栈.作用域.本地方法的概念. 作用域:https://www.cnblogs.com/AlanLee/p/6627949.html 操作数栈:https:// ...

  8. #Leetcode# 942. DI String Match

    https://leetcode.com/problems/di-string-match/ Given a string S that only contains "I" (in ...

  9. windows中dir命令

    最近想用dos命令打印指定目录下的所有文件夹的完整路径.最终发现可用dir命令来实现.在此学习下dir的各项命令. 32位win7系统上,打印帮助文档. D:\test>dir /? 显示目录中 ...

  10. 将选中项的value值赋给select的title

    $('select').change(function () { $(this).attr("title",$(this).find("option:selected&q ...