js-xlsx 官方文档:https://sheetjs.gitbooks.io/docs/#sheetjs-js-xlsx

npm xlsx地址:https://www.npmjs.com/package/xlsx

官网:https://sheetjs.com/opensource

首先进行安装或引入:


在浏览器中,只需添加脚本标记:
<script lang="javascript" src="dist/xlsx.full.min.js"></script> 使用 npm:
$ npm install xlsx 使用bower:
$ bower install js-xlsx
import * as XLSX from 'xlsx';  // 数据导出导入所需要的依赖

以angular为例:

exportExcle() {

       // 使用 XLSX.utils.aoa_to_sheet(excleData);
// const excleData = [
// ['周一', '周二', '周三', '周四', '周五'],
// ['语文', '数学', '历史', '政治', '英语'],
// ['数学', '数学', '政治', '英语', '英语'],
// ['政治', '英语', '历史', '政治', '数学'],
// ]; // 使用 XLSX.utils.json_to_sheet(excleData);
const excleData = [
{周一: '语文', 周二: '数学', 周三: '历史', 周四: '政治', 周五: '英语'},
{周一: '数学', 周二: '数学', 周三: '政治', 周四: '英语', 周五: '英语'},
{周一: '政治', 周二: '英语', 周三: '历史', 周四: '政治', 周五: '数学'},
]; // 设置表格样式,!cols为列宽
const options = {
'!cols': [
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
{ wpx: 100 },
]};
// 制作工作表的方式有很多种,以数组和对象为例
// const worksheet: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(excleData);
const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(excleData); // 使用指定的单元格作为起点插入数据,r:行, c:列,详情看官网文档
// XLSX.utils.sheet_add_aoa(worksheet, [[“数学”,“语文”], [“政治”,“语文”], [“历史”,“政治”], ], {origin: {r: 2, c: 5}});
worksheet['!cols'] = options['!cols']; // 新建一个工作簿
const workbook: XLSX.WorkBook = XLSX.utils.book_new(); /* 将工作表添加到工作簿*/
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
/* 输出工作表, 由文件名决定的输出格式*/
XLSX.writeFile(workbook, '排庭表.xlsx');
}

 

js-xlsx 只能设置,行宽等简单的颜色, 设置背景色,自动换行等样式(也就是cell.s 这个属性)暂不支持, 他的pro版收费, 但是支持多种样式设置;

设置样式可以使用 xlsx-style : https://github.com/protobi/js-xlsx/tree/beta#readme

 

xlsx-style 报错
1. 如果引入xlsx-style的话可能会报错:
This relative module was not found:
./cptable in ./node_modules/xlsx-style@0.8.13@xlsx-style/dist/cpexcel.js

在\node_modules\xlsx-style\dist\cpexcel.js  

var cpt = require(’./cpt’ + ‘able’);  改为   var cpt = cptable; 
 
3. Can't resolve 'fs' in '/node_modules/xlsx-style/ods.js'
 
 
在 ads.js 改

if(typeof XLSX !== 'undefined') return XLSX.utils;
if(typeof module !== "undefined" && typeof require !== 'undefined')
{
try
{
return require('./' + 'xlsx').utils;
}
catch(e)
{
try
{
return require('./' + 'xlsx').utils;
}
catch(ee)
{
return require('./xlsx').utils;
}
}
throw new Error("Cannot find XLSX utils");
};

2. Can't resolve '../xlsx' in '/node_modules/xlsx-style'

exceljs

另一种 生成表格的插件 : https://github.com/exceljs/exceljs/blob/master/README_zh.md

安装:

npm install exceljs

导入 :

// import * as Excel from 'exceljs';
// const Excel = require('exceljs');
import * as Excel from 'exceljs/dist/exceljs.min.js'; 
 
可以配合   file-saver 使用
npm install file-saver --save
此外,还可以通过以下方式安装TypeScript定义:
npm install @types/file-saver --save-dev
 
 import * as FileSaver from 'file-saver';   // 浏览器读取本地的文件已经保存文件所需要的依赖。
 
如果运行时报错:
Unhandled promise rejection Error: Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.
Most likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded.
If you must load one, do so before loading zone.js.) ;
 
解决方法:
将polyfills.ts中的“import 'zone.js/dist/zone';”移至main.ts。
 
如果还报错; 就把   import 'exceljs/dist/exceljs.min.js';  加进  polyfills.ts 中
 
Cannot find name 'require'
解决方法: 

npm install @types/node --save-dev

tsconfig.json 中添加
{ "compilerOptions": { "types": ["node"] }}

demo

    exportExcle() {

        const excleData = [
['周一', '周二'],
['语文', '数学'],
['数学', '英语'],
];
const workbook = new Excel.Workbook();
const sheet = workbook.addWorksheet('Sheet1');
sheet.addRows(excleData);
sheet.eachRow((row, rowNumber) => {
row.eachCell((cell, colNumber) => {
// 对齐样式
if (rowNumber === 1 || colNumber === 1) {
cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true };
} else {
cell.alignment = { vertical: 'top', horizontal: 'left', wrapText: true };
}
// 边框
cell.border = {
top: { style: 'thin' },
left: { style: 'thin' },
bottom: { style: 'thin' },
right: { style: 'thin' },
};
// 设置列宽
sheet.getColumn(colNumber).width = 25;
// sheet.getColumn(colNumber).width = 25;
});
});
sheet.getRow(1).height = 30;
workbook.xlsx.writeBuffer()
.then((buffer) => {
// done
this.saveAsExcelFile(buffer, '课表');
});
}
saveAsExcelFile(buffer: any, fileName: string) {
const data: Blob = new Blob([buffer], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'
});
FileSaver.saveAs(data, fileName + '.xlsx');
}

SheetJS js-xlsx 的使用, exceljs的更多相关文章

  1. 在浏览器上打开、预览Excel xlsx表格文件

    现在的HTML5,有了FileReader文件读写API, 真是让javascript的能力大幅提升. 解析zip压缩文件.解析Excel xlsx 表格文档各种文件预览,实现起来也有了可能性,以前的 ...

  2. node.js、js读取excel、操作excel、创建excel之js-xlsx.js

    node.js篇 第一步引入包 npm install xlsx -save 第二步使用 var xl =require('xlsx'); //workbook 对象,指的是整份 Excel 文档.我 ...

  3. 一次vue-cli 2.x项目打包优化经历(优化xlsx插件)

    一.分析各模块打包后大小 用vue-cli创建的项目,已经集成 webpack-bundle-analyzer.详见文件 build/webpack.prod.conf.js,代码如下: if (co ...

  4. 十七 bootstrap-table tableExport 导出xlsx格式表格

    原文:十七 bootstrap-table tableExport 导出xlsx格式表格 在[十六.bootstrap-table javascript导出数据]中,打开导出的表格时,总会弹出一个提示 ...

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

    简介 SheetJS是前端操作Excel以及类似的二维表的最佳选择之一,而js-xlsx是它的社区版本. js-xlsx将注意力集中到了数据转换和导出上,所以它支持相当多种类的数据解析和导出.不仅仅局 ...

  6. PHP配合JS导出Excel大量数据

    一般使用PHP导出Excel表格都会用PHPExcel,但是当遇到要导出大量数据时,就会导致超时,内存溢出等问题.因此在项目中放弃使用这种方式,决定采用前段生成Excel的方式来解决问题. 步骤如下: ...

  7. js 解析本地Excel文件!

    通常,一般读取Excel都是由后台来处理,不过如果需求要前台来处理,也是可以的.. 1.需要用到js-xlsx,下载地址:js-xlsx 2.demo: <!DOCTYPE html>&l ...

  8. xlsx导入成--json

    这两天遇到大难题了,就是这个   xlsx   导入问题,之前用的xlsx.full.min.js,写的导入,结果不兼容ie浏览器,研究这个也好长时间,网上居然还没有搜到合适的,自己写从xlsx官网上 ...

  9. xlsx 库 知识点

    官方github地址:https://github.com/SheetJS/js-xlsx xlsx 用webpack打包后体积太大: vue-cli构建的项目,优化办法:https://segmen ...

随机推荐

  1. 【Druid】-Druid数据源加密数据库密码配置

    1.数据库配置文件添加配置 <property name="filter" value="config"> <property name=&q ...

  2. C# 跨线程访问控件(MethodInvoker)

    参考:https://www.cnblogs.com/lvdongjie/p/5428815.html .Net 通常禁止跨线程访问控件,设置Control.CheckForIllegalCrossT ...

  3. JS如何设置和获取盒模型对应的宽和高

    ㈠方式一:通过DOM节点的 style 样式获取  dom.style.width/height  只能获取使用内联样式的元素的宽和高. <!DOCTYPE html> <html ...

  4. C# 动态访问webserver 帮助类

    /* 调用方式 * string url = "http://www.webservicex.net/globalweather.asmx" ; * string[] args = ...

  5. Log4net日志文件自动按月份存放和日志独占问题的解决

    让log4net日志文件自动按月份存放 log4net日志文件的作用还真不小,可以保存管理员.用户对数据库的任何操作,保存管理员和用户的登录记录,分析系统运行错误,所以不舍得随便将日志文件Delete ...

  6. Fastdfs 单机安装 教程

    分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群 详细的最新版fastdfs单机版搭建 分布式文件系统 - FastDFS 在64位CentOS 下配置安装部署

  7. Acwing:102. 最佳牛围栏(前缀和 + 二分)

    农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...

  8. 兼容pc端和移动端的轮播图插件 swiper.js

    swiper.js是一款纯JavaScript打造的滑动特效插件,可以用来实现检点轮播图,tab触摸滑动切换等常用效果.下载地址:https://www.swiper.com.cn/download/ ...

  9. 当 LAST_INSERT_ID() 带有参数时# 清空重来

    [root@yejr.me]> truncate table t; # 插入1条新记录[root@yejr.me]> insert into t select 0,rand()*1024; ...

  10. vue中bus.$on事件被多次绑定

    问题描述:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发 解决办法一:在每次调用方法前先解绑事件( bus.$off ),然后在重新绑定( bus.$on ) b ...