一、前端页面
页面采用 <input type="file" > 与form表单提交的方式上传文件
<div class="modal fade text-left" id="importModal" tabindex="-1" role="dialog" aria-labelledby="basicModalLabel1" aria-hidden="true" style="display: none;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="modaltitle">导入员工</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="panel panel-default">
<div class="panel-heading">
<div class="row">
<form id="formUpload" enctype="multipart/form-data" action="Upload" method="post">
<div class="col-xs-6" style="margin-left:15px;">
<input id="boxFile" type="file" name="uploadFile" class="form-control" />
</div>
<div class="col-xs-3">
<input type="text" id="tboxName" name="tboxName" hidden="hidden" />
<button id="btnSubmit" class="btn btn-default btn-sm">立即上传</button>
</div>
</form>
<div class="col-xs-3">
<p class="text-right" style="margin: 0;">
<a class="btn btn-default btn-sm" href="~/SysFiles/upload-template.xls">
<i class="glyphicon glyphicon glyphicon-arrow-down"></i> 下载 Excel 模板
</a>
</p>
</div>
</div>
</div>
<div class="panel-body">
<div class="alert alert-info">
<p>使用方法</p>
<ol>
<li>
下载 Excel 模板,按照模板格式填入账户信息
</li>
<li> 上传编辑填充模板文件的 Excel </li>
</ol>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
二、后台接收
NUGET引用 NPOI
//控制器文件引用
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
/// <summary>
/// 批量上传联系人
/// </summary>
/// <returns></returns>
[System.Web.Http.HttpPost]
public ActionResult Upload()
{
//上传文件
var files = Request.Files;
if (files != null && files.Count > 0)
{
var file = files[0];
try
{
var strPath = @"~/SysFiles/" + DateTime.Now.ToString("yyyyMMdd");
if (!Directory.Exists(strPath))
{
//需要注意的是,需要对这个物理路径有足够的权限,否则会报错
DirectoryInfo di = Directory.CreateDirectory(strPath);
}
var thisFileName = Guid.NewGuid().ToString().Replace("-", "") + "." + file.FileName.Split('.').LastOrDefault();
var thisFilePath = Server.MapPath(strPath) + thisFileName;
file.SaveAs(thisFilePath);
using (var fileStream = System.IO.File.Open(thisFilePath, FileMode.Open))
{
//把xls文件中的数据写入wk中,根据不同的文件格式实例化不同的对象去操作文件
IWorkbook wk;
string filePathChoice = thisFileName.Substring(thisFileName.LastIndexOf('.') + 1);
if (filePathChoice.Equals("xlsx"))
{
wk = new XSSFWorkbook(fileStream);
}
else
{
wk = new HSSFWorkbook(fileStream);
}
var sheet = wk.GetSheetAt(0); //读取当前表数据,直接去第一个Sheet
//判断是否有除去标题行的一行数据
if (sheet.LastRowNum < 1)
{
var result="无数据";
return Json(result, JsonRequestBehavior.AllowGet);
}
// 去掉第一行
for (var j = 1; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
{
var row = sheet.GetRow(j); //读取当前行数据
if (row != null)
{
for (var k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
{
var cell = row.GetCell(k); //当前表格
}
}
}
}
return Json("OK", JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
var result= ex.Message.ToString();
return Json(result, JsonRequestBehavior.AllowGet);
}
}
else
{
var result = "无数据";
return Json(result, JsonRequestBehavior.AllowGet);
}
return Json(result, JsonRequestBehavior.AllowGet);
}
三、对导入文件夹做权限控制
找到存储文件的文件夹,右键属性-->安全-->编辑-->添加-->高级-->立即查找-->
多选添加
给予完全控制权限
最后用管理员权限运行VS就可以啦~