下载导入模板文件(没有模板就下载指定的模板)
首先写一个模板用来填写要传输到导入的地方,就像下方图的格式:
这个表格要放到你的项目文件夹里面。然后去控制器写方法,给方法一名称(DownImportTemplate),让页面找到存放模板的路径,在服务器里的那个项目的位置找到存放模板的路径转换成流。If判断文件的路径能不能用IO流读取,若读取不出,便会提醒模板不存在,若成功,便把路径转换成文件名字,传给字符串(strfileName),总的来说就是获取到项目里的模板路径。
再来一个方法,导入数据,给方法一个名称(UploadExcelFile),然后实例化返回的值,再用try来捕捉错误,若数据异常,便会跳到(catch)提示上传失败,成功UploadExcelFile会获取文件的名字。
public ActionResult UploadExcelFile(HttpPostedFileBase xlsFile){
ReturnJson msg = new ReturnJson();
try{
//1、获取上传的文件
//读取文件的后缀
string strExtension = Path.GetExtension(xlsFile.FileName);
} catch (Exception)
{
msg.Text = “导入失败请检查是否有工作表,是否有数据,是否按照模板填写!”;
}
然后开始判断是不是大小写的(xls),若表示则提示,声明二进制数组存放文件,将传入的文件转化为二进制的数组存入(fileBytes ),最后将内存流转化为工作簿,其实最终就是要获取工作簿。
if (".xls".Equals(strExtension, StringComparison.CurrentCultureIgnoreCase))
{
//2、把文件转换为二进制数组
byte[] fileBytes = new byte[xlsFile.ContentLength];
xlsFile.InputStream.Read(fileBytes, 0, xlsFile.ContentLength);
//3、二进制数组转换为内存流
MemoryStream ExcelemoryStream = new MemoryStream(fileBytes);
//4、利用NPOI把内存流中的数据读取成Excel
//将内存流转化为工作簿
NPOI.SS.UserModel.IWorkbook workBook = new NPOI.HSSF.UserModel.HSSFWorkbook(ExcelemoryStream);
} else
{
msg.Text = “导入失败,请上传.xls文件!”;
}
return Json(msg, JsonRequestBehavior.AllowGet);
}
继续if判断,判断工作簿中有没有工作表,大于0就证明存在工作表,否则不存在工作表,用(ISheet )来获取工作簿中的第一张工作表,然后用(sheet)来看看有没有数据
//判断是否存在在工作表
if (workBook.NumberOfSheets > 0)
{
//获取第一个工作表
NPOI.SS.UserModel.ISheet Sheet = workBook.GetSheetAt(0);
} else
{
msg.Text = “导入失败,请检查是否存在工作表!”;
}
继续if判断,判断工作簿中的工作表中是否有数据,若等于0便没有数据。提示错误。若判断大于0,声明(DataTable)变量来接收数据,获取标题行,第二行,索引为1,因为第二行是说明,上面已经获取到过了,接着获取表格的列数和行数,然后创建(D