.Net Core 使用NPOI导入数据

一、搭建环境

1.新建ASP.NET Core Web 应用程序

2.选择API

3.引用Swashbuckle.AspNetCore NuGet 包进行安装. Swashbuckle.AspNetCore 是一个开源项目,用于生成 ASP.NET Core Web API 的 Swagger 文档。

前端开发人员可在浏览器中访问此接口文档。

4.光引用此NuGet包是不行的,还要在Startup中添加并配置Swaage中间件

首先在ConfigureServices中写入以下代码:

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            #region
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info { Title = "API文档", Version = "v1" });
            });
            #endregion
        }

然后在Configure中写入以下代码:

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            #region
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });
            #endregion

            app.UseHttpsRedirection();
            app.UseMvc();
        }

5.右键项目生成XML文件,并在Startup中注册服务,用于读取这个XML文档,不然写的接口都不会显示出来.

 

引用NuGet包:Microsoft.Extensions.PlatformAbstractions

接着在Startup类ConfigureServices方法中,添加如下代码:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            #region
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info { Title = "API文档", Version = "v1" });

                #region
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                //MyImport.xml是我的项目生成XML文档的后缀名,具体的以你项目为主
                var xmlPath = Path.Combine(basePath, "MyImport.xml");
                c.IncludeXmlComments(xmlPath);
                #endregion
            });
            #endregion
        }

OK ,现在可以新建一个控制器,写一个接口看看有没有效果

 

将地址栏修改一下

 

 

 

  

 我们也可以在launchSettings.json中做一下更改,这样就不用每次都改浏览器地址栏了,如下:

 

 

二·、数据库新建表及项目中实体类的建立

--商品表
Create Table Commodity
(
Cid int primary key identity(1,1),--主键,自增
Name varchar(50) not null,--商品名称
Price decimal(18,2) not null,--价格
[Type] varchar(50) not null,--商品类别
[Time] varchar(50) not null,--保质期
Remarks varchar(100)--备注    
)
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace MyImport.Model
{
    /// <summary>
    /// 商品类
    /// </summary>
    public class Commodity
    {
        /// <summary>
        /// 主键Id
        /// </summary>
        [SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)]
        public int Cid { get; set; }

        /// <summary>
        /// 商品名称
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = false)]
        public string Name { get; set; }

        /// <summary>
        /// 商品价格
        /// </summary>
        [SugarColumn(IsNullable = false)]
        public double Price { get; set; }

        /// <summary>
        /// 商品类别
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = false)]
        public string Type { get; set; }

        /// <summary>
        /// 保质期
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = false)]
        public string Time { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true)]
        public string Remarks { get; set; }
    }
}

 

三、代码编写

注:在写代码之前,先引用两个NuGet包:NPOI(这个包用来操作Excel)和SqlSugarCore(这是一个高性能的ORM框架,操作数据库更便捷)

 

 

 

 话不多说,贴代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MyImport.Model;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using SqlSugar;

namespace MyImport.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class MyCoreController : Controller
    {
        public MyCoreController()
        {

        }

        SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = "Data Source=LENOVO-PC;Initial Catalog=School;Integrated Security=True",
            DbType = SqlSugar.DbType.SqlServer,
            IsAutoCloseConnection = true
        });

        /// <summary>
        /// 数据导入
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public async Task<string> Import(IFormFile file)
        {
            string ReturnValue = string.Empty;
            //定义一个bool类型的变量用来做验证
            bool flag = true;
            try
            {
                string fileExt = Path.GetExtension(file.FileName).ToLower();
                //定义一个集合一会儿将数据存储进来,全部一次丢到数据库中保存
                var Data = new List<Commodity>();
                MemoryStream ms = new MemoryStream();
                file.CopyTo(ms);
                ms.Seek(0, SeekOrigin.Begin);
                IWorkbook book;
                if (fileExt == ".xlsx")
                {
                    book = new XSSFWorkbook(ms);
                }
                else if (fileExt == ".xls")
                {
                    book = new HSSFWorkbook(ms);
                }
                else
                {
                    book = null;
                }
                ISheet sheet = book.GetSheetAt(0);

                int CountRow = sheet.LastRowNum + 1;//获取总行数

                if (CountRow - 1 == 0)
                {
                    return "Excel列表数据项为空!";

                }
                #region 循环验证
                for (int i = 1; i < CountRow; i++)
                {
                    //获取第i行的数据
                    var row = sheet.GetRow(i);
                    if (row != null)
                    {
                        //循环的验证单元格中的数据
                        for (int j = 0; j < 5; j++)
                        {
                            if (row.GetCell(j) == null || row.GetCell(j).ToString().Trim().Length == 0)
                            {
                                flag = false;
                                ReturnValue += $"第{i + 1}行,第{j + 1}列数据不能为空。";
                            }
                        }
                    }
                }
                #endregion
                if (flag)
                {
                    for (int i = 1; i < CountRow; i++)
                    {
                        //实例化实体对象
                        Commodity commodity = new Commodity();
                        var row = sheet.GetRow(i);

                        if (row.GetCell(0) != null && row.GetCell(0).ToString().Trim().Length > 0)
                        {
                            commodity.Name = row.GetCell(0).ToString();
                        }
                        if (row.GetCell(1) != null && row.GetCell(1).ToString().Trim().Length > 0)
                        {
                            commodity.Price = Convert.ToDouble(row.GetCell(1).ToString());
                        }
                        if (row.GetCell(2) != null && row.GetCell(2).ToString().Trim().Length > 0)
                        {
                            commodity.Type = row.GetCell(2).ToString();
                        }
                        if (row.GetCell(3) != null && row.GetCell(3).ToString().Trim().Length > 0)
                        {
                            commodity.Time = row.GetCell(3).ToString().ToString();
                        }
                        if (row.GetCell(4) != null && row.GetCell(4).ToString().Trim().Length > 0)
                        {
                            commodity.Remarks = row.GetCell(4).ToString();
                        }
                        else
                        {
                            commodity.Remarks = "暂无";
                        }
                        Data.Add(commodity);
                    }
                    var data = db.Insertable<Commodity>(Data).ExecuteCommand();
                    ReturnValue = $"数据导入成功,共导入{CountRow - 1}条数据。";
                }
               
                if (!flag)
                {
                    ReturnValue = "数据存在问题!" + ReturnValue;
                }
            }
            catch (Exception)
            {
                return "服务器异常";
            }

            return ReturnValue;
        }
    }
}

建一个Excel文件,填写好测试数据

 

 打开接口文档,选择这个Excel文件,进行导入

 

 

 搞定!希望可以帮助到你、^-^

 

转载于:https://www.cnblogs.com/zhangnever/p/11426643.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: .NET 可以使用 NPOI 来将 Word 文件转换为 PDF。 首先,你需要安装 NPOI 库。这可以通过在 Visual Studio 的包管理器控制台(PMC)中运行以下命令来完成: ``` Install-Package NPOI ``` 然后,你可以使用 NPOI 的 HWPFDocument 类读取 Word 文件,并使用 iTextSharp 库将它转换为 PDF。 下面是一个示例代码,展示了如何使用 NPOI 和 iTextSharp 将 Word 文件转换为 PDF: ```csharp using NPOI.HWPF.Extractor; using NPOI.HWPF.UserModel; using iTextSharp.text; using iTextSharp.text.pdf; using System.IO; // 读取 Word 文件 string wordFile = @"C:\temp\example.doc"; HWPFDocument doc = new HWPFDocument(new FileStream(wordFile, FileMode.Open)); // 使用 NPOI 读取文本内容 WordExtractor extractor = new WordExtractor(doc); string text = extractor.Text; // 使用 iTextSharp 创建 PDF 文件 string pdfFile = @"C:\temp\example.pdf"; using (FileStream fs = new FileStream(pdfFile, FileMode.Create)) { Document document = new Document(); PdfWriter writer = PdfWriter.GetInstance(document, fs); document.Open(); // 将文本内容写入 PDF document.Add(new Paragraph(text)); document.Close(); writer.Close(); } ``` 请注意,这是一个简单的示例,并未保留 Word 文件中的格式、图片等内容。如果你需要保留这些内容,可以使用其他库,例如 Aspose.Words 来完成转换。 ### 回答2: 使用NPOI将Word文件转换为PDF可以实现文档格式转换并且保持原有样式的一致性。在使用NPOI进行转换的过程中,需要采取以下步骤: 1. 引入NPOI库:首先在项目中安装NPOI库,然后在代码中引入相关的命名空间。 2. 打开Word文件:使用NPOI打开需要转换的Word文件,读取其中的内容。 3. 创建PDF文档:使用NPOI创建一个新的PDF文档。 4. 复制样式和内容:将Word文件中的样式和内容复制到PDF文档中。可以通过遍历Word文件中的各个段落、表格、图片等元素,并将其逐个复制到PDF文档中。 5. 设置文件属性:为PDF文档设置一些属性,如标题、作者、创建日期等。 6. 保存PDF文件:使用NPOI保存生成的PDF文档。 需要注意的是,NPOI是一个针对Office文件的.NET类库,可以处理Word、Excel、PowerPoint等文件格式的读写操作。在使用NPOI进行Word转PDF的过程中,我们需要选择合适的版本,并根据相关的文档进行调用。同时,由于NPOI的API较为复杂,对于一些特殊格式的Word文档,可能需要进行一些额外的处理。最后生成的PDF文件应该与原Word文件的格式基本一致。 总结而言,使用NPOI将Word文件转换为PDF可以实现文件格式的转换,并保持原有样式的一致性。但是需要根据具体的需求进行调用和处理,同时对NPOI库的使用要有一定的了解。 ### 回答3: 使用NPOI可以将Word文件转换为PDF。NPOI是一个开源库,用于在.NET平台上处理Microsoft Office文档,包括Word、Excel和PowerPoint。通过使用NPOI,我们可以读取、修改和创建各种Office文档。 要将Word文件转换为PDF,我们需要实现以下步骤: 1. 首先,我们需要将Word文件加载到内存中。可以使用NPOI的Word操作类来打开和读取Word文档。 2. 接下来,我们需要使用NPOI的PDF操作类来创建一个新的PDF文档。 3. 然后,我们需要将Word的内容逐一复制到PDF文档中。可以使用NPOI的XWPFParagraph和XWPFRun类来读取Word中的段落和文本内容,并将其添加到PDF文档中。 4. 最后,我们需要保存PDF文档到指定的路径。可以使用NPOI的PdfWriter类将PDF文档写入磁盘。 需要注意的是,NPOI对于一些复杂的Word文档可能无法完全支持,因为Word和PDF是不同的文件格式。在进行转换之前,最好先检查Word文档的内容和格式是否适用于转换。 总之,通过使用NPOI库,我们可以方便地将Word文件转换为PDF。这是一个快速、简单且可靠的方法,可以用于在.NET平台上处理Office文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值