​ 严格意义来说并不是真正的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. C Primer Plus--C存储类、链接和内存管理之动态分配内存及类型限定词

    目录 存储类说明符 存储类和函数 动态分配内存 malloc函数 free函数 calloc函数 动态分配内存的缺点 C类型限定关键字 constant定义全局常量 volatile关键字 restr ...

  2. cs 与 bs 架构

    C/S和B/S各有优势,C/S在图形的表现能力上以及运行的速度上肯定是强于B/S模式的,不过缺点就是他需要运行专门的客户端,而且更重要的是它不能跨平台,用c++在windows下写的程序肯定是不能在l ...

  3. python中创建字典的多种方法

    dict={} dict['key']='value dict={'key':"value","key2":"value2"} dict=d ...

  4. 【洛谷】P3177 [HAOI2015]树上染色

    懒得复制题面了直接传送门吧 分析 直接求点与点之间的距离感觉不是很好求,所以我们考虑换一个求法. 瞄了一眼题解 距离跟路径上边的长度有关,所以我们直接来看每一条边的贡献吧(这谁想得到啊) 对于每一条边 ...

  5. Go 随机打乱 字符串 数组

    func Random(strings []string) string { for i := len(strings) - 1; i > 0; i-- { num := rand.Intn(i ...

  6. GB28181技术基础之1 - SIP协议

    SIP 协议,即 会话初始协议(Session Initiation Protocol),是一个应用层的 点对点协议,用于初始.管理和终止网络中的语音和视频会话,是 GB28181 的核心之一. 按照 ...

  7. debian9 ps 命令不能用

    # cat > /etc/apt/sources.list << EOF> deb http://mirrors.aliyun.com/debian/ stretch main ...

  8. Linux下java进程CPU占用率高分析方法(二)

    1. 通过 top 命令查看当前系统CPU使用情况,定位CPU使用率超过100%的进程ID:2. 通过 ps aux | grep PID 命令进一步确定具体的线程信息:3. 通过 ps -mp pi ...

  9. ubuntu下搭建nfs服务

    1. 安装nfs服务端 $ sudo apt install nfs-kernel-server -y 2. 创建目录 $ sudo mkdir -p /mnt/sharefolder 3. 使任何客 ...

  10. python中的request模块

    本文转自:https://www.cnblogs.com/ydy11/p/8902631.html(版权归属原作者,因觉得写得非常好,故引用) python模块之request模块的理解 reques ...