Skip to main content

SheetJS

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
tip
  • 推荐使用 dense 模式

types

// b Boolean, n Number, e error, s String, d Date, z Stub
export type ExcelDataType = 'b' | 'n' | 'e' | 's' | 'd' | 'z';
/** 工作表单元格对象 */
export interface CellObject {
/** 单元格的原始值。如果指定了公式,可以省略 */
v?: string | number | boolean | Date;

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

/**
* 单元格的Excel数据类型。
* b Boolean, n Number, e Error, s String, d Date, z Empty
*/
t: ExcelDataType;

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

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

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

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

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

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

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

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

/** 单元格的样式/主题(如果适用) */
s?: any;
}

Common Spreadsheet Format

  • https://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}