前端 excelex 包可将数据保存为 xls、xlsx、csv、txt 文件(支持单元格样式、合并单元格等)

简介: 前端 excelex 包可将数据保存为 xls、xlsx、csv、txt 文件(支持单元格样式、合并单元格等)

一、简介

  • 老文章地址
  • 该库是一个轻量级的 JavaScript 库,帮助开发人员轻松地将数据导出到 Excel 文件中。它具有简单易用的 API,支持 XLSX、XLS、CSV、TXT 格式导出。此外还提供了丰富的样式配置选项,使用户可以自定义导出文件的格式和样式,能为你提供高效、可靠、美观的数据导出功能。
  • 案例效果


二、使用

  • 安装
$ npm i excelex
  • 引入
import * as Ex from "excelex";
  • 使用(将下面代码,放入导出事件函数中,调用即可!更换为自己的数据源与列对应的 key
// 需要导出的数据
const dataSource = [
  {
    id: 1,
    name: "1",
    info: {
      num: 10,
    },
  },
  {
    id: 2,
    name: "2",
    time: "2015/12/20",
  },
  {
    id: 3,
    name: "3",
  },
];
// Excel 列头
const columns = [
  {
    name: "ID", // 非必填,如果不需要第一行有标题,则所有列 name 全空就行
    field: "id",
  },
  {
    name: "标题",
    field: "name",
  },
  {
    name: "数字",
    field: "info.num",
  },
  {
    name: "日期",
    field: "time",
  },
];
// sheets 数据源
const sheets = [
  {
    name: "Sheet1", // 非必填
    data: dataSource,
    columns: columns,
  },
  {
    name: "Sheet2",
    data: dataSource,
    columns: columns,
  },
];
// 导出数据
Ex.ex(sheets);
// 自定义 (除了 sheets,都是非必填,文件名可以传 null)
// Ex.ex(sheets, (item, field, json, sheetIndex, row, col, rowCount, colCount) => {
//   return item
// }, '指定文件名', 'xls')

三、进阶使用

  • 进阶介绍
// 需要导出的数据
const dataSource = [
  {
    id: 1,
    name: "1",
    // 默认支持 children 子层级导出
    children: [
      {
        id: 2,
        name: "1-2",
        // 默认支持 children 子层级嵌套导出,以此内推可以一直嵌套 children
        children: [
          {
            id: 3,
            name: "1-3",
          },
        ],
      },
      {
        id: 4,
        name: "1-4",
        info: {
          num: 10,
        },
      },
    ],
  },
  {
    id: 5,
    name: "5",
    // 日期格式支持 xxxx/xx/xx、xxxx-xx-xx、xxxx~xx~xx、xxxx年xx月xx日
    time: "2015/12/20",
  },
  {
    id: 6,
    name: "6",
  },
];
// Excel 列头
const columns = [
  {
    name: "ID",
    field: "id",
    // (可选)单元格样式
    style: {
      // 列宽
      colWidth: 100,
    },
  },
  {
    name: "标题",
    field: "name",
  },
  {
    name: "数字",
    // 多层级取值展示到 excel
    // 例如:{ id: 1, info: { num: 10 } }  = 'info.num'
    // 例如:{ id: 1, info: { detail: { num: 10 } } }  = 'info.detail.num'
    field: "info.num",
  },
  {
    name: "日期",
    field: "time",
    // 日期格式如果需要再表格中支持时间编辑,需要指定 dataType 为 Date,不指定按字符串展示
    dataType: "Date",
  },
];
// 将要保存的 sheets 数据源
const sheets = [
  {
    // 单个 sheet 名字
    name: "Sheet1",
    // 单个 sheet 数据源
    data: dataSource,
    // 单个 sheet 列名称与读取key
    columns: columns,
  },
  {
    // 单个 sheet 名字
    name: "Sheet2",
    // 单个 sheet 数据源
    data: dataSource,
    // 单个 sheet 列名称与读取key
    columns: columns,
  },
];
// 导出数据
// Ex.ex(sheets)
Ex.ex(
  sheets,
  (item, field, json, sheetIndex, row, col, rowCount, colCount) => {
    return item;
  },
  "指定文件名",
  "xls"
);
  • Column 列中 Style 字段支持的样式属性
style: {
  // (可选)样式属性是否支持标题使用,默认 false
  supportTitle: true,
  // (可选)字体颜色
  color: '#00ff00',
  // (可选)字体大小
  fontSize: 12,
  // (可选)字体名称
  fontName: '宋体',
  // (可选)字体加粗:0 | 1
  fontBold: 1,
  // (可选)内容横向排版:Left、Center、Right
  alignmentHor: 'Center',
  // (可选)内容竖向排版:Top、Center、Bottom
  alignmentVer: 'Center',
  // (可选)背景颜色
  backgroundColor: '#FF0000',
  // (可选)行高,一行多列单元格,会取有行高值的最后一列使用,所以只要行高一样,可任意在一列设置行高,如果值不一样以最后有值的一列为准(单位:磅)
  // rowHeight: 100,
  // (可选)列宽,一列多行单元格,固定取每列的 0 行位置单元格列宽,目前与横向合并单元格存在定位冲突,也就是暂时不支持横向合并单元格时使用列宽属性(单位:磅)
  // colWidth: 100,
  // (可选)单元格边框颜色
  // 支持空格分开进行单边设置 borderColor: '#00ff00 #00ff00 #00ff00 #00ff00',如果进行单边设置,没设置的边不显示,默认 #000000
  borderColor: '#00ff00',
  // (可选)单元格边框宽度
  // 支持空格分开进行单边设置 borderWidth: '1 2 1 2',如果进行单边设置,没设置的边不显示
  borderWidth: 1,
  // (可选)单元格边框显示位置:Left、Top、Right、Bottom
  // 支持空格分开进行单边设置 borderPosition: 'Left Top Right Bottom',支持空格分开进行单边设置,没设置的边不显示,默认:(空 || '' === borderPosition: 'Left Top Right Bottom')
  borderPosition: '',
  // (可选)单元格边框样式:Continuous、Dash、Dot、DashDot、DashDotDot、Double,默认 Continuous
  // 支持空格分开进行单边设置 borderStyle: 'Continuous Dash Dot DashDot',如果进行单边设置,没设置的边不显示
  borderStyle: 'Continuous',
  // (可选)合并单元格列表(row 不传则为每行,也可以放到数组底部,作为通用行使用,如果放到数组第0位,会直接使用这个通用样式,后面的样式不会在被使用上)
  merges:[
    {
      // (可选)合并单元格从该字段这一列的第几行开始,索引从 0 开始,不传则为每行,为该列通用行
      row: 1,
      // (可选)横向合并几列单元格,默认 0 也就是自身
      // hor: 2,
      // (可选)竖向合并几行单元格,默认 0 也就是自身,竖向合并有个小细节,就是合并的几个单元格数据要一致,横向合并没这个问题
      ver: 1
    },
    {
      // 通用合并模板:相当于所有没有指定 row 的行都使用通用合并模板
      // (可选)合并单元格从该字段这一列的第几行开始,索引从 0 开始,不传则为每行
      // row: 3
      // (可选)横向合并几列单元格,默认 0 也就是自身
      // hor: 3
      // (可选)竖向合并几行单元格,默认 0 也就是自身,竖向合并有个小细节,就是合并的几个单元格数据要一致,横向合并没这个问题
      ver: 1
      // ver: 1
    }
  ]
}

四、扩展介绍

  • 导出函数
函数 说明
Ex.ex(sheets: SheetArray, beforeWrite?: BeforeWrite, fileName?: string, fileSuffix?: FileSuffix) 将数据导出到 Excel 文件中
Ex.write(sheets: SheetArray, beforeWrite?: BeforeWrite, fileName?: string, fileSuffix?: FileSuffix) 将数据导出到 Excel 文件中
Ex.Export(sheets: SheetArray, beforeWrite?: BeforeWrite, fileName?: string, fileSuffix?: FileSuffix) 将数据导出到 Excel 文件中
以上 3 种导出函数结果均一致,只是方法别名不同。
  • 数据类型
// Json 约束
export type JsonObject = { [key: string]: JsonValue }
// Json 数组约束
export type JsonArray = Array<JsonValue>
// Value 约束
export type JsonValue = string | number | boolean | null | undefined | JsonObject | JsonArray
// Column 数组约束
export type ColumnArray = Array<Column>
// Sheet 数组约束
export type SheetArray = Array<Sheet>
// 数据类型
export enum DataType {
  // 默认自动识别(内部自动识别)
  auto = 'undefined',
  // 日期类型(有特殊处理,转为表格时间格式,需要在表格中支持时间格式时,需指定,否则当字符串展示)
  // 日期格式支持 xxxx/xx/xx、xxxx-xx-xx、xxxx~xx~xx、xxxx年xx月xx日
  date = 'Date',
  // 数字类型(有特殊处理,超过 11 位会转为字符串)
  number = 'Number'
}
// 文件后缀类型
export enum FileSuffix {
  xls = 'xls',
  xlsx = 'xlsx',
  csv = 'csv',
  txt = 'txt'
}
// Column 约束
export interface Column {
  // 列名
  name: string,
  // 列 key
  field: string,
  // 列数据类型
  dataType?: DataType | string,
  // 列样式
  style?: JsonObject
}
// Sheet 约束
export interface Sheet {
  // 名字
  name: string,
  // 数据源
  data: JsonArray
  // 列对应的 名称 key,用于从数据源中获取数据
  columns: ColumnArray
}
// 写入之前回调
export type BeforeWrite = (
  // 单元格数据
  item: JsonObject,
  // 单元格字段 key
  field: string,
  // 单元格原始数据
  json: object,
  // 第几个 sheet
  sheetIndex: number,
  // 第几行
  row: number,
  // 第几列
  col: number,
  // 当前 sheet 总共多少行
  rowCount: number,
  // 当前 sheet 总共多少列
  colCount: number
  // 返回数据约束
) => JsonObject
// 导出函数
export function Export(
  // sheet 数组
  sheets: SheetArray,
  // 写入之前回调
  beforeWrite?: BeforeWrite,
  // 文件名
  fileName?: string,
  // 文件后缀,默认 xls
  fileSuffix?: FileSuffix | string
  // 无返回数据
): void
// 别名
export {
  Export as ex,
  Export as write
}
相关文章
|
23天前
|
前端开发 JavaScript Java
前端限制打包文件数量
前端限制打包文件数量
166 65
|
7天前
|
前端开发
前端引入字体文件
文章介绍了如何在前端项目中引入字体文件,并展示了具体的HTML和CSS代码示例,包括如何使用`@font-face`规则来定义字体和在页面中应用自定义字体。
23 1
前端引入字体文件
|
8天前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
15 2
前端JS读取文件内容并展示到页面上
|
7天前
|
前端开发
前端diff文件对比使用worker进行优化
如何使用Web Worker在React项目中优化文件对比差异功能的实现。
26 5
|
7天前
|
前端开发
前端基础(四)_CSS层叠样式表_什么是css_css样式的引入方式_样式表的优先级_样式选择器
本文详细介绍了CSS(层叠样式表)的基本概念、语法规则、引入方式、样式表的优先级和样式选择器。文章解释了CSS的作用,展示了如何在HTML中通过行内样式、内部样式和外部样式引入CSS,讨论了不同CSS选择器的优先级和如何确定最终的样式应用。此外,还强调了使用`!important`规则时的优先级高于行内样式。
31 1
|
24天前
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
43 19
|
21天前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
29 11
|
21天前
|
前端开发
前端使用xlsx模板导出表格
【9月更文挑战第10天】在前端使用 `xlsx` 模板导出表格需完成以下步骤:首先引入 `xlsx` 库,准备数据与模板;接着读取模板文件,选择特定工作表并填充数据;最后将填充后的表格转换为二进制数据,创建 Blob 对象并触发下载。整个过程中可根据需求调整模板格式和数据填充方式。
|
2月前
|
前端开发 JavaScript
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
这篇文章介绍了使用AJAX技术将前端页面中表单接收的多个参数快速便捷地传输到后端servlet的方法,并通过示例代码展示了前端JavaScript中的AJAX调用和后端servlet的接收处理。
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
|
2月前
|
前端开发 JavaScript 开发者
下一篇
无影云桌面