.net core中使用NPOI導入excel


 

前端我這里是用layui 

 

<button type="button" class="layui-btn" id="test3"><i class="layui-icon"></i>上傳文件</button>

 

js代碼

//指定允許上傳的文件類型
upload.render({
elem: '#test3'
, url: '/Area/Project/ExporExcel' //改成您自己的上傳接口
, accept: 'file' //普通文件
, done: function (res) {
for (var i = 0; i < res.data.length; i++) {

}


layer.msg('上傳成功');
console.log(res);
}
});

 

///請求的接口

public ActionResult ExporExcel(IFormFile file)
{
var msg = "未知錯誤";
List<CoreEntity> CoreList = new List<CoreEntity>();
if (file.Length > 0) {
DataTable dt = new DataTable();
string strMsg;
//利用IFormFile里面的OpenReadStream()方法直接讀取文件流
dt = ExcelHelper.ExcelToDatatable(file.OpenReadStream(),Path.GetExtension(file.FileName),out strMsg);
if (dt.Rows.Count>0) {
for (int i = 0; i < dt.Rows.Count; i++) {
CoreEntity resultData = new CoreEntity();
resultData.CoreName = dt.Rows[i]["中心名"].ToString();
CoreList.Add(resultData);
}
return Json(new { code = 0,msg = "導入成功",data= CoreList });
}
if (dt.Rows.Count > 0) {
} else {
//resultData.Code = -1;
//resultData.Msg = "Excel導入表無數據!";
}
}
return Json(new { code = 0,msg = msg });

}

 

///下面是封裝好的類需要在Nuget中安裝 NPOI這個  直接搬磚過去就可以用了 

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;

namespace CRM.Common
{
public static class ExcelHelper
{
/// <summary>
/// 將Excel單表轉為Datatable
/// </summary>
/// <param name="stream"></param>
/// <param name="fileType"></param>
/// <param name="strMsg"></param>
/// <param name="sheetName"></param>
/// <returns></returns>
public static DataTable ExcelToDatatable(Stream stream, string fileType, out string strMsg, string sheetName = null)
{
strMsg = "";
DataTable dt = new DataTable();
ISheet sheet = null;
IWorkbook workbook = null;
try
{
#region 判斷excel版本
//2007以上版本excel
if (fileType == ".xlsx")
{
workbook = new XSSFWorkbook(stream);
}
//2007以下版本excel
else if (fileType == ".xls")
{
workbook = new HSSFWorkbook(stream);
}
else
{
throw new Exception("傳入的不是Excel文件!");
}
#endregion
if (!string.IsNullOrEmpty(sheetName))
{
sheet = workbook.GetSheet(sheetName);
if (sheet == null)
{
sheet = workbook.GetSheetAt(0);
}
}
else
{
sheet = workbook.GetSheetAt(0);
}
if (sheet != null)
{
IRow firstRow = sheet.GetRow(0);
int cellCount = firstRow.LastCellNum;
for (int i = firstRow.FirstCellNum; i < cellCount; i++)
{
ICell cell = firstRow.GetCell(i);
if (cell != null)
{
string cellValue = cell.StringCellValue.Trim();
if (!string.IsNullOrEmpty(cellValue))
{
DataColumn dataColumn = new DataColumn(cellValue);
dt.Columns.Add(dataColumn);
}
}
}
DataRow dataRow = null;
//遍歷行
for (int j = sheet.FirstRowNum + 1; j <= sheet.LastRowNum; j++)
{
IRow row = sheet.GetRow(j);
dataRow = dt.NewRow();
if (row == null || row.FirstCellNum < 0)
{
continue;
}
//遍歷列
for (int i = row.FirstCellNum; i < cellCount; i++)
{
ICell cellData = row.GetCell(i);
if (cellData != null)
{
//判斷是否為數字型,必須加這個判斷不然下面的日期判斷會異常
if (cellData.CellType == CellType.Numeric)
{
//判斷是否日期類型
if (DateUtil.IsCellDateFormatted(cellData))
{
dataRow[i] = cellData.DateCellValue;
}
else
{
dataRow[i] = cellData.ToString().Trim();
}
}
else
{
dataRow[i] = cellData.ToString().Trim();
}
}
}
dt.Rows.Add(dataRow);
}
}
else
{
throw new Exception("沒有獲取到Excel中的數據表!");
}
}
catch (Exception ex)
{
strMsg = ex.Message;
}
return dt;
}
}
}

 

///////////////如何將datatable轉list<>對象

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace DAL
{
    public class CovertListHelper
    {
        public List<T> convertToList<T>(DataTable dt) where T : new()
        {
            //定義集合
            List<T> ts = new List<T>();
            //獲得此模型的類型
            Type type = typeof(T);
            //定義一個臨時的變量
            string tempName = "";
            //遍歷datatable中所有數據行
            foreach (DataRow dr in dt.Rows)
            {
                T t = new T();
                //獲得此模型的公共屬性
                PropertyInfo[] propertys = t.GetType().GetProperties();
                //遍歷所有屬性
                foreach (PropertyInfo pi in propertys)
                {
                    //將此屬性賦值給臨時變量
                    tempName = pi.Name;
                    //檢查datatable是否包含此列
                    if (dt.Columns.Contains(tempName))
                    {
                        //判斷此屬性是否有setter,這個啥意思呢,就是我們的實體層的{get;set;}如果我們的實體有了set方法,就說明可以賦值!
                        if (!pi.CanWrite) continue;
                        {
                            //取值  
                            object value = dr[tempName];
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                }
                //對象添加到泛型集合中
                ts.Add(t);
            }
            return ts;
        }
    }
}

 

 

////該方法的用法

//實例化這個類
DAL.CovertListHelper tolist = new CovertListHelper();
//把DataTable轉換為List
//要轉換成的List類型為:UserEntity
//需要轉換的DataTable為:table
List<UserEntity> list = tolist.convertToList<UserEntity>(table);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM