JeasyUI,导出Excel
这个是客户端表格导出伪Excel文档. 不知道为啥,超过200条,不能导出,显示网络错误
$.extend($.fn.datagrid.methods, {
        //超过200条,不能导出,显示网络错误??
        toExcel: function(jq, filename){
            return jq.each(function(){
                var uri = 'data:application/vnd.ms-excel;base64,'
                    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
                    , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
                    , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
                var alink = $('<a style="display:none"></a>').appendTo('body');
                var view = $(this).datagrid('getPanel').find('div.datagrid-view');
                var ignoreColumnIndex = ;//前3列不导出
                //冻结的表格
                var table = view.find('div.datagrid-view2 table.datagrid-btable').clone();
                var tbody = table.find('>tbody');
                view.find('div.datagrid-view1 table.datagrid-btable>tbody>tr').each(function (index) {
                        $(this).clone().children().prependTo(tbody.children('tr:eq(' + index + ')'));
                });
                //非冻结表格
                var head = view.find('div.datagrid-view2 table.datagrid-htable').clone();
                var hbody = head.find('>tbody');
                view.find('div.datagrid-view1 table.datagrid-htable>tbody>tr').each(function (index) {
                        $(this).clone().children().prependTo(hbody.children('tr:eq(' + index + ')'));
                });
                hbody.prependTo(table);
                var ctx = { worksheet: name || 'Worksheet', table: table.html() || '' };
                alink[].href = uri + base64(format(template, ctx));
                alink[].download = filename;
                alink[].click();
                alink.remove();
            })
        },
        toExcelUnfreeze: function (jq, filename) {
            return jq.each(function () {
                var uri = 'data:application/vnd.ms-excel;base64,'
                    , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="utf-8"/><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
                    , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
                    , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
                var alink = $('<a style="display:none"></a>').appendTo('body');
                var view = $(this).datagrid('getPanel').find('div.datagrid-view');
                //非冻结列的table body
                var table = view.find('div.datagrid-view2 table.datagrid-btable').clone();
                //非冻结列的table header
                var head = view.find('div.datagrid-view2 table.datagrid-htable').clone();
                var hbody = head.find('>tbody');
                hbody.prependTo(table);
                var ctx = { worksheet: filename || 'Worksheet', table: table.html() || '' };
                alink[].href = uri + base64(format(template, ctx));
                alink[].download = filename;
                alink[].click();
                alink.remove();
            })
        },
    })
改成服务器端导出
            var qry = GetData(keys, values);
            //如果 path2 不包括根(例如,如果 path2 没有以分隔符或驱动器规格起始),则结果是两个路径的串联,具有介于其间的分隔符。如果 path2 包括根,则返回 path2。
            string wwwroot = Path.Combine(_host.ContentRootPath, "wwwroot"); //改在wwwroot目录下,方便在新窗口打开
            string Template = "template.xlsx";
            string templateFilePath = Path.Combine(wwwroot, Template);
            string pureFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff_") + "Achievement";
            //每天一个文件夹
            string destFilePath = wwwroot + "\\Achievement\\" + pureFileName + ".xlsx";
            try
            {
                using (ExcelPackage ep = new ExcelPackage(new FileInfo(templateFilePath)))
                {
                    ExcelWorksheet ws = ep.Workbook.Worksheets[]; //第1张Sheet
                    int colStart = ws.Dimension.Start.Column;  //工作区开始列,start=1
                    int colEnd = ws.Dimension.End.Column;       //工作区结束列
                    int rowStart = ws.Dimension.Start.Row;       //工作区开始行号,start=1
                    int rowEnd = ws.Dimension.End.Row;       //工作区结束行号
                    var lst = qry.ToList();
                    for (int i = ; i < lst.Count; i++)
                    {
                        int j = ;
                        ws.Cells[i + , j++].Value = lst[i].BelongDate;
                        ws.Cells[i + , j++].Value = lst[i].Region;
                        ws.Cells[i + , j++].Value = lst[i].DepName;
                        ws.Cells[i + , j++].Value = lst[i].ProjectName;
                        ws.Cells[i + , j++].Value = lst[i].Remark;
                    }
                    ws.Calculate(); //重算公式
                    ep.SaveAs(new FileInfo(destFilePath));
                    return Download(destFilePath);
                }
            }
            catch (Exception ex)
            {
                return Json(new { isSuccess = false, message = "失败:" + ex.Message }, "text/html");
            }
        }
之前导出时,还用了一个错误方法,这个方法在数据量少时,还能正常导出,数据量超过几M就显示网络错误.
FileInfo DownloadFile = new FileInfo(FullFileName);
if (DownloadFile.Exists)
{
Response.Clear();
Response.Headers.Clear();
Response.ContentType = "application/octet-stream";
Response.Headers.Add("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.Name, System.Text.Encoding.UTF8));
Response.Headers.Add("Content-Length", DownloadFile.Length.ToString());
Response.SendFileAsync(DownloadFile.FullName);
}
return Content("")
改成这样就正常了
FileInfo DownloadFile = new FileInfo(FullFileName);
return File(file2byte(FullFileName), "application/octet-stream", HttpUtility.UrlEncode(DownloadFile.Name, System.Text.Encoding.UTF8)); //从文件读取 byte
public byte[] file2byte(string fileName)
{
// 打开文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
// 读取文件的 byte[]
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Close();
return bytes; }
JeasyUI,导出Excel的更多相关文章
- 把旧系统迁移到.Net Core 2.0 日记(8) - EASYUI datagrid+ Dapper+ 导出Excel
		迁移也没太大变化,有一个, 之前的Request.QueryString 是返回NameValueCollection, 现在则是返回整个字符串. 你要改成Request.Query[“key”] 直 ... 
- C#使用Aspose.Cells导出Excel简单实现
		首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ... 
- 利用poi导出Excel
		import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ... 
- [django]数据导出excel升级强化版(很强大!)
		不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ... 
- NPOI导出Excel
		using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ... 
- ASP.NET Core 导入导出Excel xlsx 文件
		ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ... 
- asp.net DataTable导出Excel 自定义列名
		1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ... 
- Aspose.Cells导出Excel(1)
		利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ... 
- 前端导出Excel兼容写法
		今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容. 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源, ... 
随机推荐
- bootstrap 无需引入 直接使用
			<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="styl ... 
- ASP.NET 教程汇总
			channel9 https://channel9.msdn.com/ .net core项目实战 https://study.163.com/course/introduction.htm?cour ... 
- 关于 IIS 的 Management Service Delegation 配置 备份
			在MSDN没找到关于使用APPCMD备份IIS的"Management Service Delegation"模块配置命令. 到IIS的配置文件存放目录下,几番搜索,查到%wind ... 
- C++ 屏幕录制
			http://www.pudn.com/Download/item/id/1584698.html task.renwuyi.com 
- 前端如何生成条形码---JsBarcode
			React 生成条形码代码 注:需引入 jsbarcode 插件 import React from 'react'; import JsBarcode from 'jsbarcode'; class ... 
- (转)在Eclipse中进行C/C++开发的配置方法(20140721最新版)
			因准备考试原因需要在windows下配置C++标准运行环境,找到此文,Mark之. 先列举下自己遇到的情况: 1 JRE安装不上,点了exe文件后没有反应: 安装JDK!!! 2 Eclipse找 ... 
- ThreadLocal的意义和实现
			可以想像,如果一个对象的可变的变量被多个线程访问时,必然是不安全的. 在单线程应用可能会维持一个全局的数据库连接,并在程序启动时初始化这个连接对象,从而避免在调用每个方法时都传递一个Connectio ... 
- 如何在cisco官网上下载Cisco packet tracer模拟器
			这个是“思科网络技术学院”提供的一个软件,需要注册成为学员以后才能用,注册名字可以更改. 进入网站后,上面七个选项,cisco Networking Academy.课程(下边第七个选项“Packet ... 
- 9、Docker私有registry
			Docker Registry分类 Docker 默认是使用https的,但是如果在自己得私有局域网中,你指明使用http也是可以的. Registry主要的作用是托管镜像: 运行docker reg ... 
- Redis5.0+哨兵模式+Keepalived实现高可用
			Redis主备配置 原理: 从服务器向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作,也就是将主服务器的数据写入RDB文件中.在数据持 ... 
