实现批量导入的关键需要将文件转化为二进制数据,然后用循环读取每一行的每一个表格内容,以下是详细代码与解析:
#region 导入图书信息
public ActionResult ImportExcel(HttpPostedFileBase excelFile)
{
ReturnJson msg = new ReturnJson();
try
{
//获取文件的后缀
string fileExtension = Path.GetExtension(excelFile.FileName);
if (".xls".Equals(fileExtension) || ".XLS".Equals(fileExtension))
{
byte[] fileBytes = new byte[excelFile.ContentLength];
//将传入的文件转化为二进制的数组存入fileBytes
excelFile.InputStream.Read(fileBytes, 0, excelFile.ContentLength);
//将二进制数组转化为内存流
var excelFileStream = new MemoryStream(fileBytes);
//将内存流转化为工作簿
NPOI.SS.UserModel.IWorkbook workBook = new HSSFWorkbook(excelFileStream);
//判断工作簿中是否有工作表
if (workBook.NumberOfSheets > 0)
{
var dbLibrary = myModel.LibraryMS.ToList();
var dbType = myModel.Type.ToList();
var listBooks = new List<Books>();
//获取第一个工作表
NPOI.SS.UserModel.ISheet sheet = workBook.GetSheetAt(0);
//PhysicalNumberOfRows 获取的是物理行数,也就是不包括那些空行(隔行)的情况
//判断工作表中是否有数据
if (sheet.PhysicalNumberOfRows > 0)
{
DataTable dtExcel = new DataTable();
//获取标题行--第二行,索引为1;第一行是说明
NPOI.SS.UserModel.IRow rowHeader = sheet.GetRow(1);
/*
FirstCellNum:获取某行第一个单元格下标
LastCellNum:获取某行的列数
FirstRowNum:获取第一个实际行的下标
LastRowNum:获取最后一个实际行的下标