.net core npoi 将excal 导入数据库

.net core npoi 将excal 导入数据库

首先用vs 创建一个.net core的网站 和数据处理的类库,我用的是ef, 大家可以用自己的熟悉的框架

然后需要用打开nuget管理器 添加Savorboard.NPOI.Core.Ooxml 包如下图

Savorboard.NPOI.Core.Ooxml 包
创建一个view

<form asp-action="UploadFiles"
      asp-controller="Product"
      method="post"
      enctype="multipart/form-data">
    <input type="file" name="files" multiple />
    <input type="submit" value="Upload Selected Files" />
</form>

创建一个controller

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Npoi.Core.XSSF.UserModel;
using Npoi.Core.SS.UserModel;
using System.Data;
using Core.Domain.Models;
using System.Reflection;
using System;
using System.Diagnostics;

namespace Coretest.Controllers
{
    public class ProductController : Controller
    {
        private IHostingEnvironment hostingEnv;
        public ProductController(IHostingEnvironment env)
        {
            this.hostingEnv = env;
        }

        public IActionResult UploadFiles()
        {
            return View();
        }
        [HttpPost]
        public IActionResult UploadFiles(IList<IFormFile> files)
        {

            long size = 0, second = 0;
            //IList<IFormFile> 内的IFormFile对象
            foreach (var file in files)
            {
                string filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim();
                filename = hostingEnv.WebRootPath + $@"\{filename.Replace("\"", "")}";
                size += file.Length;
                //将excal 写入本地
                using (FileStream fs = System.IO.File.Create(filename))
                {
                    file.CopyTo(fs);
                    fs.Flush();

                }
                //创建数据容器的实例
                DataTransfer.DataTable dt = new DataTransfer.DataTable();
                using (FileStream stream = System.IO.File.Open(filename, FileMode.Open, FileAccess.Read))
                {
                    //创建 XSSFWorkbook和ISheet实例
                    XSSFWorkbook workbook = new XSSFWorkbook(stream);
                    ISheet sheet = workbook.GetSheetAt(0);
                    //获取sheet的首行
                    IRow headerRow = sheet.GetRow(0);
                    int cellCount = headerRow.LastCellNum;
                    List<DataTransfer.DataColumn> Columnlist = new List<DataTransfer.DataColumn>();
                    for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                    {
                        //Column 添加ColumnName
                        Columnlist.Add(new DataTransfer.DataColumn(headerRow.GetCell(i).StringCellValue, headerRow.GetCell(i).CellType.GetType()));
                    }
                    int rowCount = sheet.LastRowNum;
                    object[] rowlist = new object[sheet.LastRowNum];
                    for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                    {
                        object[] valuelist = new object[cellCount];
                        IRow row = sheet.GetRow(i);
                        for (int j = row.FirstCellNum; j < cellCount; j++)
                        {
                            //遍历添加Column的数据
                            if (row.GetCell(j) != null)
                                valuelist.SetValue(row.GetCell(j).ToString(), j);
                        }
                        //遍历将Column的数据添加到Datarow
                        rowlist.SetValue(valuelist, i - 1);
                        dt.Rows.Add(new DataTransfer.DataRow(Columnlist, valuelist));
                    }
                    List<Member> list = new List<Member>();
                    foreach (DataTransfer.DataRow dr in dt.Rows)
                    {
                        //填充entity 这个可换成自己的表
                        Member moudel = new Member();
                        foreach (PropertyInfo prop in moudel.GetType().GetRuntimeProperties())
                        {
                            if (dr[prop.Name] != null)
                            {
                                object obj = new object();
                                if (prop.Name == "SecondLevel")
                                {
                                    obj = Convert.ToInt32(dr[prop.Name]);
                                }
                                else
                                {
                                    obj = dr[prop.Name];

                                }
                                prop.SetValue(moudel, obj);
                            }
                        }
                        moudel.ViewSupportId = 0;
                        moudel.ViewSupportName = "";
                        moudel.FirstLevel = 111;
                        moudel.Keywords = 0;
                        moudel.IsCompany = false;
                        moudel.IsReady = false;
                        moudel.UnLock = true;
                        moudel.IsCrm = false;
                        moudel.IsOpera = false;
                        moudel.IP = "";
                        moudel.ImportType = "";
                        moudel.ProtectedTimes = DateTime.Now;
                        moudel.RegisterTime = DateTime.Now;
                        moudel.IsCheck = 0;
                        moudel.IsAborad = 0;
                        list.Add(moudel);
                    }
                    //创建计时器
                    Stopwatch watch = Stopwatch.StartNew();
                    //ef连接数据库
                    using (var context = new DataContext())
                    {
                        //批量insert
                        foreach (Member entity in list)
                        {
                            context.Member.Add(entity);
                        }
                        context.SaveChanges();
                    }
                    //获取处理数据所用的时间
                    second = watch.ElapsedMilliseconds;

                }
                ViewBag.Message = $"{files.Count} file(s) / { size} bytes  When used { second } uploaded successfully!";
            }
            return View();

        }
    }
}

这个按照打他table的思路简单的搭建了一个数据容器, 好多的方法都可以自己扩展

using System;
using System.Collections.Generic;

namespace Coretest.DataTransfer
{
    public class DataTable
    { /// <summary>
      /// 整个查询语句结果的总条数,而非本DataTable的条数
      /// </summary>
        public int TotalCount { get; set; }
        public List<DataColumn> Columns { get; set; } = new List<DataColumn>();
        public List<DataRow> Rows { get; set; } = new List<DataRow>();
        public DataColumn[] PrimaryKey { get; set; }
        public DataRow NewRow()
        {
            return new DataRow(this.Columns, new object[Columns.Count]);
        }
    }
    public class DataColumn
    {
        public string ColumnName { get; set; }
        public Type ColumnType { get; set; }
        public DataColumn(string columnName, Type columnType)
        {
            this.ColumnName = columnName;
            this.ColumnType = columnType;
        }
    }
    public class DataRow
    {
        private object[] _ItemArray;
        public List<DataColumn> Columns { get; private set; }
        public DataRow(List<DataColumn> columns, object[] itemArray)
        {
            this.Columns = columns;
            this._ItemArray = itemArray;
        }
        public object this[int index]
        {
            get
            {
                //如果传入的index不存在返回null
                if (Columns.Count < index || index < 0)
                {
                    return null;
                }
                return _ItemArray[index];
            }
            set { _ItemArray[index] = value; }
        }
        public object this[string columnName]
        {
            get
            {
                int i = 0, n = 0;
                foreach (DataColumn column in Columns)
                {
                    if (column.ColumnName != columnName)
                    {
                        n++;
                    }
                    if (column.ColumnName == columnName)
                        break;
                    i++;
                }
                //如果传入的columnName不存在返回null
                if (Columns.Count == i)
                {
                    return null;
                }
                return _ItemArray[i];
            }
            set
            {
                int i = 0;
                foreach (DataColumn column in Columns)
                {
                    if (column.ColumnName == columnName)
                        break;
                    i++;
                }

                _ItemArray[i] = value;
            }
        }
    }
}

路由设置

这里写图片描述

在Configuration 添加services.AddDbContext 方法
这里写图片描述

ef 数据配置

using Microsoft.EntityFrameworkCore;

namespace Core.Domain.Models
{
    public class DataContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseSqlServer(@"Data Source=.;Initial Catalog=Datatest;User ID=sa;Password=123456");
        public DbSet<User> Users { get; set; }
        public DbSet<Member> Member { get; set; }
    }
}

表结构entity 代码

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Core.Domain.Models
{
    [Table(name:"Member")]
    public class Member
    {
        [Key,Column(name: "ID"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }

        [Column(name: "Email")]
        public string Email { get; set; }
        [Column(name: "Password")]
        public string Password{ get; set; }
        [Column(name: "Name")]
        public string Name{ get; set; }
        [Column(name: "BrithDay")]
        public System.Nullable<System.DateTime> BrithDay{ get; set; }
        [Column(name: "Sex")]
        public System.Nullable<bool> Sex{ get; set; }
        [Column(name: "PhoneBelongAddress")]
        public string PhoneBelongAddress{ get; set; }
        [Column(name: "Phone")]
        public string Phone{ get; set; }
        [Column(name: "Mobile")]
        public string Mobile{ get; set; }
        [Column(name: "QQ")]
        public string QQ{ get; set; }
        [Column(name: "MSN")]
        public string MSN{ get; set; }

        [Column(name: "Skype")]
        public string Skype{ get; set; }
        [Column(name: "StudySchool")]
        public System.Nullable<int> StudySchool{ get; set; }
        [Column(name: "CityId")]
        public string CityId{ get; set; }
        [Column(name: "ViewSupportId")]
        public System.Nullable<int> ViewSupportId{ get; set; }
        [Column(name: "ViewSupportName")]
        public string ViewSupportName{ get; set; }
        [Column(name: "SupportID")]
        public System.Nullable<int> SupportID{ get; set; }

        [Column(name: "SupportName")]
        public string SupportName{ get; set; }
        [Column(name: "SupportCode")]
        public string SupportCode{ get; set; }
        [Column(name: "ComeUrl")]
        public string ComeUrl{ get; set; }
        [Column(name: "IPBelongAddress")]
        public string IPBelongAddress{ get; set; }
        [Column(name: "SessionId")]
        public System.Nullable<int> SessionId{ get; set; }
        [Column(name: "CustomerName")]
        public string CustomerName{ get; set; }
        [Column(name: "Description")]
        public string Description{ get; set; }
        [Column(name: "ImportType")]
        public string ImportType{ get; set; }
        [Column(name: "KeyWord")]
        public string KeyWord{ get; set; }
        [Column(name: "EnterType")]
        public string EnterType{ get; set; }
        [Column(name: "IsCompany")]
        public bool IsCompany{ get; set; }
        [Column(name: "CompanyName")]
        public string CompanyName{ get; set; }
        [Column(name: "IsReady")]
        public bool IsReady{ get; set; }
        [Column(name: "UnLock")]
        public bool UnLock{ get; set; }
        [Column(name: "IsOpera")]
        public bool IsOpera{ get; set; }
        [Column(name: "IsCrm")]
        public bool IsCrm{ get; set; }
        [Column(name: "IP")]
        public string IP{ get; set; }
        [Column(name: "RegisterTime")]
        public System.DateTime RegisterTime{ get; set; }
        [Column(name: "RegisterUrl")]
        public string RegisterUrl{ get; set; }
        [Column(name: "Age")]
        public string Age{ get; set; }
        [Column(name: "CityAreaId")]
        public System.Nullable<int> CityAreaId{ get; set; }
        [Column(name: "StudyPurpose")]
        public string StudyPurpose{ get; set; }
        [Column(name: "ProtectedTimes")]
        public System.Nullable<System.DateTime> ProtectedTimes{ get; set; }
        [Column(name: "IsAborad")]
        public System.Nullable<int> IsAborad{ get; set; }
        [Column(name: "IsCheck")]
        public int IsCheck{ get; set; }
        [Column(name: "OfferType")]
        public System.Nullable<int> OfferType{ get; set; }
        [Column(name: "FirstLevel")]
        public System.Nullable<int> FirstLevel{ get; set; }
        [Column(name: "SecondLevel")]
        public System.Nullable<int> SecondLevel{ get; set; }
        [Column(name: "Keywords")]
        public System.Nullable<int> Keywords{ get; set; }
        [Column(name: "DataType")]
        public System.Nullable<int> DataType{ get; set; }
        [Column(name: "StateLogId")]
        public System.Nullable<int> StateLogId{ get; set; }
        [Column(name: "StateLogKey")]
        public string StateLogKey{ get; set; }

    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值