美文网首页
SheetJS 笔记

SheetJS 笔记

作者: 欢欣的膜笛 | 来源:发表于2024-01-09 20:18 被阅读0次

    用于前端操作Excel以及类似的二维表,js-xlsx是它的社区版本
    文档地址:https://docs.sheetjs.com/https://github.com/rockboom/SheetJS-docs-zh-CN
    安装
    npm install xlsx --save

    读取文件

    read

    • XLSX.read(data, options)
    • 解析数据 data,options 为可选参数

    readFile

    • XLSX.readFile(filename, options)
    • 读取指定的本地文件,仅适用于特定环境。它在浏览器中不起作用,options 为可选参数

    写入文件

    write

    • XLSX.write(wb, options)
    • 在基于浏览器的环境中,将尝试强制客户端下载
    • wb:工作簿对象
    • options:
      • type:输出数据编码
      • bookType: 导出文件的文件格式,若不传,则从文件扩展名推导出输出文件格式
      • sheet:单表格式的工作表名称
      • ......

    writeFile

    • XLSX.writeFile(wb, filename, options)
    • 在基于浏览器的环境中,将尝试强制客户端下载

    writeFileAsync

    • XLSX.writeFileAsync(filename, wb, options, cb)
    • 仅适用于 nodejs

    writeFileSync

    • XLSX.writeFileSync(wb, filename, options)
    • 仅适用于 nodejs

    utils Functions

    Arrays of Data

    aoa_to_sheet
    • 接受一个二维数组,并返回工作表,opts 为可选参数
    • const ws = XLSX.utils.aoa_to_sheet(aoe, opts)
    sheet_add_aoa
    • 将数组中的数据添加到现有工作表
    • XLSX.utils.sheet_add_aoa(ws, aoa, opts)
    /* Start from an empty worksheet */
    const ws = XLSX.utils.aoa_to_sheet([[]]);
      
    /* First row */
    XLSX.utils.sheet_add_aoa(ws, [ "SheetJS".split("") ], {origin: "A1"});
    
    /* Write data starting at A2 */
    XLSX.utils.sheet_add_aoa(ws, [[1,2], [2,3], [3,4]], {origin: "A2"});
    
    /* Write data starting at E2 */
    // r: row; c: column
    XLSX.utils.sheet_add_aoa(ws, [[5,6,7], [6,7,8], [7,8,9]], {origin:{r:1, c:4}});
    
    /* Append row */
    // 从第一列开始附加到工作表底部
    XLSX.utils.sheet_add_aoa(ws, [[4,5,6,7,8,9,0]], {origin: -1});
    
    json_to_sheet
    • 接受一个对象数组,并返回工作表,opts 为可选参数
    • const ws = XLSX.utils.json_to_sheet(aoo, opts)
    • opts
      • header:使用字段的顺序(默认 Object.keys)
      • skipHeader:默认 false,若为 true,则输出不含标题行
      • ......
    const aoo = [
        { Name: "Bill Clinton", Index: 42 },
        { Name: "GeorgeW Bush", Index: 43 },
        { Name: "Barack Obama", Index: 44 },
        { Name: "Donald Trump", Index: 45 },
        { Name: "Joseph Biden", Index: 46 }
      ]
      const ws = XLSX.utils.json_to_sheet(aoo)
    
    sheet_add_json
    • 将数组中的数据添加到现有工作表
    • XLSX.utils.sheet_add_json(ws, aoo, opts)
    sheet_to_json
    • 输出对象数组
    • const arr = XLSX.utils.sheet_to_json(ws, opts)

    HTML

    sheet_to_html
    • 传入工作表,输出 HTML 表格
    • const html = XLSX.utils.sheet_to_html(ws, opts)
    table_to_book、table_to_sheet
    • 从 TABLE 元素创建工作表或工作簿
    const wb = XLSX.utils.table_to_book(document.getElementById('table'))
    const ws = XLSX.utils.table_to_sheet(document.getElementById('table'))
    
    sheet_add_dom
    • 将数据从 TABLE 元素添加到现有工作表
    • XLSX.utils.sheet_add_dom(ws, elt, opts)

    CSV and Text

    sheet_to_csv
    • 生成CSV文件
    • const csv = XLSX.utils.sheet_to_csv(ws, opts)
    sheet_to_txt
    • 生成UTF16的格式化文本
    • const txt = XLSX.utils.sheet_to_txt(ws, opts)

    Array of Formulae

    sheet_to_formulae
    • 从工作表中提取所有公式
    • const fmla_arr = XLSX.utils.sheet_to_formulae(ws);

    Workbook Helpers

    book_new
    • 创建工作簿
    • const workbook = XLSX.utils.book_new()
    book_append_sheet
    • 将工作表附加到工作簿
    • XLSX.utils.book_append_sheet(workbook, worksheet, sheet_name);

    单元格操作

    转换单元格地址

    • 单元格地址对象的存储格式为{c:C, r:R},其中C和R分别代表的是索引列和行号,均从 0 开始
    const cell1 = XLSX.utils.encode_cell({c:0, r:0}) // 返回 A1
    const cell2 = XLSX.utils.decode_cell('A1') // 返回 {c:0, r:0}
    
    // 获取单元格对象
    const cell = worksheet['A1'] // 含 数据类型、值、格式、公式、样式等等
    

    转换行地址

    • encode_row / decode_row 在0索引行和1索引行之间转换
    转换列地址
    • encode_col / decode_col 在0索引列和列名之间转换
    const col1 = XLSX.utils.encode_col(3) // 返回 D
    const col2 = XLSX.utils.decode_col('D') // 返回 索引 3
    

    生成文本类型的单元格值

    • format_cell 生成文本类型的单元格值(使用数字格式)。
      转换单元格的范围
    • encode_range / decode_range

    合并单元格

    // s = start, r = row, c=col, e= end
    worksheet.merge = [{ s: { r: 0, c: 0 }, e: { r: 0, c: c } }]
    

    配置超链接

    • 超链接存储在单元格对象的l关键字内
    worksheet['A3'].l = { Target:"http://sheetjs.com", Tooltip:"Find us @ SheetJS.com!" }
    worksheet['A2'].l = { Target:"#E2" }; /* link to cell E2 */
    

    单元格注释

    • 单元格注释存储在单元格对象的c数组内
    if(!worksheet.A1.c) worksheet.A1.c = [];
    worksheet.A1.c.push({a:"SheetJS", t:"This comment is visible"});
    
    if(!worksheet.A2.c) worksheet.A2.c = [];
    worksheet.A2.c.hidden = true;
    worksheet.A2.c.push({a:"SheetJS", t:"This comment will be hidden"});
    

    数据表对象

    worksheet['!ref']

    • 表示数据表的范围。例如 "A1:D5"

    worksheet['!margins']

    • 表示页面的边距

    worksheet['!merges']

    • 设置的合并单元格配置,若未设置,则为 undefined

    工作簿对象

    workbook.SheetNames

    • 所有 sheet 的 name 的集合

    workbook.Sheets[sheetname]

    • 返回一个表示工作表的对象

    相关文章

      网友评论

          本文标题:SheetJS 笔记

          本文链接:https://www.haomeiwen.com/subject/zseandtx.html