JavaScript生成.xls文件的代码

作者:mrr 时间:2024-04-22 22:17:34 

贴代码,一切尽在注释中


<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控件,之后在弹出的对话框中点击"是"

JavaScript生成.xls文件的代码

下载下来的表格如下:

JavaScript生成.xls文件的代码

chrome:

JavaScript生成.xls文件的代码

打开表格:

JavaScript生成.xls文件的代码

以上所述是小编给大家介绍的JavaScript生成.xls文件的代码网站的支持!

标签:js,xls,文件
0
投稿

猜你喜欢

  • MySQL 客户端不输入用户名和密码直接连接数据库的2个方法

    2024-01-14 05:30:41
  • Vue路由应用详细讲解

    2024-05-05 09:24:03
  • 解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)

    2024-05-13 09:44:31
  • 浅谈Django2.0 加xadmin踩的坑

    2022-03-03 11:00:24
  • 2008年个性设计挂历参考

    2007-12-29 20:30:00
  • Django ForeignKey与数据库的FOREIGN KEY约束详解

    2024-01-18 15:17:40
  • Python编码类型转换方法详解

    2022-02-19 07:13:54
  • python中自带的三个装饰器的实现

    2021-10-28 02:31:52
  • python获取文件真实链接的方法,针对于302返回码

    2023-11-23 04:31:03
  • Python3搜索及替换文件中文本的方法

    2023-08-24 04:33:44
  • 通过LogMiner实现Oracle数据库同步迁移

    2024-01-28 05:48:49
  • 基于python实现图片转字符画代码实例

    2023-05-17 01:53:37
  • 基于Python实现图片九宫格切图程序

    2023-11-01 21:16:38
  • mysql登录报错提示:ERROR 1045 (28000)的解决方法

    2024-01-24 04:54:01
  • js鼠标事件大全

    2007-08-13 15:56:00
  • 基于Mysql+JavaSwing的超市商品管理系统设计与实现

    2024-01-29 00:31:46
  • logrus hook输出日志到本地磁盘的操作

    2024-04-26 17:34:47
  • Python自动化部署工具Fabric的简单上手指南

    2022-11-23 03:23:25
  • python requests模拟登陆github的实现方法

    2022-10-05 21:37:48
  • spyder快捷键与python符号化输出方式

    2023-08-23 11:58:24
  • asp之家 网络编程 m.aspxhome.com