1.引入EPPlus.dll,旧版的是OfficeOpenXml.dll,最好使用EPPlus
2.调用 string path = UploadExecl(batchUpload.BinaryExcel, "xlsx");,获取上传的xlsx路径
3. 下载Execl
    3.1 如果是<a> 标签的连接,可以将方法直接写在 href上就能直接下载
     <a href="/FangAn/DetailAuditOutPut/" target="_blank" style="color:#fff;"><el-button type="primary">导出Execl</el-button></a>
    后台方法调用:
            byte[] result = GetExcelByte(model);
    返回值为 File();
            return File(result, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", model.OrderName + ".xlsx");

3.2 如果是js异步操作,需要下载的话:
        后台方法调用:
         byte[] result = GetExcelByte(dt, modelReturn.errMessage);
                    string basestr = Convert.ToBase64String(result);
        返回值为base64的字符串
                    return basestr;
        而前台,在需要多加一步操作,可以直接下载:
        //res.data 为异步返回值,就是basestr
        window.location.href = "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64," + res.data;

/// <summary>
        /// datatable导出
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public byte[] GetExcelByte(DataTable dt, string err)
        {
            using (ExcelPackage package = new ExcelPackage())
            {
                ExcelWorksheet workSheet = package.Workbook.Worksheets.Add("候车亭批量导入");
                workSheet.Cells[1, 1].Value = "媒体类型*";
                workSheet.Cells[1, 2].Value = "类型子类*";
                workSheet.Cells[1, 3].Value = "媒体位置*";
                for (int i = 1; i < dt.Rows.Count; i++)
                {
                    DataRow dr = dt.Rows[i];
                    workSheet.Cells[i + 1, 1].Value = dr[0];
                    workSheet.Cells[i + 1, 2].Value = dr[1];
                    workSheet.Cells[i + 1, 3].Value = dr[2];
                }
                return package.GetAsByteArray();
            }
        }

/// <summary>
        /// execl转成table
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public DataTable ExcelToTable(string path)
        {
            DataTable vTable = new DataTable();
            FileInfo existingFile = new FileInfo(path);
            try
            {
                FileInfo file = new FileInfo(path);
                using (ExcelPackage package = new ExcelPackage(file))
                {
                    ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
                    int vSheetCount = package.Workbook.Worksheets.Count;
                    //获取总Sheet页
                    int maxColumnNum = worksheet.Dimension.End.Column;//最大列
                    int minColumnNum = worksheet.Dimension.Start.Column;//最小列
                    int maxRowNum = worksheet.Dimension.End.Row;//最小行
                    int minRowNum = worksheet.Dimension.Start.Row;//最大行

DataColumn vC;
                    for (int j = 1; j <= maxColumnNum; j++)
                    {
                        vC = new DataColumn("A_" + j, typeof(string));
                        vTable.Columns.Add(vC);
                    }
                    for (int n = 1; n <= maxRowNum; n++)
                    {
                        DataRow vRow = vTable.NewRow();
                        for (int m = 1; m <= maxColumnNum; m++)
                        {
                            vRow[m - 1] = worksheet.Cells[n, m].Value;
                        }
                        vTable.Rows.Add(vRow);
                    }
                }

}
            catch (Exception vErr)
            {
                Console.WriteLine(vErr.Message);
            }
            return vTable;
        }
        /// <summary>
        /// 把二进制流转成文件
        /// </summary>
        /// <param name="path">二进制流,类似(data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,)开头的字符串</param>
        /// <param name="path">文件扩展名</param>
        /// <returns></returns>
        public string UploadExecl(string path, string extension)
        {
            string sPath = host.ContentRootPath + "\\BatchUpload";//保存的路径
            if (!Directory.Exists(sPath))
            {
                Directory.CreateDirectory(sPath);
            }
            var regex = new Regex(@"data:(?<mime>[\w/\-\.]+);(?<encoding>\w+),(?<data>.*)", RegexOptions.Compiled);
            var match = regex.Match(path);

var mimeType = match.Groups["mime"].Value;
            var encodingCode = match.Groups["encoding"].Value;
            var data = match.Groups["data"].Value;
            byte[] targetFileByte = Convert.FromBase64String(data);

string[] mimeExtension = mimeType.Split('/');
            string fileExtension = extension;
            Random random = new Random();
            //文件保存
            string fileName = string.Format("{0:yyyyMMddHHmmss}{1}", DateTime.Now, random.Next());
            string filePath = string.Format("{0}\\{1}.{2}", sPath, fileName, fileExtension);
            FileStream file = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write);
            file.Write(targetFileByte,0, targetFileByte.Length);
            file.Close();

return filePath;
        }

ExcelPackage导入导出,命名空间一定要是EPPlus的更多相关文章

  1. .NET Core 中导入导出Excel

    操作Excel是一个比较常见的业务场景,本篇将使用EPPlus简单演示一个导入导出的示例. EPPlus开源地址:https://github.com/EPPlusSoftware/EPPlus 在项 ...

  2. ASP.NET Core使用EPPlus导入导出Excel

    开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.NET Core中如何使用EPPlus组件导入导出Excel EPPlus: EPPlus是使用Open Office XML格式(xlsx) ...

  3. 基于EPPlus和NPOI实现的Excel导入导出

    基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...

  4. .NET CORE webapi epplus 导入导出 (实习第一个月的笔记)

    最近有个需求就是网页表格里面的数据导出到excel  于是从各位前辈的博客园搜了搜demo  大部分非为两类 都是用的插件NPOI和Eppluse ,因此在这里就介绍Eppluse 用法,还有就是在博 ...

  5. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  6. 建议收藏:.net core 使用导入导出Excel详细案例,精心整理源码已更新至开源模板

    还记得刚曾经因为导入导出不会做而发愁的自己吗?我见过自己前同事因为一个导出改了好几天,然后我们发现虽然有开源的库但是用起来却不得心应手,主要是因为百度使用方案的时候很多方案并不能解决问题. 尤其是尝试 ...

  7. asp.net core web的导入导出excel功能

    这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...

  8. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  9. thinkphp导入导出excel表单数据

    在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...

随机推荐

  1. Go语言的map

    map一般是以库的方式提供,在C++和C#和JAVA中都需要引用相应的库而Go语言不需要引入库,可以直接方便使用 定义:map是一堆键值对的未排序集合.无序 1.声明变量: map的声明基本上没有多余 ...

  2. JS拖拽-面向对象拖拽-继承

    //普通拖拽 /* * CSS */ #div1{ width:100px; height:100px; position:absolute; background:red; cursor:move; ...

  3. 如何发布composer包

    1. 首先要有github仓库(其中必须要有 composer.json 配置文件) 2.关联 github 项目 提交成功 3.设置钩子以便同步更新 https://packagist.org/ab ...

  4. 标准模板库中的队列(queue)

    //C++数据结构与算法(第4版) Adam Drozdek 著  徐丹  吴伟敏<<清华大学出版社>> 队列容器默认由deque实现,用户也可以选择list容器来实现.如果用 ...

  5. [Android]ListView中分割线的设置

    1.在布局文件中ListView元素中通过属性设置 android:divider="#fffff"  分割线颜色 android:dividerHeight="1px& ...

  6. 「HNOI/AHOI2018」道路

    传送门 Luogu 解题思路 考虑树形 \(\text{DP}\) 设状态 \(dp[u][i][j]\) 表示从首都走到点 \(u\) ,经过 \(i\) 条公路,\(j\) 条铁路的最小不方便值. ...

  7. C# 自定义控件容器,设计时可添加控件

    本分步指南介绍在将 UserControl 放在 Windows 窗体上之后,如何将 UserControl 对象用作设计时控件容器.可能会有这样的情况:您想将一个控件拖到 UserControl 中 ...

  8. java多线程知识回顾(笔记)

    线程创建的方式 有两种 第一种是继承Thread类 重写run方法 (个人偏向这一种实际中这种用的较多) 例如 public class MyThead extends Thread { int j= ...

  9. Django(十八)后台管理:列表页选项、编辑页选项、自定义后台页面

    [参考]https://blog.csdn.net/u010132177/article/details/103814357 [参考]https://docs.djangoproject.com/zh ...

  10. javaBean、EJB、POJO

    1.JavaBean 最初是由 Sun 公司提出的一种规范,主要包含以下要求: ----类是 public 的,并且有一个无参数的构造函数 ----属性修饰符为:private,并通过 get 和 s ...