js原生导出excel和csv
严格意义来说并不是真正的excel文件,只是可以用excel打开查看而已,实际上的格式是逗号分隔文件即csv文件。
这里有几个坑要说一下:
- 不加Unicode的utf8头部标识excel打开文件会乱码。
- 加了Unicode的utf8头部标识可能会导致文件读取的时候遇到非法字符。
- IE不支持a标签的download属性。
- 这里用的是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的更多相关文章
- 【转】js 中导出excel 较长数字串会变为科学计数法
[转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...
- Java导出Excel和CSV(简单Demo)
Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu ...
- js前端导出excel:json形式的导出
第一中形式的导出:主要是表头对应主体数据,json形式的导出 js库文件名称 : table2excel.js这个js库文件是网上找的,并且自己根据自己业务需求把内容改了一下复制到 table2exc ...
- js前端导出excel
此例子是利用html特性,纯前端导出excel,样式不好看,兼容主流浏览器. var tableid = jQuery(this).closest("div.tab-label-wrap&q ...
- js导入导出excel
导入: <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Unti ...
- js一键导出Excel
HTML: 1 <div class="container"> 2 <table id="backViewTable" class=" ...
- js 中导出excel 较长数字串会变成科学计数法
在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...
- js 中导出excel 较长数字串会变成科学计数法(转载)
在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...
- php 多语言(UTF-8编码)导出Excel、CSV乱码解决办法之导出UTF-8编码的Excel、CSV
新项目,大概情况是这样的:可能存在多国.不同语种使用者,比喻有中文.繁体中文,韩文.日本等等,开发时选择了UTF-8编码,开发顺利,没有问题.昨天做了一个csv导出功能,导出的东西完全乱了: 设置mb ...
随机推荐
- 洛谷P1714切蛋糕
题目 该题目就是求这n个数的前缀和所组成的数组的所有子区间的左端点和右端点相差不超过m,且他们的前缀和差最大,求出这个最大值即可. 而朴素算法肯定会T,而我们发现如果前缀和最大的话,则前缀和的值一定是 ...
- Codeforces Round #604 (Div. 1) - 1C - Beautiful Mirrors with queries
题意 给出排成一列的 \(n\) 个格子,你要从 \(1\) 号格子走到 \(n\) 号格子之后(相当于 \(n+1\) 号格子),一旦你走到 \(i+1\) 号格子,游戏结束. 当你在 \(i\) ...
- Android中相对布局的两个控件
<Button android:id="@+id/button3" android:layout_width="wrap_content" android ...
- 6、vueJs基础知识06
vue动画 transition 之前1.0版本是以 属性的形式展示的 <p transition="fade"></p> .fade-transition ...
- Oracle语法 及 SQL题目(一)
目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...
- win10: ctrl+shift不能切换输入法的问题
习惯了使用Ctrl+Shift切换输入法,乍然切换到Win10,很不适应,可用以下方法修改之. 1. 点击开始菜单,点击“设置”按钮 2. 选择“时间与语言” 3. 选择“区域和语言”按钮,查看右 ...
- Apache 使用ssl模块配置HTTPS(Centos7 httpd2.4.6)
根据原文:http://blog.csdn.net/ithomer/article/details/50433363改编 Web服务器在默认情况下使用HTTP,这是一个纯文本的协议.正如其名称所暗示的 ...
- PHP获取远程文件的大小,通过ob_get_contents实现
function remote_filesize($uri,$user='',$pw='') { ob_start(); $ch = curl_init($uri); curl_setopt($ch, ...
- 【转】把sqlite3数据导入到MySQL中
之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据.如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去. 1.SQLit ...
- 一、jenkins下载及安装
一.安装 官网地址:https://jenkins.io/zh/ 1.下载war包,放到tomcat——>webapps下,双击bin——>startup.bat启动 2.打开命令提示符. ...