跳至正文
Wener Notes

SheetJS

约 2 分钟阅读
标签:JavaScript
bash
pnpm add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz
# pnpm add https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz # for latest
  • 推荐使用 dense 模式

CE 版本限制

types

TypeScript
// b Boolean, n Number, e error, s String, d Date, z Stub
export type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd' | 'z';
export interface Comments extends Array<Comment> {
  /** Hide comment by default */
  hidden?: boolean;
}
export interface Hyperlink {
  /** Target of the link (HREF) */
  Target: string;
  /** Plaintext tooltip to display when mouse is over cell */
  Tooltip?: string;
}
export type NumberFormat = string | number;

/** 工作表单元格对象 */
export interface CellObject {
  /**
   * 单元格的Excel数据类型。
   * b Boolean, n Number, e Error, s String, d Date, z Empty
   */
  t: ExcelDataType;
  /** 单元格的原始值。如果指定了公式,可以省略 */
  v?: string | number | boolean | Date;

  /** 格式化文本(如果适用) */
  w?: string;

  /** 单元格公式(如果适用) */
  f?: string;

  /** 如果公式是数组公式,包围数组的范围(如果适用) */
  F?: string;

  /** 如果为true,单元格是动态数组公式(对于支持的文件格式) */
  D?: boolean;

  /** 富文本编码(如果适用) */
  r?: any;

  /** 富文本的HTML渲染(如果适用) */
  h?: string;

  /** 与单元格关联的注释 */
  c?: Comments;

  /** 与单元格关联的数字格式字符串(如果需要) */
  z?: NumberFormat;

  /** 单元格超链接对象(.Target保存链接,.tooltip是工具提示) */
  l?: Hyperlink;

  /** 单元格的样式/主题(如果适用) */
  s?: any;
}
json
{
  "t": "s",
  "v": "保 管\n期 限",
  "r": "<t>保 管&#10;期 限</t>",
  "h": "保 管<br/>期 限",
  "w": "保 管\n期 限"
}
  • v 范围 0~60000
  • v 如果包含小数点,则包含时间部分
  • 如果 cellDates=true, 则 v 会被转换为 Date

Date

TypeScript
if (!wb?.Workbook?.WBProps?.date1904) {
  /* uses 1904 date system */
} else {
  /* uses 1900 date system */
}
json
{
  "t": "n",
  "v": 44234,
  "w": "2/7/21"
}

Common Spreadsheet Format

  • docs.sheetjs.com/docs/csf
  • 4 种类型 sheet
    • worksheets
    • chartsheets - !type=chart
    • macrosheets - !type=macro
    • dialogsheets - !type=dialog
  • A1-style
  • dense 模式 - 影响 sheet 在内存的存储方式
    • cells 存储为 AoA - Array of Arrays
    • 数据量大的时候更节省内存
    • sheet["!data"][R][C]
    • sheet["B7"] -> sheet["!data"]?.[6]?.[1]
    • 特殊 key
      • !ref - A1:B7
      • !merges - 合并单元格
      • !cols - 列宽
      • !rows - 行高
      • !autofilter - 自动筛选
      • !outline - 分组
      • !protect - 保护
  • XLSX.utils.decode_cell(addr) -> {r,c}

关联信息

反向链接、本文链接的其他页面和外部资料。

反向链接

  • Document Awesome
    笔记 · SheetJS/sheetjs

    WOPI - Web Application Open Platform Interface Protocol · https://docs.microsoft.com/en-us/microsoft-365/cloud-storage-partner-program/rest/

参考资料

GitHub6 条
其他外链6 条
最近更新commit ed3adbf编辑