框架和捆绑包

每个独立的发布包都可以在 https://cdn.sheetjs.com/ 下载。NodeJS 包被设计用于框架和捆绑包。这是一个适当的 ECMAScript 模块版本,可以用开发工具进行优化。

Https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz 是版本0.20.0的网址

安装

可以使用包管理器直接安装 Tarball:

npm 安装 npm i --save https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz

pnpm 安装 pnpm install https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz

Yarn 安装 yarn add https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz

安装完成后,可以用 xlsx 名称导入库:

import { read, writeFileXLSX } from "xlsx";

“Bundlers” 演示包括特定工具的示例。

SNYK BUG Snyk 安全工具可能会报告涉及“原型污染”的错误:

原型污染〔中度污染〕〔 https://security.snyk.io/vuln/snyk-js-xlsx-5457926〕

正如 Snyk 报告中指出的:

这个问题在0.19.3版本中得到了解决

Snyk 错误地报告了漏洞,这是 Snyk 工具中的一个 bug。

在 Snyk 修复这些错误之前,官方建议禁止发出警告。

遗留终端

从技术上讲,公共 npm 仓库中的旧版本可以使用 xlsx,但是仓库已经过时了。该仓库的最新版本是0.18.5

这是一个已知的注册表错误

SheetJS CDN https://CDN.SheetJS.com/是 SheetJS 模块的权威来源。

对于现有的项目,最简单的方法是卸载和重新安装:

yarn

  1. yarn remove xlsx
  2. yarn add https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz

pnpm

  1. pnpm rm xlsx
  2. pnpm install https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz

npm

  1. npm rm --save xlsx
  2. npm i --save https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz

当 xlsx 库是依赖项的依赖项时,package.json 中的覆盖字段可以控制模块解析:

package.json

  1. {
  2. "overrides": {
  3. "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz"
  4. }
  5. }

第三方包

对于一般的稳定性,“vendor” 模块是推荐的方法:

1)下载所需版本的 tarball (xlsx-0.20.0. tgz) ,当前版本可在 https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz 下载

2)在项目的根目录下创建一个供应商子文件夹,并将 tarball 移动到该文件夹。将其添加到项目存储库中。

3)使用包管理器安装 tarball:

npm npm i --save file:vendor/xlsx-0.20.0.tgz

pnpm pnpm install file:vendor/xlsx-0.20.0.tgz

Yarn yarn add file:vendor/xlsx-0.20.0.tgz

这个包将安装为 xlsx 并可以直接使用。

使用

对于大多数框架和捆绑包工具,建议使用命名导入:

import { read, utils } from 'xlsx';

一些遗留的捆绑包需要 glob 导入:

  1. import * as XLSX from 'xlsx';
  2. const { read, utils } = XLSX;

对于支持 CommonJS 的遗留捆绑包,将需要:

  1. var XLSX = require("xlsx");
  2. var read = XLSX.read, utils = XLSX.utils;

“Bundlers” 演示包括特定工具的示例。

动态 import

带 import() 的动态导入只在需要时下载脚本。

动态导入将始终下载导入脚本的完整内容! 这是 ECMAScript 模块的一个设计缺陷

强烈建议使用包装器脚本来导入和重新导出 SheetJS 库中用于特定函数或页面的部分:

SheetJSWriteWrapper.js (wrapper script)

  1. /* This wrapper pulls `writeFileXLSX` and `utils` from the SheetJS library */
  2. import { utils, writeFileXLSX } from "xlsx";
  3. export { utils, writeFileXLSX };

包装器脚本的动态导入只会加载请求的特性:

  1. async function export_data() {
  2. /* dynamically import the SheetJS Wrapper */
  3. const XLSX = await import ("./SheetJSWriteWrapper");
  4. const wb = XLSX.utils.book_new();
  5. const ws = XLSX.utils.aoa_to_sheet([["a","b","c"],[1,2,3]]);
  6. XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  7. XLSX.writeFileXLSX(wb, "SheetJSDynamicWrapperTest.xlsx");
  8. }

编码支持

如果需要编码支持,则必须手动导入 cpexcel.full.mjs:

  1. /* load the codepage support library for extended support with older formats */
  2. import { set_cptable } from "xlsx";
  3. import * as cptable from 'xlsx/dist/cpexcel.full.mjs';
  4. set_cptable(cptable);