SheetJS 社区版提供了经过实战检验的开源解决方案,用于从几乎任何复杂的电子表格中提取有用数据,并生成能够兼容旧版与现代软件的新电子表格。
SheetJS Pro 提供的解决方案不仅限于数据处理:轻松编辑复杂模板;发挥您的创意进行样式设计;制作包含图片/图表/数据透视表的自定义工作表;评估公式表达式并将计算移植到 Web 应用;自动化常见电子表格任务,以及更多功能!
支持的文件格式


独立浏览器脚本
完整的浏览器独立构建版本保存为 dist/xlsx.full.min.js,可以直接通过 script 标签添加到页面中:```html
<details>
<summary><b>CDN 可用性</b>(点击显示)</summary>
| CDN | URL |
|-----------:|:-------------------------------------------|
| `unpkg` | <https://unpkg.com/xlsx/> |
| `jsDelivr` | <https://jsdelivr.com/package/npm/xlsx> |
| `CDNjs` | <https://cdnjs.com/libraries/xlsx> |
例如,`unpkg` 将最新版本提供在:```html
<script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script>
完整单文件版本生成于 dist/xlsx.full.min.js
dist/xlsx.core.min.js 省略了代码页库(不支持 XLS 编码)
更精简的构建版本生成于 dist/xlsx.mini.min.js。与完整构建相比:
使用 bower:```bash $ bower install js-xlsx
**ECMAScript 模块**
ECMAScript 模块构建保存为 `xlsx.mjs`,可以直接通过使用 `type=module` 的 `script` 标签添加到页面中:```html
<script type="module">
import { read, writeFileXLSX } from "./xlsx.mjs";
/* load the codepage support library for extended support with older formats */
import { set_cptable } from "./xlsx.mjs";
import * as cptable from './dist/cpexcel.full.mjs';
set_cptable(cptable);
</script>
npm 包也通过 module 参数暴露模块,在 Angular 和其他项目中被支持:```ts
import { read, writeFileXLSX } from "xlsx";
/* load the codepage support library for extended support with older formats */ import { set_cptable } from "xlsx"; import * as cptable from 'xlsx/dist/cpexcel.full.mjs'; set_cptable(cptable);
**Deno**
`xlsx.mjs` 可以在 Deno 中导入。它可以从 `unpkg` 获取:```ts
// @deno-types="https://unpkg.com/xlsx/types/index.d.ts"
import * as XLSX from 'https://unpkg.com/xlsx/xlsx.mjs';
/* load the codepage support library for extended support with older formats */
import * as cptable from 'https://unpkg.com/xlsx/dist/cpexcel.full.mjs';
XLSX.set_cptable(cptable);
NodeJS
使用 npm:```bash $ npm install xlsx
默认情况下,该模块支持 `require`:```js
var XLSX = require("xlsx");
该模块还附带 xlsx.mjs,用于与 import 一起使用:```js
import * as XLSX from 'xlsx/xlsx.mjs';
/* load 'fs' for readFile and writeFile support */ import * as fs from 'fs'; XLSX.set_fs(fs);
/* load 'stream' for stream support */ import { Readable } from 'stream'; XLSX.stream.set_readable(Readable);
/* load the codepage support library for extended support with older formats */ import * as cpexcel from 'xlsx/dist/cpexcel.full.mjs'; XLSX.set_cptable(cpexcel);
**Photoshop 和 InDesign**
`dist/xlsx.extendscript.js` 是面向 Photoshop 和 InDesign 的 ExtendScript 构建版本,
包含在 `npm` 包中。可以通过 `#include` 指令直接引用:```extendscript
#include "xlsx.extendscript.js"
为了与JavaScript引擎广泛兼容,该库使用ECMAScript 3语言方言以及一些ES5特性(如Array#forEach)编写。旧版浏览器需要shim来提供缺失的函数。
要使用shim,请在加载xlsx.js的脚本标签之前添加shim:```html
该脚本还包含了 `IE_LoadFile` 和 `IE_SaveFile`,用于在 Internet Explorer 6-9 中加载和保存文件。`xlsx.extendscript.js` 脚本以适合 Photoshop 和其他 Adobe 产品的格式捆绑了该垫片。
</details>
### 用法
大多数涉及电子表格和数据的场景可以分解为 5 个部分:
1) **获取数据**:数据可以存储在任何地方:本地或远程文件、数据库、HTML TABLE,甚至可以在网页浏览器中通过编程生成。
2) **提取数据**:对于电子表格文件,这涉及解析原始字节以读取单元格数据。对于一般的 JS 数据,这涉及重塑数据。
3) **处理数据**:从生成汇总统计到清理数据记录,这一步是问题的核心。
4) **打包数据**:这可以包括制作新的电子表格、使用 `JSON.stringify` 序列化、编写 XML,或者仅仅为 UI 工具展平数据。
5) **发布数据**:电子表格文件可以上传到服务器或本地写入。数据可以通过 HTML TABLE 或数据网格呈现给用户。
一个常见的问题是,如何从存储在 HTML 表格中的数据生成有效的电子表格导出。在此示例中,将抓取页面上的 HTML TABLE,在底部添加包含报告日期的行,然后生成一个新文件并尝试本地下载。`XLSX.writeFile` 负责打包数据并尝试本地下载:```js
// Acquire Data (reference to the HTML table)
var table_elt = document.getElementById("my-table-id");