​ 严格意义来说并不是真正的excel文件,只是可以用excel打开查看而已,实际上的格式是逗号分隔文件即csv文件。

这里有几个坑要说一下:

  1. 不加Unicode的utf8头部标识excel打开文件会乱码。
  2. 加了Unicode的utf8头部标识可能会导致文件读取的时候遇到非法字符。
  3. IE不支持a标签的download属性。
  4. 这里用的是URL编码,还可以使用base64和blob。

Unicode头部标识:

EF BB BF UTF-8

FF FE UTF-16 aka UCS-2, little endian

FE FF UTF-16 aka UCS-2, big endian

00 00 FF FE UTF-32 aka UCS-4, little endian.

00 00 FE FF UTF-32 aka UCS-4, big-endian.

/*
data = {
thead : ["第一列", "第二列", "第三列"],
tbody : [
["1", "2", "3"],
["4", "5", "6"],
]
}*/
/**
* 导出excel和csv
* @param data 要导出的数据,需要是上面的数据格式,当然也可以重写这个方法自己定义数据格式
* @param name 文件名
* @param type 文件类型 xls或csv
* @returns
*/
function exportData(data, name, type) {
var dataStr = "";
//Unicode头部标识
var utf8Head = "%EF%BB%BF";
//uri文件资源类型
var csvUri = "data:text/csv;charset=utf-8,";
var xlsUri = "data:application/vnd.ms-excel;charset=utf-8,";
//创建一个a标签,用来下载
var oa = document.createElement("a");
var col = data.thead.length;
var row = data.tbody.length; //数据构造
for(var i = 0; i < col; i++) {
dataStr += data.thead[i];
if(i < col - 1)
dataStr += ","
}
dataStr += "\n"; for(var i = 0; i < row; i++) {
for(var j = 0; j < col; j++) {
dataStr += data.tbody[i][j];
if(j < col - 1)
dataStr += ",";
}
dataStr += "\n";
}
if(type === "csv") {
//拼接编码,用url编码就可以,layui就是这种方式
oa.href = csvUri + utf8Head + encodeURIComponent(dataStr);
oa.download = name + ".csv";
} else if(type === "xls") {
oa.href = xlsUri + utf8Head + encodeURIComponent(dataStr);
oa.download = name + ".xls";
} else {
return false;
}
//触发链接点击事件进行下载
oa.click();
}

js原生导出excel和csv的更多相关文章

  1. 【转】js 中导出excel 较长数字串会变为科学计数法

    [转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...

  2. Java导出Excel和CSV(简单Demo)

    Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu ...

  3. js前端导出excel:json形式的导出

    第一中形式的导出:主要是表头对应主体数据,json形式的导出 js库文件名称 : table2excel.js这个js库文件是网上找的,并且自己根据自己业务需求把内容改了一下复制到 table2exc ...

  4. js前端导出excel

    此例子是利用html特性,纯前端导出excel,样式不好看,兼容主流浏览器. var tableid = jQuery(this).closest("div.tab-label-wrap&q ...

  5. js导入导出excel

    导入: <html xmlns="http://www.w3.org/1999/xhtml" > <head>      <title>Unti ...

  6. js一键导出Excel

    HTML: 1 <div class="container"> 2 <table id="backViewTable" class=" ...

  7. js 中导出excel 较长数字串会变成科学计数法

    在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...

  8. js 中导出excel 较长数字串会变成科学计数法(转载)

    在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...

  9. php 多语言(UTF-8编码)导出Excel、CSV乱码解决办法之导出UTF-8编码的Excel、CSV

    新项目,大概情况是这样的:可能存在多国.不同语种使用者,比喻有中文.繁体中文,韩文.日本等等,开发时选择了UTF-8编码,开发顺利,没有问题.昨天做了一个csv导出功能,导出的东西完全乱了: 设置mb ...

随机推荐

  1. NOIP前做题记录

    鉴于某些原因(主要是懒)就不一题一题写了,代码直接去\(OJ\)上看吧 CodeChef Making Change 传送门 完全没看懂题解在讲什么(一定是因为题解公式打崩的原因才不是曲明英语太差呢- ...

  2. ElasticSearch : 基础简介

    1.安装 我用的docker安装,这个用起来比较方便,我是在腾讯云部署的docker,具体的过两天总结一下 安装: docker pull elasticsearch 运行: docker run - ...

  3. vue.js 中使用(...)运算符报错的解决方法

    vue.js 中使用(...)运算符报错的解决方法 Syntax Error:Unexpected token(XX:X) }, computed:{ ...mapGetters([ 'pageSiz ...

  4. "笨方法"学习CNN图像识别(二)—— tfrecord格式高效读取数据

    原文地址:https://finthon.com/learn-cnn-two-tfrecord-read-data/-- 全文阅读5分钟 -- 在本文中,你将学习到以下内容: 将图片数据制作成tfre ...

  5. Mysql sql_mode设置 timestamp default 0000-00-00 00:00:00 创建表失败处理

    往数据库里创建新表的时候报错: [Err] 1067 - Invalid default value for 'updateTime' DROP TABLE IF EXISTS `passwd_res ...

  6. TL-WR941N路由器刷DD-WRT和OPENWRT教程及使用花生壳

    今天没事做,于是决定把自己的TL-WR941N路由器刷成OPENWRT系统的.虽然说没买小米路由,但是刷成OPENWRT系统的话还是能增强不少的功能.下面写出经过一下午折腾的详细安装步骤,同样适用于其 ...

  7. php递归注意事项

    /* 循环去除字符串左边的0 */ function removeLeftZero($str){ if($str['0'] == '0'){ $str = substr($str, '1'); rem ...

  8. AWS Fargate

    AWS Lambda都是浮云,AWS Fargate才是王道——无服务器的未来,有我没你! - DockOne.iohttp://www.dockone.io/article/4656 通过 Farg ...

  9. Vulnerability Scanning Tools

    Category:Vulnerability Scanning Tools - OWASP https://www.owasp.org/index.php/Category:Vulnerability ...

  10. Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#pragma(C# 参考) 1.返回顶部 1. #pragma(C# 参考) 2015/07/20 #pragma 为编译器给 ...