javascript前端导出csv表格
使用场景
后台统计经常要展示各种各样的表格数据,几乎每个表格展示都会伴随着数据的导出。
之前的解决方案都是通过发起一个相同查询参数(querystring)的导出请求(action=export),由服务器导出表格。这种方式的缺点是显而易见的:服务器额外做了一次查询。
JS前端直接导出
曾经我想过把当前表格数据封装直接发给服务器然后节省查询,总觉得太别扭了。直到前几天偶然发现JS可以直接导出csv文件。导出的原理如下:
- a标签的datasource功能
<a href="data:..."></a>
直接下载文件 - a标签的
download
属性,用以声明下载的文件名 - csv文件的BOM头,
data:text/csv;charset=utf-8,\ufeff
,特别指出\ufeff
是BOM头,可以让excel等识别出csv文件的编码。 - encodeURIComponent() ,对csv文件的换行符
\n
进行转码
一个简单的示例
js_csv = {
export_csv: function(data, name) {
// “\ufeff” BOM头
var uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(data);
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = (name+".csv")||"temp.csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
},
export_table: function(selector, name) {
var self = this;
if (document.querySelectorAll(selector).length == 0) {
alert('Selector "'+selector+'" not exists!');
return false;
}
self.export_csv(self.get_table_data(selector), name);
},
get_table_data: function(selector) {
var data = "";
document.querySelectorAll(selector+' tr').forEach(function(t) {
var tmp = [];
t.querySelectorAll('th,td').forEach(function(e){
tmp.push(e.innerText.replace("\n", "")); // 单元格里含有多个html元素可能会获取到换行符
});
data += tmp.join(",") + "\n";
});
return data;
}
}
// 直接导出数据
js_csv.export_csv("dapianzi,卡夫卡,真理君,宿敌", "王路飞");
// 导出表格
js_csv.export_table("#table_id", "Some table data");
javascript前端导出csv表格的更多相关文章
- 前端导出csv
前端导出csv export: function(data, name) { // csv文件的BOM头 \ufeff可以让excel等识别出csv文件的编码 var uri = 'data:text ...
- web前端导出csv文件
前言 导出文件,使用最多的方式还是服务器端来处理.比如jsp 中使用response 的方式. 但是,有时候可能就想使用web 前端是否也可以把页面上的内容导出来呢? 比如说,导出页面的一个表格. 这 ...
- 导出CSV表格数据
<?php class Csv{ //导出csv文件 public function put_csv($list,$title){ $file_name="CSV".date ...
- vue 纯前端导出 excel 表格
在开发后台管理系统的时候,很多地方都要用到导出excel 表格,比如将table中的数据导出到本地,那么实现这种需求往往有两种方案: 一.后端开发一个下载链接,前端将这个链接放到 a 标签的 href ...
- 网页前端导出CSV,Excel格式文件
通过自己实际测试有以下几种方法 方法一通过a标签实现,把要导出的数据用“\n”和“,”拼接成一个字符串,然后把字符串放到href中,这种方法只支持chrome,firefox等非ie浏览器 html页 ...
- 纯前端导出Excel表格
<html> <head> <p style="font-size: 20px;color: red;">使用a标签方式将json导出csv文件 ...
- 前端导出excel表格
前言近期项目有个新需求--将折线图表的数据加一个下载成excel表格的功能.以前下载功能都是调后台接口的,但是这个迭代,后台压力比较重,部分就交给了前端自己实现,下面就记录一下前端如何实现excel表 ...
- js前端导出Excel表格后数字自动变成科学计数法问题
一般的文件导出都是后端进行导出,最近一个项目遇到导出接口挂掉了,前端实现导出的情况. 背景是vue框架,iView组件.可以直接使用exportCsv方法进行导出. 导出时进行一下行和列的切割就可以了 ...
- php 导出csv表格文件
1.数据库取出数据,存放在二维数组中 $conn=new mysqli('localhost','root','root','myDBPDO'); $result=$conn->query('s ...
随机推荐
- C# 面向切面编程--监控日志记录方案
背景:现在公司整体在做监控平台,要求把各个部分的细节都记录下来,在前台页面上有所显示,所以现在需要做的就是一个监控日志的记录工作,今天讲的就是渲染监控日志的例子. 现状:当前的渲染程序没有为监控日志记 ...
- java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作
ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...
- Flask之部署
5.3 部署 当我们执行下面的hello.py时,使用的flask自带的服务器,完成了web服务的启动.在生产环境中,flask自带的服务器,无法满足性能要求,我们这里采用Gunicorn做wsgi容 ...
- Rhel6.0部署Oracle10g报错相关问题记录
1.libawt.so及libXt.so.6,lib*系列报错,到最后的界面ruiy哥我笑了!.相信你也会笑的!终于找到根源了!哇哈哈!希望后面不要报error in invoking target ...
- PyInstaller打包成exe可执行文件
PyInstaller 安装pyinstaller 对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定: pip install pyinstaller 通常我们会下载源码 ...
- HDU ACM Fibonacci
Problem Description Fibonacci numbers are well-known as follow: Now given an integer N, please find ...
- Vulkan Tutorial 09 图像与视图
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 使用任何的VkImage,包括在交换链或者渲染管线中的,我们都需要创建VkImage ...
- 斯坦福CS229机器学习课程笔记 Part1:线性回归 Linear Regression
机器学习三要素 机器学习的三要素为:模型.策略.算法. 模型:就是所要学习的条件概率分布或决策函数.线性回归模型 策略:按照什么样的准则学习或选择最优的模型.最小化均方误差,即所谓的 least-sq ...
- History - BOM对象
History 对象 History 对象包含用户(在浏览器窗口中)访问过的 URL. History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问. 注 ...
- 【bzoj1015】星球大战starwar
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5139 Solved: 2332[Submit ...