首先要准备一个Excel模板.Excel第一行的字段要与数据库字段相对应;
这是我的页面
后台代码:
下载Excel模板
public ActionResult downloadTenplate()
{
string templatePath = Server.MapPath("~/Document/Temp/商品信息导入模板.xls");
if (System.IO.File.Exists(templatePath))
{
//返回指定路径文件
return File(templatePath, "application/vnd.ms-excel", "商品信息导入模板.xls");
}
else
{
return Content("模板文件不存在!");
}
}
导入代码:
/// <summary>
/// 导入文件
/// </summary>
/// <param name="excelFile"></param>
/// <returns></returns>
public ActionResult ImporExcel(HttpPostedFileBase excelFile)
{
ReturnJson returnJson = new ReturnJson();
int saveCount = 0;
//批量导入数据思路
//1、获取读取的文件->判断数据类型是否正确;
//2、把文件转换为二进制数组;
//3、二进制数组转成内存流;
//4、利用NPOI把内存流中的数据读取成Excel
try
{
//获取文件后缀
string fileExtension = Path.GetExtension(excelFile.FileName);
//判断文件是否为excel表格
if (".xls".Equals(fileExtension.ToLower()) || ".xlsx".Equals(fileExtension.ToLower()))
{
//声明二进制数组存放文件
byte[] fileBytes = new byte[excelFile.ContentLength];
//将文件转化为二进制数据组存入fileBytes
excelFile.InputStream.Read(fileBytes, 0, excelFile.ContentLength);
//将二进制数组转化为内存流
MemoryStream excelFileStream = new MemoryStream(fileBytes);
//将内存流转化为工作簿
IWorkbook workbook = new HSSFWorkbook(excelFileStream);
//判断工作簿中是否有工作表
if (workbook.NumberOfSheets > 0)
{
List<LF_product> dbProduct = myModel.LF_product.ToList();
List<LF_Units> dbUnits = myModel.LF_Units.ToList();
//创建studentVo对象列表-》用于存放导入的学生/用户数据
List<studentVo> listStudentVo = new List<studentVo>();
//获取第一张工作表
ISheet sheet = workbook.GetSheetAt(0);
//判断工作表中是否有数据
//PhysicalNumberOfRows 获取的时物理行数,不包括那些空行(隔行)的情况
if (sheet.PhysicalNumberOfRows > 0)
{
#region 将Excel表格数据放到DataTable中
//将数据先装到datatable中
// 定义