js导出excel单元格内换行符代码_前端和excel的那些事

前端和 excel 的那点事

在开发需求中,经常会遇到需要和excel相关的需求,毕竟不是所有人都是程序员,很多的业务都是通过excel去进行数据的整理归类计算的,excel中提供的一系列快捷功能,统计功能也非常的实用,但是这也就造成了除了和接口打交道,前端也需要和excel打一下交道

excel 是什么

excel是微软出的一款电子表格软件,wps是国内知名的免费办公软件,以及苹果的Numbers同样都支持编辑和生成excel文件

excel 的格式

这里说的不是单纯的excel而是平时前端开发的时候所使用到的excel类型的文件格式,主要有

csv

csv 是一种纯文本的格式,非常的简单,每一行代表一行,没一列通过,进行分割,我们只需要通过split函数就能直接分割成对应的二维数组结构

xsls/xls

区别在于 xls类型的文件我们可以通过存储网页的形式存储下来,xsls就是一个纯的二进制文件了,这一类更倾向于使用类库进行操作

读取

如果是csv,最简单的情况下,就直接使用<input type="file">,只有用fileReader读取为纯文本就行了

nodejsbrowser唯一的区别就在于,node还支持直接通过steam等概念进行输入,而browser只有arrayBuffer这一种手段

在一般情况下,直接fileReader读取excel都会是二进制流,不过根据其编码规范是可以进行还原的,其中的对应关系比较负责

常用的库

库的左右就在于,他们能将excel的文件专为对应的js对象供我们操作

sheet.js

社区开源版本的xlsx.js就可以完成读取和写入的工作了,

以下是 sheet.js 的对应数据结构.

26385c497a350e7c0f32b79be98d3d91.png

读取也狠方便

XLSX.read(buffer, { type: "buffer" });

不过官方的文档相对还是比较难以理解的,一般日常我用另外一个库

exceljs

js-xlsx 的 思想构成也是通过将二进制流转为js对象的方式方便我们操作,不过 api 方面设计的更加友好一点

最主要的两点。

  • 中文文档
  • demo 易懂

读取也很容易,通过fileReader.readAsArrayBuffer 就能直接读取,如果是在node环境下,更能直接通过steamfile接口直接获取数据

// load from buffer
var workbook = new Excel.Workbook();
workbook.xlsx.load(data).then(function() {// use workbook});

写入

原生 js

这个只适用于 js

xls

2013 之前的xls模式是可以将一个html文件导出成一个.xls文件的所以我们首先定义一个html

<table id="tblData"><tr><th>Name</th><th>Email</th><th>Country</th></tr><tr><td>John Doe</td><td>john@gmail.com</td><td>USA</td></tr><tr><td>Michael Addison</td><td>michael@gmail.com</td><td>UK</td></tr><tr><td>Sam Farmer</td><td>sam@gmail.com</td><td>France</td></tr>
</table>

接着获取html之后导出

const tableHTML = table.outerHTML.replace(/ /g, "%20");
const url = `data:application/vnd.ms-excel,${tableHTML}`;
window.open(url);

csv

还能说什么呢,拼接字符串呗

sheet.js

抱歉不是很熟悉他的输出,可以这样使用来生成一个base64从而用 fileSaver 进行下载

XLSX.write(wb, { bookType: "xlsx", type: "base64" });

exceljs

exceljs 是我最喜欢使用的一个库了,文档清晰而且支持图片,富文本等各种操作

导出

导出操作在浏览器端依然是生成一个ArrayBuffer废话少说,直接上代码

function download(workbook, name = "template") {if (!workbook) {throw new Error("workbook不能为空");}return workbook.xlsx.writeBuffer().then(buffer => new Blob([buffer], { type: "application/octet-stream" })).then(blob =>FileSaver(blob, `${name}-${new Date().toLocaleString()}.xlsx`));
}

填充数据

var worksheet = workbook.addWorksheet("sheet");
worksheet.columns = [{ header: "Id", key: "id", width: 10 },{ header: "Name", key: "name", width: 32 },{ header: "D.O.B.", key: "DOB", width: 10, outlineLevel: 1 }
];worksheet.addRows([]);

其他操作

文档中已经很详细了,exceljs几乎支持了所有可能会用到的excel操作,建议熟悉文档即可,像合并单元格背景图片富文本评论均可以支持

暂不展开了

ejs-excel

如果熟悉ejs,同时对样式操作,可视化操作的人,可以试试这个,可惜只支持node环境,通过ejs的语法定义,将数据填充到 excel 中并且生成

插件

微软官方文档

excel2016 之后其实 excel 支持使用 js 进行插件的开发,之前工作中遇到过,但是当时不是很完善,等待重新读一遍文档再补充

参考

[SheetJS] js-xlsx 模块学习指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言高级技术之--游戏属性修改器(背景故事)

前些天&#xff0c;由于看朋友在玩单机游戏仙剑3&#xff08;这么早的游戏&#xff0c;早不完了&#xff09;&#xff0c;看得我实在太累&#xff0c;问他为什么不找修改器之类的&#xff0c;那样轻松一些&#xff0c;他的回答让我很无语&#xff0c;他说&#xff1a;“老是下到…

CIO职业生涯如何进行三级跳

关于从技术员到CIO转型的&#xff0c;网上讨论的已经很多了。下面笔者结合自己的工作经历&#xff0c;谈谈自己在这方面的感受。概括的说来&#xff0c;我的CIO职业生涯&#xff0c;可以用“三级跳”来概括。借此&#xff0c;也给应届毕业生几个建议。  一级跳&#xff1a;MC…

Filter案例之敏感词过滤和代理模式

一、需求分析 二 、代理模式 1、概念 2、代码实现 代理对象可以强转为真实对象&#xff0c;即对应的接口类&#xff1b; 3、通过代理增强方法 其中&#xff0c;方法对象invoke真实对象&#xff0c;反射原理&#xff1b; 三、过滤敏感词汇案例代码实现 本地的字符流和字节流创建…

555定时器回差电压计算公式_555时基电路引脚解析

555时基电路引脚解析凡是时基电路555&#xff0c;电路内部结构相同&#xff0c;性能都是相同的。 时基电路555有很多厂家型号&#xff0c;如MC555、CA555、XR555、LM555等&#xff1b;国产型号有SL555、FX555、5G1555等&#xff0c;典型的、也是最常用的是NE555。555前的字母只…

LINQ学习(四):From子句

说明&#xff1a;查询表达式必须以 from 子句开头。 另外&#xff0c;查询表达式还可以包含子查询&#xff0c;子查询也是以 from 子句开头。SQL命令中from指的是数据表&#xff0c;LINQ中from 子句中引用的数据源的类型必须为 IEnumerable、IEnumerable<T> 或一种派生类…

jQuery attr removeAttr 属性操作

jQuery attr removeAttr 属性操作 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath request.getScheme() "://" request.getServerName() …

麻省理工学院(MIT)的公开课程

很早之前就听说麻省理工学院把很多课程公开了&#xff0c;今天偶尔搜到这个内容。还不错 http://www.core.org.cn/OcwWeb/index.htm 课程列表 http://www.core.org.cn/OcwWeb/Global/all-courses.htm转载于:https://www.cnblogs.com/chenxizhang/archive/2009/04/27/1444255.ht…

66319d电源使用说明书_矿用防爆交换机如何正确安装调试和使用?

矿用防爆交换机是矿山的通讯核心&#xff0c;它不同于普通交换机&#xff0c;因应用环境的特殊性&#xff0c;在安装以及后续使用过程中有更多要求。在使用过程中&#xff0c;出保障交换机本身的部件无损、性能不受影响外&#xff0c;还要注意使用环境&#xff0c;保证现场安全…

xcode7.1 安装不了Alcatraz怎么办.看这里

按照github上面的安装的方法,但是发现并没有成功.这是为什么呢? 解决的方法是什么呢? 看下面: 这个时候新的问题来了,要怎么获取7.1的UUIDs呢?看下面:   打开你的终端,输入下面的代码就可以了: defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibili…

C#颜色和名称样式对照表【转载】

这篇文章来来源于C# Color Table&#xff0c;这里是我翻译的中文版本&#xff0c;其中已经加上了我的一些理解和注释。翻译这篇文章的原因是我在写C#程序的时候发现&#xff0c;C#自带的颜色种类极多&#xff08;详见下表&#xff09;&#xff0c;如果没有直观的对照关系的话&a…

epub 机器人系列 阿西莫夫_艾萨克·阿西莫夫是不是穿越来的,他怎么能那么准地预言机器人,互联网技术呢?...

机器人&#xff0c;纳米技术&#xff0c;网络图书馆&#xff0c;视频电话&#xff0c;当这些悄悄走进我们的生活&#xff0c;如果有人问你&#xff0c;是什么改变了我们的生活&#xff1f;你可能会回答&#xff0c;当然是科技的发展。如果再问你&#xff0c;这些科技的发展最初…

谈谈Runtime类中的freeMemory,totalMemory,maxMemory几个方法

最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题&#xff0c;很多人感到很疑惑&#xff0c;为什么&#xff0c;在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节&#xff0c;而随着 jav…

关于 lockfree 算法

lockfree的本质是乐观锁。也就是说&#xff0c;它假设多数情况下&#xff0c;别人不会改变。一个通用的lockfree算法可描述如下&#xff1a; lockfree_modify(DataT* data){ for (;;) { Save old state of data to a local variable; do modify; lo…

枚举类enum

一、枚举类 package com.xxx.xf.common.enums;import com.xxx.xf.workday.contant.HolidayContant;/*** Author: wangmq* Version: 1.0* 操作枚举类*/ public enum XfOperateEnum {// 定义多个由构造方法组成的对象&#xff0c;逗号隔开分号为结束XF_OPERATE_SL("SL"…

js怎么调用wasm_Long.js源码解析

基于现在市面上到处都是 Vue/React 之类的源码分析文章实在是太多了。(虽然我也写过 Vite的源码解析所以这次来写点不一样的。由于微信这边用的是 protobuf 来进行 rpc 调用。所以有时候需要将 JS 中的 Number 类型转换为 Long 类型传给后端。目前用的最多的就是 Long.js 了&am…

设置UILabel可变高度(根据文本内容自动适应高度)

property(nonatomic)UILabel *showLabel;// 计算文本所占高度&#xff0c;计算出来之后设置label的高度// 第一个参数&#xff1a;字体大小&#xff0c;字体大小/样式影响计算字体的高度 // 第二个参数&#xff1a;CGSize结构体&#xff0c;结构体中第一个参数表示宽度&#xf…

励志英语谚语【二】

• All things in their being are good for something. • 天生我才必有用。 • Difficult circumstances serve as a textbook of life for people. • 困难坎坷是人们的生活教科书。 • Failure is the mother of success. -- Thomas Paine • 失败乃成功之母。 • For m…

AOP快速入门

一、概念 AOP面向切面编程&#xff0c;是函数式编程的延申&#xff0c;是对OOP的补充&#xff1b; 代理模式&#xff1a;拦截增强作用&#xff0c;增强功能&#xff1b; 1、java继承&#xff0c;纵向共性抽取&#xff0c; 2、横向切面AOP织入增强代码方式 二、原理是通过代理机…

图形大小_PS图形复制——等距复制、旋转复制、大小变换复制

PS中图形复制是很常见的事&#xff0c;可能不同人的习惯可能会用不同的方法。这里糖糖主要讲的是图形的一些等距复制、旋转复制、大小变换旋转复制&#xff0c;相信看过本篇文章之后你也可以通过图形的不同需要的复制做一些很不错的图案哦~糖糖先在PS里用钢笔工具绘制了一个绿叶…

在页面制作过程中需要注意事项

&#xff08;1&#xff09;静态页面.将信息页面和频道、网站首页改成静态页面&#xff0c;有利于搜索引擎更快更好地收录 &#xff08;2&#xff09;页面标题的关键词优化。必须列出信息的标题、网站的名称以及相关关键字 &#xff08;3&#xff09;<meta>标签优化。通过…