ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Asp .Net Core Excel导入和导出

2019-05-09 18:39:06  阅读:182  来源: 互联网

标签:Core Asp worksheet Cells Excel Value 导出 using public


ASP .Net Core使用EPPlus实现Api导入导出,这里使用是EPPlus 4.5.2.1版本,.Net Core 2.2。在linux上运行的时候需要安装libgdiplus 。

下面我们看下如何实现导出导入的功能。

新建项目ASP.NET Core Web Api 、添加Test类

public class Test
{
   public int Id { get; set; }
   public string Name { get; set; }
   public int Age { get; set; }
}

 

导出Excel文件

新建控制器ExecelController

 

using System;

using System.Collections.Generic;

using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml;

namespace WebApplication5.Controllers
{
[ApiController]
    public class ExecelController : ControllerBase
    {

        [Route("api/Execel/TOExecel")]
        public IActionResult TOExecel()
        {
            var list = new List<Test>();

            list.Add(new Test()
            {
                Id = 1,
                Name = "Test",
                Age = 22,

            });

            byte[] fileContents;
            using (ExcelPackage package = new ExcelPackage())
            {

                 
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(".Net Core 导出");

                 
                worksheet.Cells[1, 1].Value = "序号";
                worksheet.Cells[1, 2].Value = "Id";
                worksheet.Cells[1, 3].Value = "名称";
                worksheet.Cells[1, 4].Value = "年龄";

                int i = 2;

                foreach (var item in list)
                {
                    worksheet.Cells["A" + i].Value = i - 1;
                   worksheet.Cells["B" + i].Value = item.Id;
                    worksheet.Cells["C" + i].Value = item.Name;
                    worksheet.Cells["D" + i].Value = item.Age;
                    i = i + 1;
                }

                fileContents = package.GetAsByteArray();
                if (fileContents == null || fileContents.Length == 0)
                {
                    return NotFound();
                }
            }
            return File(fileContents, "application/ms-excel", $"{Guid.NewGuid().ToString()}.xlsx");
        }
}
}

 

 

导入Excel文件

[Route("api/Execel/Import")]
        public async Task<IActionResult> Import(IFormFile excelFile)
        {

            var msg = "";
            if (excelFile == null || excelFile.Length <= 0)
            {
                msg = "请选择导入文件!";
                return Ok(msg);
            }

 
            if (!Path.GetExtension(excelFile.FileName).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
            {
                msg = "请选择导入文件为.xlsx的后缀名!";
                return Ok(msg);
            }

            try
            {
                using (var stream = new MemoryStream())
                {
                    await excelFile.CopyToAsync(stream);

                     using (var package = new ExcelPackage(stream))
                    {

                        StringBuilder sb = new StringBuilder();
                        ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
                        int rowCount = worksheet.Dimension.Rows;
                        int ColCount = worksheet.Dimension.Columns;
                        bool bHeaderRow = true;

 
                        for (int row = 2; row <= rowCount; row++)
                        {
                            Test model = new Test();
                            for (int col = 1; col <= ColCount; col++)
                            {
                                if (bHeaderRow)
                                {
                                    switch (col)
                                    {
                                        case 1:
                                            model.Id = int.Parse(worksheet.Cells[row, col].Value.ToString());
                                            break;
                                        case 2:
                                            model.Name = worksheet.Cells[row, col].Value.ToString();
                                            break;
                                         case 3:
                                            model.Age = int.Parse(worksheet.Cells[row, col].Value.ToString());
                                            break;
                                    }
                                }

                                else
                                {
                                    switch (col)
                                    {
                                        case 1:
                                            model.Id = int.Parse(worksheet.Cells[row, col].Value.ToString());
                                            break;
                                        case 2:
                                            model.Name = worksheet.Cells[row, col].Value.ToString();
                                            break;

                                         case 3:
                                            model.Age = int.Parse(worksheet.Cells[row, col].Value.ToString());
                                           break;
                                    }
                                }
                            }

                            //插入model即可
                        }
                    }
                }
                msg = "导入成功!";
                return Ok(msg);
            }

            catch (Exception ex)
            {
                msg = ex.Message;
                return Ok(msg);
            }
        }

 

  按照格式导入即可完成导入功能。

  这里导出是通过流的方式进行导出的,一般来说也可以先把Excel保存到服务器,然后直接通过Url访问服务器的文件的地址就可以实现在线下载。通过流导出的话就不需要去访问服务器文件了,访问接口查询数据就直接导出了。

在导入的时候目前测试仅仅支持.xlsx格式的,.xls格式的Excel在基于流创建ExcelPackage类的新实例的时候会报为空的错误。var package = new ExcelPackage(stream)还有待修改。

标签:Core,Asp,worksheet,Cells,Excel,Value,导出,using,public
来源: https://www.cnblogs.com/hulizhong/p/10840263.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有