JavaScript生成.xls文件的代码
作者:mrr 发布时间:2024-04-22 22:17:34
标签:js,xls,文件
贴代码,一切尽在注释中
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<input type="button" value="下载设备模板" onclick="foo;" />
<script type="text/javascript" language="javascript">
var downloadTemplate = function
{
/** * 根据所给数据创建并返回单行 tr节点 * data (必选), tag (可选, 标识创建的节点类型) **/
var getTr=function(data,tag)
{
var tr=document.createElement("tr"); for(var i=0;i<data.length;i++)
{
var item=document.createElement(tag||"td"); item.innerHTML=data[i]; tr.appendChild(item);
}
return tr;
}
; /** * 根据所给数据创建并返回 table节点 * data (可选,无则返回空的table节点), head(可选, 标识是否存在表头) **/
var getTable=function(data,head)
{
var table=document.createElement("table");
var head=head||false; //存在表头设标识为th,否则为td
var tag=head?"th":"td"; //判断是一维||二维,执行不同逻辑
if(data[0] instanceof Array)
{
for(var i=0;i<data.length;i++)
{
//第一行数据根据tag创建节点类型
(i==0)?table.appendChild(getTr(data[i],tag)):table.appendChild(getTr(data[i]));
}
}
else if(data instanceof Array)
table.appendChild(getTr(data,tag));
return table;
}
; /** * table (必选, table节点) * uri 为生成excel的头部标签 * xmlns xml命名空间 * 返回xls资源 **/
var getXls=function(table)
{
var uri = 'data:application/vnd.ms-excel;base64,';
var 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:WorksheetOptions>'+ '<x:DisplayGridlines/>'+ '</x:WorksheetOptions>'+ '</x:ExcelWorksheet>'+ '</x:ExcelWorksheets>'+ '</x:ExcelWorkbook>'+ '</xml>'+ '<![endif]-->'+ '</head>'+ '<body>'+ '<table>{table}</table>'+ '</body>'+ '</html>';
/** * 转码 base 64 * window.btoa能从ascii/二进制流中创建一个base64编码的字符串 * escape编码 unescape 解码字符串 * encodeURIComponent编码 DecodeURIComponent 解码字符串 **/
var base64 = function(s)
{
return window.btoa(unescape(encodeURIComponent(s)));
};
//返回替换完具体数据的xls模板 var getXlsXml = function(template,data)
{
return template.replace(/{(\w+)}/g,data);
};
//返回资源链接
return uri+base64(getXlsXml(template, table.innerHTML));
};
/** * IE浏览器 * 使用Microsoft ActiveXObject组件生成xls ( 只兼容IE浏览器,选择允许加载组件 ) * table(必选, table节点) **/
var msDownload=function(data)
{
var xls = new ActiveXObject("Excel.Application");
xls.visible = true;
var xlsBook = xls.Workbooks.Add;
var xlsheet = xlsBook.Worksheets(1);
for(var i=0;i<data.length;i++)
if(data[0] instanceof Array)
for(var j=0;j<data[0].length;j++)
xlsheet.Cells(i+1,j+1).Value=data[i][j]; else xlsheet.Cells(1,i+1).Value=data[i]; //用完释放 xls=null; };
//参数: data(必选,一维||二维 数组), head(可选, 标识是否存在表头)
var download=function(data , head)
{
if(window.navigator.userAgent.indexOf("MSIE") >= 0)
msDownload(data);
else //下载(RestFul:资源下载置于超链接,地址为资源定位地址)
window.location.href =getXls(getTable(data,head));
};
return
{
getXls:getXls, msDownload:msDownload, download:download
};
};
//测试数据 var od=['aid','pwd','设备名称','网关DK','区域'];
var td=[ ['aid','pwd','设备名称','网关DK','区域'], ['10086','root','松下R-399','208564165456542','2 #201'], ['10001','root','索尼SUV 09','456542895564165','2 #201'] ];
var foo=function
{
// new downloadTemplate.download(od,true);
new downloadTemplate.download(td,true);
}
;
</script>
</body>
</html>
测试结果:
在IE浏览器上需要允许加载ActiveX控件,之后在弹出的对话框中点击"是"
下载下来的表格如下:
chrome:
打开表格:
以上所述是小编给大家介绍的JavaScript生成.xls文件的代码网站的支持!


猜你喜欢
- 学在前面上篇 OpenCV 博客原计划完成一个 识别银行卡号 的项目,但是写的过程中发现,技术储备不足,我无法在下述图片中,提取出卡号区域,
- 由于日期存在不同位数的月份或天数,出现参差不齐,既不美观也在日期比较时不好操作。如使用本涵数就会排列整齐:'================
- 本文实例讲述了Python实现查找数组中任意第k大的数字算法。分享给大家供大家参考,具体如下:模仿partion方法,当high=low小于
- 一、概述在日常使用数据库中,80%的数据请求都是查询,而余下的20%是更新或者增加数据。如何提升查询性能,便是提高数据库处理能力的关键。二、
- endswith()方法返回true,如果字符串以指定后缀结尾,否则返回(False可选限制的匹配从给定的索引开始和结束)。语法
- 快速+简单搭建环境。如果有问题,欢迎进群讨论留言。第一步:安装python解释器官网地址:https://www.python.org/自动
- 块级元素块级元素生成一个元素框,(默认地)它会填充其父级元素的内容,旁边不能有其他元素。换句话说,他在元素框之前和之后生成了“分隔”符。我们
- mysql的存储过程、游标 、事务实例详解下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考。其中,涉及到了存
- 合并在numpy中合并两个arraynumpy中可以通过concatenate,参数axis=0表示在垂直方向上合并两个数组,等价于np.v
- 在GitHub上发现一些很有意思的项目,由于本人作为Python的初学者,编程代码能力相对薄弱,为了加强Python的学习,特此利用前辈们的
- linux安装mysql服务分两种安装方法:①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容
- 我就废话不多说了,直接 上代码吧!import kafka.api.PartitionOffsetRequestInfo;import ka
- 事务处理的流程示例 database := db.DB tx, err := datab
- 本文实例讲述了python获取文件扩展名的方法。分享给大家供大家参考。具体实现方法如下:import os.path def file_ex
- 因为工作(懒惰),几年了,断断续续学习又半途而废了一个又一个技能。试着开始用博客记录学习过程中的问题和解决方式,以便激励自己和顺便万一帮助了
- What's more important to your web site: pictures or text? If you h
- 1. 什么是 CSV 文件CSV(逗号分隔值)文件是使用逗号分隔信息的文本文件。该文件的每一行都是一条数据记录,也就意味着它可以用于以表格的
- 本文实例讲述了python通过BF算法实现关键词匹配的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python# -
- 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from y
- 在《多进程并发与同步》中介绍了进程创建与信息共享,除此之外python还提供了更方便的进程间通讯方式。进程间通讯multiprocessin