javascript 导出Excel
测试兼容IE google 火狐浏览器。看到的朋友也许你某一天也会需要。
//obj是table表格外面嵌套div id
function saveCode(obj) {
try {
var strHTML = obj.innerHTML;
if (navigator.userAgent.indexOf("MSIE") > 0) //IE浏览器
{
var winname;
winname = window.open("ToExcel", "_blank", 'top=10000');
winname.document.open('text/html', 'replace');
winname.document.write("<style>");
winname.document.write("table{border:solid 1px #000;text-align:center;border-collapse:collapse; border-spacing:0;}");
winname.document.write("table td{border:solid 1px #000;text-align:center;}");
winname.document.write("table th{border:solid 1px #000;text-align:center;}");
winname.document.write("</style>");
winname.document.write(strHTML);
winname.document.execCommand('SaveAs', '', 'excel.xls');
document.execCommand("ClearAuthenticationCache");
winname.close();
} else { //Chrome 火狐 浏览器
var str = getTblData("datalist", this); //"博客, 域名Blog \r\n 2Sjolzy.cn, 3.1;2 \r\n 123123,123123 \r\n 123,123"; 测试数据
var uri = 'data:text/csv;charset=utf-8,' + encodeURIComponent(str);//要编码 //创建a标签模拟点击下载
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = "excel.csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
} catch (e) {
alert(e.Message);
return false;
}
return false;
} function getTblData(inTbl, inWindow) {
var rows = 0;
var tblDocument = document;
tblDocument = eval(inWindow).document;
var curTbl = tblDocument.getElementById(inTbl);
var outStr = "";
if (curTbl != null) {
for (var j = 0; j < curTbl.rows.length; j++) {
for (var i = 0; i < curTbl.rows[j].cells.length; i++) { if (i == 0 && rows > 0) {
outStr += ",";// \t";
rows -= 1;
} outStr += curTbl.rows[j].cells[i].innerText + ",";//\t";
if (curTbl.rows[j].cells[i].colSpan > 1) {
for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {
outStr += ",";// \t";
}
}
if (i == 0) {
if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {
rows = curTbl.rows[j].cells[i].rowSpan - 1;
}
}
}
outStr += "\r\n";
}
} else {
outStr = null;
alert(inTbl + "不存在 !");
}
return outStr;
}
对应obj 和datalist 的html结构如图:
注意的是 getTblData里面构建数据源的时候","号是换行符 如果文字里面有,号 需要替换。
解决汉字乱码问题
var uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
数据需要 BOM 头
BOM 头就是一个文档标记,标识 Unicode 文件
javascript 导出Excel的更多相关文章
- 【转载】JavaScript导出Excel
[转载]JavaScript导出Excel 原文地址 如果没有用到前端插件,也没有用到后台poi导出的话,用js导出也是一种方式.亲测可用. /** * 导出excel */ var idTmr; f ...
- 原生JavaScript 导出excel表格(兼容ie和其他主流浏览器)
因同事的需求是想前端导出excel表格,网上找了一些demo,自己修改了一下,可能以后会用到,记录下来吧,兼容ie和一些主流浏览器,ie可能会报错,原因参考 这里,edge 浏览器还没有办法导出,正在 ...
- JavaScript 导出Excel 代码
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- JavaScript导出excel文件实现
function getXlsFromTbl(inTblId, inWindow, fname) { try { var allStr = ""; var curStr = &qu ...
- 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel
步骤: 一.前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来 <!--导出Excel--> <script type="text/javascript&qu ...
- html中的table导出Excel
演示地址: http://www.jq22.com/yanshi3312 具体代码: <!DOCTYPE html> <html lang="zh-CN"> ...
- html中的table导出Excel (亲测有用(●'◡'●))
演示地址: http://www.jq22.com/yanshi3312 具体代码: <!DOCTYPE html> <html lang="zh-CN"> ...
- 如何使用JavaScript实现纯前端读取和导出excel文件
js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls.xlsx.ods(一种OpenOffice专 ...
- JavaScript 上万条数据 导出Excel文件(改装版)
最近项目要js实现将数据导出excel文件,网上很多插件实现~~那个开心呀,谁知道后面数据量达到上万条时出问题:浏览器不仅卡死,导出的excel文件一直提示网络失败.... debug调试发现var ...
随机推荐
- java中如何将字符串数组转换成字符串(转)
如果是 “字符串数组” 转 “字符串”,只能通过循环,没有其它方法 String[] str = {"abc", "bcd", "def"} ...
- Cucumber命令行接口
1. cucumber的命令行选项 首先查看命令行选项.和其它命令行工具一样,cucumber提供了—help选项.下面是cucumber帮助的一个缩减版本: $ cucumber --help -r ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- clang
1.安装 clang 可以从官网下载,如果是CentOS 6 系统,也可以在 /etc/yum.repos.d/ 目录下增加一个 epel.repo 文件,内容如下: [epel] name=Extr ...
- Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketpl ...
- webpack 前端构建
一.建立简单的项目目录 1.创建 manager 根目录(作为项目根目录)2.执行 npm init,在根目录manager下自动生成 package.json文件3.npm install webp ...
- etcd
https://github.com/silenceper/dcmp http://studygolang.com/topics/1866
- 机器码call和jmp地址的计算
call和jmp都是跳转指令,但是call的同时会把pc地址压入堆栈,并且这两种方式都有远和近跳转.下面的分析不全,因为没有在网上找到足够的资料,个人创造这个情景还是有些困难. 1.例子中的call的 ...
- 【PHP面向对象(OOP)编程入门教程】4.如何抽象出一个类?
上面已经介绍过了, 面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类, 做出来一个类很容易,只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢 ...
- Sublime多行编辑快捷键
鼠标选中多行,按下 Ctrl Shift L (Command Shift L) 即可同时编辑这些行: 鼠标选中文本,反复按 CTRL D (Command D) 即可继续向下同时选中下一个相同的文本 ...