浏览器端JS导出EXCEL

很多表格业务需要将表格数据导出为Excel,通常使用后台语言java或者php实现数据查询组织Excel文件,提供下载。如果使用客户端JS导出Excel的话,可以减轻服务器端的运算压力,并且能够快速响应。
早期浏览器端导出excel都是借助IE的ActiveX,需要调整浏览器的安全级别,且只能再IE浏览器下使用。我们需要一种跨平台的解决方案。
而Flash具有强大的客户端处理能力,其FileReference类可以从浏览器向本地存储数据。随着Html5的发展,File API也支持浏览器读写本地文件。因此本文主要提供两种浏览器端JS导出EXCEL文件的解决方案:

1. JS FileSaver.js
2. Flash Downloadify

你可以先查看

Demo

通过查看源码,了解实现思路。

FileSaver.js

FileSaver.js实现浏览器写入文件到本地磁盘,对于不支持Blob的浏览器需要使用Blob.js

var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");

Downloadify

Downloadify借助Flash的FileReference实现本地读写文件。(笔者补充,Flash实现了很多Html做不到的事情,例如:多文件上传、本地存储、摄像头交互、Socket通信等等,然后却被Html5一个个模仿实现,作为一个早期的Flash开发者难免有些悲哀)

<script type="text/javascript">// <![CDATA[
Downloadify.create(‘downloadify‘,{
    filename: function(){
      return document.getElementById(‘filename‘).value;
    },
    data: function(){
      return document.getElementById(‘data‘).value;
    },
    onComplete: function(){
      alert(‘Your File Has Been Saved!‘);
    },
    onCancel: function(){
      alert(‘You have cancelled the saving of this file.‘);
    },
    onError: function(){
      alert(‘You must put something in the File Contents or there will be nothing to save!‘);
    },
    transparent: false,
    swf: ‘media/downloadify.swf‘,
    downloadImage: ‘images/download.png‘,
    width: 100,
    height: 30,
    transparent: true,
    append: false
  });
// ]]></script>

Demo源码

实现非常简单,不逐一解释了。

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8"/>
<title>js导出excel-ComingX</title>
</head>
<body>
<h1>js导出excel</h1>
<p>1. 借助开源组件<a href="https://github.com/eligrey/FileSaver.js" target="blank">FileSaver.js</a>和<a href="https://github.com/eligrey/Blob.js" target="blank">Blob.js</a>,(支持:ie10+, Firefox20+, Chrome, Safari6+, Opera15+)</p>
<p>2. 借助Flash开源组件<a href="https://github.com/eligrey/FileSaver.js" target="blank">Downloadify<a>,(支持:所有浏览器)
<p><strong>数据内容:</strong></p>
<textarea rows="6" id="content">
姓名,学号,成绩
王三,103020120,98
张四,103020218,80
</textarea>
<p>
<strong>文件名</strong>:&nbsp;<input type="text" name="filename" id="filename" value="hello.csv" />&nbsp;(.csv后缀)
</p>
<p style="color: #3300ff;"">1. 使用FileSaver.js保存</p><button id="saveBtn">保存Excel文件</button>

<p style="color: #3300ff;">2. 使用Downloadify保存</p>
<p id="downloadify">
<object id="downloadify_obj" width="100" height="30" type="application/x-shockwave-flash" name="downloadify_obj" data="./downloadify.swf">
<param name="allowScriptAccess" value="always">
<param name="wmode" value="transparent">
<param name="flashvars" value="queue_name=downloadify&width=100&height=30&downloadImage=images/download.png">
</object>
</p>
<p>Tutorial From <a href="http://www.comingx.com">ComingX</a></p>
<p><script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id=‘cnzz_stat_icon_3077979‘%3E%3C/span%3E%3Cscript src=‘" + cnzz_protocol + "s5.cnzz.com/stat.php%3Fid%3D3077979‘ type=‘text/javascript‘%3E%3C/script%3E"));</script></p>
<!--filesaver-->
<script async="" src="./Blob.js"></script>
<script async="" src="./FileSaver.js"></script>
<script>
(function(){
	document.getElementById("saveBtn").onclick = function(event){
		event.preventDefault();
		var BB = self.Blob;
		saveAs(
			  new BB(
				  ["\ufeff" + document.getElementById("content").value] //\ufeff防止utf8 bom防止中文乱码
				, {type: "text/plain;charset=utf8"}
			)
			, document.getElementById("filename").value
		);
	};
})();
</script>
<!--downloadify-->
<script src="./swfobject.js"></script>
<script src="./downloadify.min.js"></script>
<script>
(function(){
Downloadify.create(‘downloadify‘,{
    filename: function(){
      return document.getElementById(‘filename‘).value;
    },
    data: function(){
      return "\ufeff" + document.getElementById(‘content‘).value;
    },
    onComplete: function(){
      alert(‘Downloadify保存成功!‘);
    },
    onCancel: function(){
    },
    onError: function(){
      alert(‘Downloadify保存失败!‘);
    },
    transparent: false,
    swf: ‘./downloadify.swf‘,
    downloadImage: ‘images/download.png‘,
    width: 100,
    height: 30,
    transparent: true,
    append: false
  });
})();
</script>
</body>
</html>
时间: 2024-10-19 19:11:17

浏览器端JS导出EXCEL的相关文章

浏览器端JS导出EXCEL——001

<script src="https://rawgithub.com/eligrey/FileSaver.js/master/FileSaver.js" type="text/javascript"></script><div ng-controller="myCtrl"> <button ng-click="exportData()">Export</button>

CefSharp中实现Chrome中jS导出Excel

[前言] 在博客园闲逛了一年多,平时都是借鉴别人的成功经验,总觉得自己应该分享点什么,但是苦于自己技术有限,平时又不爱写东西,所以一直没有写过任何东西.毕业一年多,在现实工作中遇到各种问题,深切体会到遇到问题时的焦急与纠结.今天决定写自己的第一篇现实中遇到的问题.希望能够为遇到类似问题的博友们提供一些帮助.文章可能写的不好,请勿喷!! [背景] 使用JS将<table>数据以Excel形式已经不是新鲜事情,在IE中常常使用ActiveXObject来创建Excel.application对象来

js导出excel

function inportEx() { $("#btnEx").text("导出中..."); var fugNumber = "";//第几次随访 var fugid = "";//随访组Id var fudid = "";//医生id var zTree = $.fn.zTree.getZTreeObj("tree"); var nodes = zTree.getSelected

chrome浏览器js 导出excel

1 <table id="table"> 2 <tr> 3 <th>ID</th> 4 <th>姓名</th> 5 <th>年龄</th> 6 <th>职业</th> 7 <th>地区</th> 8 <th>邮箱</th> 9 </tr> 10 <tr> 11 <td>1</td

js导出excel增加表头、mso-number-format定义数据格式

问题1:增加表头 js导出表格时,只会导出table里的展现出的内容,如需增加表头等内容需要在页面获取的字符串中拼接表头的相关字符串,详细介绍如下: tableString:新增的表头内容字符串: ctx.table: 新增的表头+页面获取的table字符串. 这样,表头就加上了,还可以通过style设置它的样式: 问题2:mso-number-format定义数据格式 在做项目时遇到mso-number-format定义的科学计数法转化格式与金额定义的向右对齐样式有冲突.  之前有写过篇博客专

js 导出Excel

最近从Silverlight这边转到javascript过来,现在要导出一个导出excel的功能.上级领导指示当页显示多少数据,就导出多少数据,没有必要从后台在去数据.以前也没有接触过这方面的,在网上一整狂查资料,最终决定采用excel2003xml+flash插件实现改功能. 获取excel2003xml格式 在桌面新建一个excel文件,另存为2003xml格式,用Vs2012打开该文件,就能清晰的明白数据保存方式. javascript构造xml数据 了解数据结构后,我们已经知道了exce

js导出excel:前端当前数据的导出

网上找的库文件,同样做了修改.在导出的时候,有时候数据第一列和最后一列可能是复选框和操作按钮,这个是我们不需要的,加了这个的过滤 //table2excel.js /* * jQuery table2excel - v1.1.1 * jQuery plugin to export an .xls file in browser from an HTML table * https://github.com/rainabba/jquery-table2excel * * Made by raina

XLSX.js 导出Excel demo

GitHub:https://github.com/SheetJS/js-xlsx 一个js操作Excel的工具,如下代码,很方便的就将json数据导出为Excel文件. 使用示例: //json 数据 var data = [{ "a": 1, "x": 2, "b": 3, "y": 4, "success":true }, { "a": 1, "x": 2, &

使用JSExcelXML.js导出Excel模板

     老规矩先来个预览图 业务系统显示效果图 导出模板图 功能描述    世间万物总是相生相克,既然我们的客户要求有导出Excel,当然也会提导人Excel,那么问题就来了,我们的业务系统怎么知道用户提供的数据会是怎样的呢,那么用户需要的数据模板就应运而生了,在JSExcelXmL的最新版本中提供模板生成功能. var tmpdlg = $.ExportExcelTmp({options }); tmpdlg.ExportExcelTmp('open'); 2.参数说明 { SheetNam