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. AtCoder agc007_d Shik and Game

    洛谷题目页面传送门 & AtCoder题目页面传送门 有\(1\)根数轴,Shik初始在位置\(0\).数轴上有\(n\)只小熊,第\(i\)只在位置\(a_i\).Shik每秒可以向左移动\ ...

  2. 多用块枚举,少用for循环

    本文概要: 1.首先列举了四种可用于遍历的方式:标准的C语言for循环.Objective-C 1.0出现的NSEnumerator.Objective-C 1.0出现的for in快速遍历.块遍历. ...

  3. 【剑指Offer面试编程题】题目1513:二进制中1的个数--九度OJ

    题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例. 对于每个输入文件,第一行输入一个整数T,代表测试样例的数量.对于每个测试样例输入为一个 ...

  4. 初学微信小程序——配置问题(2)

    六.生命周期函数:   在微信公众平台指南中搜索生命周期,找到页面生命周期 比如,我打开cate.js并编写,代码如下: ** * 生命周期函数--监听页面加载 */ onLoad: function ...

  5. Ubuntu的妥协将支持精选的32位应用

    据外媒Tom's hardware,Ubuntu开发人员Canonical在早先的时候宣布Ubuntu 19.10将不再更新32位软件包和应用程序,引来了诸多应用开发者的不满.现在,Ubuntu方面宣 ...

  6. 将varchar2类型字段改成clob类型

     --增加临时新字段alter table base_temp add temp clob; --将需要改成大字段的项内容copy到大字段中update base_temp  set temp=con ...

  7. redis api-zset

  8. SpringMVC--文件上传与下载

    http://blog.csdn.net/u012706811/article/details/51059419

  9. 前端学习笔记系列一:11@vue/cli3.x中实现跨域的问题

    由于浏览器的同源访问策略,vue开发时前端服务器通常与后端api服务器并非是相同的服务器,因此需要使用一个代理服务器实现跨域访问.在@vue/cli3.x根目录下创建一个vue.config.js文件 ...

  10. sass计算高度

    页面布局时,有时候需要两个div充满父div空间,设定一个div尺寸后,可以使用css计算高度设置另一个尺寸: <style> .wrap{ width:1000px; } .left{ ...