【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录

    • [1. 代码基本结构](#1. 代码基本结构)
    • [2. 导出的excel 某单元格的值设置为下拉选择](#2. 导出的excel 某单元格的值设置为下拉选择)
    • [3. 如何把下拉选择项设置为动态](#3. 如何把下拉选择项设置为动态)
    • [4. 单元格设置校验、提示](#4. 单元格设置校验、提示)
    • [5. 在WPS上的设置](#5. 在WPS上的设置)

1. 代码基本结构

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/exceljs/4.3.0/exceljs.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
</head>
<script>
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet("导入数据明细", { properties: { tabColor: { argb: 'FFC0000' } } }); // 创建工作表
  const worksheet2 = workbook.addWorksheet("工作表2"); // 创建工作表
  worksheet.views = [{
    state: 'frozen',
    ySplit: 2,
  }];

  // 设置列
  worksheet.columns = [{
    header: "下拉选择",
    width: 60,
  }]

  worksheet.getCell(`A2`).dataValidation = {
    type: "list",
    allowBlank: true,

    formulae: ['"One,Two,Three,Four"'],
    // formulae: ['"' + Object.values(fieldMap.SFLogisticsType).join(",") + '"'],
  };

  workbook.xlsx
    .writeBuffer()
    .then((buffer) => {
      const blob = new Blob([buffer], {
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      });
      let aEl = document.createElement("a");
      aEl.style = "display: none";
      aEl.download = `测试excel ${new Date().getTime()}.xlsx`;
      aEl.href = window.URL.createObjectURL(blob);// 创建blob 文件链接
      document.body.appendChild(aEl);
      aEl.click();
      document.body.removeChild(aEl);
      window.URL.revokeObjectURL(aEl.href); // 销毁链接


    })
    .catch((err) => {
      console.error(err)

    });

</script>

<body>

</body>

</html>

2. 导出的excel 某单元格的值设置为下拉选择

excel.js 官方文档的,数据验证 文章中有详细说明

验证类型

类型 描述
list 定义一组离散的有效值。Excel 将在下拉菜单中提供这些内容,以便于输入
whole 该值必须是整数
decimal 该值必须是十进制数
textLength 该值可以是文本,但长度是受控的
custom 自定义公式控制有效值

运算符

对于 listcustom 以外的其他类型,以下运算符会影响验证:

运算符 描述
between 值必须介于公式结果之间
notBetween 值不能介于公式结果之间
equal 值必须等于公式结果
notEqual 值不能等于公式结果
greaterThan 值必须大于公式结果
lessThan 值必须小于公式结果
greaterThanOrEqual 值必须大于或等于公式结果
lessThanOrEqual 值必须小于或等于公式结果
js 复制代码
  worksheet.getCell(`A2`).dataValidation = {
    type: "list", // 单元格类型
    allowBlank: true, // 是否可以为空

    formulae: ['"One,Two,Three,Four"'], // 可选值
  };

现在这个样子就是这个单元格的值是下拉选择

3. 如何把下拉选择项设置为动态

一般这个下拉选择项的值,可能来源于码表,需要调接口查询,然后 设置上去

js 复制代码
  worksheet.getCell(`A2`).dataValidation = {
    type: "list", // 单元格类型
    allowBlank: true, // 是否可以为空

    // formulae: ['"One,Two,Three,Four"'], // 可选值
    formulae: ['"' + ['小学', '中学', '大学', '研究生'].join(",") + '"'],
  };

要注意他这个格式

[' 逗号拼接的每一项 ']

逗号拼接的每一项,左右两边还有加上 双引号

4. 单元格设置校验、提示

js 复制代码
  worksheet.getCell(`A2`).dataValidation = {
    type: "list", // 单元格类型
    allowBlank: true, // 是否可以为空

    // formulae: ['"One,Two,Three,Four"'], // 可选值
    formulae: ['"' + ['小学', '中学', '大学', '研究生'].join(",") + '"'],
    operator: 'equal', // 运算符
    showErrorMessage: true, // 如若填错是否显示错误信息
    errorStyle: 'error', // 错误类型
    errorTitle: '提示', // 错误标题
    error: '请选择下拉列表的项'
  };

如若在单元格随便输入, 就会出现这个提示

设置单元格提示

js 复制代码
  worksheet.getCell(`A2`).dataValidation = {
    type: "list", // 单元格类型
    allowBlank: true, // 是否可以为空

    // formulae: ['"One,Two,Three,Four"'], // 可选值
    formulae: ['"' + ['小学', '中学', '大学', '研究生'].join(",") + '"'],
    operator: 'equal', // 运算符
    showErrorMessage: true, // 如若填错是否显示错误信息
    errorStyle: 'error', // 错误类型
    errorTitle: '提示', // 错误标题
    error: '请选择下拉列表的项', // 错误具体信息
    showInputMessage: true, // 用户输入时,是否展示提示框
    promptTitle: '输入提示',// 提示标题
    prompt: '请点击,下箭头,选择项'// 提示具体信息
  };

5. 在WPS上的设置

  1. 点击有下拉选择的单元格
  2. 点击 数据
  3. 点击有效性




相关推荐
山河故人1634 分钟前
uniapp使用npm下载
前端·npm·uni-app
zm16 分钟前
UDP 多点通信
开发语言·php
执笔写回憶26 分钟前
Excel在每行下面插入数量不等的空行
excel
-曾牛28 分钟前
基于微信小程序的在线聊天功能实现:WebSocket通信实战
前端·后端·websocket·网络协议·微信小程序·小程序·notepad++
.小墨迹42 分钟前
Apollo学习——planning模块(3)之planning_base
linux·开发语言·c++·学习·自动驾驶
小喵喵生气气1 小时前
Python60日基础学习打卡D26
开发语言·python
一口一个橘子1 小时前
[ctfshow web入门] web72
前端·web安全·网络安全
Web极客码1 小时前
如何使用WordPress SEO检查器进行实时内容分析
前端·seo·wordpress
Stella25211 小时前
【Vue】CSS3实现关键帧动画
前端·vue.js·css3
junjun.chen06061 小时前
【在qiankun模式下el-dropdown点击,浏览器报Failed to execute ‘getComputedStyle‘ on ‘Window‘: parameter 1 is not o
前端·javascript·前端框架