jqgrid导出CSV
来源:互联网 发布:tensorflow pdf下载 编辑:程序博客网 时间:2024/06/08 01:54
最近一直在弄jqgrid,都是准备在新的项目上的难点。在此过程中遇到了jqgrid需要导出数据至csv,在网上查找了各种资料,没有现成的样例,网上只有导出当前页面上的表格,而项目需要导出所有的数据,所以只有自己在前辈的基础上修改了
以下代码根据网上js导出csv修改而成
$("#del").click(function () { var title = "人员信息"; var array = new Array(); //alert($("thead").html());查看jqgrid形成的table的html样子$("th").each(function (i, item) {//遍历jqgrid表头 var idTemp = $(item).attr("id");//获取表头的字段,显示时是如list2_name,其中list2为table的id if ($("#" + idTemp).css("display") != "none") {//获取显示的字段和列名,由于此项目可以让客户配置列的显示和顺序,所以导出数据时也要判断哪些列需要导出,哪些不需要导出 var id = idTemp.replace("list2_", ""); var colName = $(item).text(); var obj = colName + "," + id; array.push(obj); } }); $.ajax({//获取返回的json数据,data是传递后台所需要查询的字段 type: "POST", url: "Account/Export", data: { "ID": "id", "UserNo": "userNo", "Name": "Name", "Password": "Password", "Email": "Email" }, dataType: "json", success: function (data) { getXlsFromTbl(array, data, title) } }); }); function getXlsFromTbl(array, data, title) { try { var allStr = ""; var curStr = ""; if (array != null && data != null) { curStr = getTblData(array, data, title); } if (curStr != null) { allStr += curStr; } else { alert("你要导出的表不存在!"); return; } var fileName = getExcelFileName(title); doFileExport(fileName, allStr); } catch (e) { alert("导出发生异常:" + e.name + "->" + e.description + "!"); } }
function getTblData(array, data, title) { var outStr = ""; for (i = 0; i < array.length; i++) {//这里是写入列名,即在页面上显示的名称 var temp=(array[i].split(','))[0]; if (temp != null && temp != "") { outStr += temp + "\t"; } } outStr += "\r\n"; for (i = 0; i < data.length; i++) {//这里是界面上的字段和返回的json中的数据字段匹配,匹配的就是界面要求显示的,不匹配的就不输出 var dataObj = data[i]; for (j = 0; j < array.length; j++) { for (var temp in dataObj) { if (temp == (array[j].split(','))[1]) { outStr += dataObj[temp] + "\t"; } } } outStr += "\r\n"; } return outStr; } function getExcelFileName(title) { var d = new Date(); var curYear = d.getYear(); var curMonth = "" + (d.getMonth() + 1); var curDate = "" + d.getDate(); var curHour = "" + d.getHours(); var curMinute = "" + d.getMinutes(); var curSecond = "" + d.getSeconds(); if (curMonth.length == 1) { curMonth = "0" + curMonth; } if (curDate.length == 1) { curDate = "0" + curDate; } if (curHour.length == 1) { curHour = "0" + curHour; } if (curMinute.length == 1) { curMinute = "0" + curMinute; } if (curSecond.length == 1) { curSecond = "0" + curSecond; } var fileName = title + "_" + curYear + curMonth + curDate + "_" + curHour + curMinute + curSecond + ".csv"; //alert(fileName); return fileName; } function doFileExport(inName, inStr) {//这段是抄袭网上的,在html中一定要有<iframe id="HideFrm" style="display: none"></iframe> var xlsWin = null; if (!!document.all("HideFrm")) { xlsWin = HideFrm; } else { var width = 6; var height = 4; var openPara = "left=" + (window.screen.width / 2 - width / 2) + ",top=" + (window.screen.height / 2 - height / 2) + ",scrollbars=no,width=" + width + ",height=" + height; xlsWin = window.open("", "_blank", openPara); } xlsWin.document.write(inStr); xlsWin.document.close(); xlsWin.document.execCommand('Saveas', false, inName);//这儿方法看了很久,没有找到具体参数的意义xlsWin.close();}
这段js能实现导出csv形式的文件,但只是形似。通过比较,一般的csv文件是以逗号分隔开,而且编码格式是ANSI,但以上导出的是以空格分隔开,编码格式是以UNICODE所以说只能说是形似。由于本项目需要导出后再导入进去,所以需要标准的csv格式,就需要想另一种方法保存。
function doFileExport(inName, inStr) {//这段是抄袭网上的,在html中一定要有<iframe id="HideFrm" style="display: none"></iframe> var file_name=window.prompt("请指定输出文件名称(.txt)","C://ExportTxt.txt"); file_name=file_name.split("//").join("////"); alert(inStr); var FSO=new ActiveXObject("Scripting.FileSystemObject"); var f1 = FSO.CreateTextFile("c:\\testfile.csv", true); f1.write(inStr); f1.close(); }
以上运行会发现报参数错误的问题,在网上找FSO.CreateTextFile的方法也没找到能使我理解什么地方出的问题(是由于字符串空格造成的原因),最后经过调试,发现是由于形成字符串的表头有问题,不知道是空格的原因还是什么情况,把表头那字符串去掉就能正常形成标准的csv文件(当如,字符串的空格分隔符都换成逗号才行)
最后在想到由于导入还需要操作,把导入和导出都写在前台似乎太不安全了,于是确定都写到后台去,只是把以上的js方法保留下来,供以后的朋友少走弯路!
目前导出改成在后台进行,把前台的列顺序,可见列的列名及列值传到后台,在后台先生成csv文件,再通过下载到客户端电脑,以下是下载文件到客户端电脑的方法
一.public FilePathResult GetFileFromDisk()//此方法不能下载后删除源文件
{
string path = @"C:\Users\jiangxk\Desktop\";
string fileName = "20120801_095853.csv";
return File(path + fileName, "text/plain", "20120801_101039.csv");//或者return File(new FileStream(path+fileName, FileMode.Open), "application/octet-stream", Server.UrlEncode(fileName));
}
或者
二.FileInfo file = new FileInfo(filePath);//此方法能删除源文件
Response.Clear(); //清除缓冲区流中的所有内容输出
Response.ClearHeaders(); //清除缓冲区流中的所有头,不知道为什么,不写这句会显示错误页面
Response.ClearContent();
Response.Buffer = true;//设置缓冲输出为false
//设置输出流的 HTTP MIME 类型为application/octet-stream
Response.ContentType = "application/octet-stream";
//将 HTTP 头添加到输出流
Response.AppendHeader("Content-Disposition", "attachment;filename=" + DateTime.Now.ToString("yyyMMdd_hhmmss") + ".csv");
Response.AppendHeader("Content-Length", file.Length.ToString());
//将指定的文件直接写入 HTTP 内容输出流。
//一定要注意是WriteFile不是Write
Response.WriteFile(file.FullName);
Response.Flush(); //向客户端发送当前所有缓冲的输出
Response.End();
file.Delete();//删除源文件
- jqgrid导出CSV
- csv.js导出csv
- CSV 导出
- 导出csv
- 导出csv
- csv 导出
- jqGrid数据导出
- jqgrid 表格数据导出
- jqGrid数据导出
- csv文件导出
- php导出CSV方法
- 导出CSV EXCEL
- php导出CSV方法
- JAVA 导出CSV代码
- dataset 导出 csv
- 导出CSV格式
- php导出csv,xls
- 将DataTable导出CSV
- 分割字符串(CString)
- android自动化测试技术
- 感受一下struts2框架设计及扩展考虑
- Android选择TextView的文字
- 【UML】UML几种图的绘制
- jqgrid导出CSV
- C++ string类
- 如何控制在一个软件中特殊的字符比如#都显示为红色呢?该字符是作为标签中的内容出现的,可能出现在JLABEL,JCheckBox,JCombox的标签中的,
- java 基本数据类型
- POJ 3090简单数论
- Gridview鼠标移动到数据行时改变该数据行的背景色
- k3 自动生成凭证方案
- Windows安装虚拟机VMware,如何能让Windows和Linux文件共享
- 在VC中用GDI+缩放图片文件