前端 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
}
相关文章
|
7月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
913 2
|
存储 前端开发 安全
前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
本文全面解析前端三种数据存储方式:Cookie、LocalStorage与SessionStorage。涵盖其定义、使用方法、生命周期、优缺点及典型应用场景,帮助开发者根据登录状态、用户偏好、会话控制等需求,选择合适的存储方案,提升Web应用的性能与安全性。(238字)
1102 0
|
存储 监控 安全
前端框架的数据驱动方式如何保证数据的安全性?
总之,前端框架的数据驱动方式需要综合运用多种手段来保证数据的安全性。从传输、存储、访问控制到防范攻击等各个方面进行全面考虑和实施,以确保用户数据的安全可靠。同时,不断加强安全管理和技术创新,以应对不断变化的安全挑战。
552 60
|
7月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
258 1
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
532 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
956 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
1526 18
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
监控 JavaScript 前端开发
前端的混合之路Meteor篇(六):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统
本文介绍了 Meteor 3.0 中的发布-订阅模型,详细讲解了如何在服务器端通过 `Meteor.publish` 发布数据,包括简单发布和自定义发布。客户端则通过 `Meteor.subscribe` 订阅数据,并使用 MiniMongo 实现实时数据同步。此外,还展示了如何在 Vue 3 中将 MiniMongo 的 `cursor` 转化为响应式数组,实现数据的自动更新。
344 2
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1533 14

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1102
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    485
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    375
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    357
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    476
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    650
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1072
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    258
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    913
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    439