前端导出表格 修改样式(xlsx-style)用法

news2024/10/3 10:37:37

一. 应用机制

        xlsx-style 修改样式的机制  就是选中哪一行,那一列或者哪一个  然后去修改  比如表格最左上角的一个格子 坐标是(0, 0)下标  也可以叫做 A1 选中之后  可以修改其样式 

二. 实战讲解

1. 下载依赖

npm install xlsx-style -S

  首先下载依赖到项目

2. 引入到项目

import * as XLSX from 'xlsx'

3. 创建导出表格

        为什么说是创建导出表格而不是表格呢,是因为导出表格跟原本页面展示的表格可能不一样,打比方我导出页面表格比普通的表格下方多一行注释 等等,如果导出表格跟页面展示的一样,则可以用改表格,否则创建一个新表格 v-show="false" 也就是隐藏掉,用来导出, 上代码

<el-table :data="tableDatas" border style="margin-left: 5%;width: 84%;" id="report-table"
  :header-cell-style="{ 'text-align': 'center' }" height="70vh" @row-dblclick="rowDblclick"
  :cell-style="{ 'text-align': 'center' }" v-show="false">
  <el-table-column :label="time + req.source + '检查问题统计报表'">
    <el-table-column label="序号" align="center" width="100">
      <template slot-scope="scope">
        <span v-if="scope.row.index"> {{ scope.row.index }} </span>
        <span v-else>{{ scope.$index + 1 }}</span>
      </template>
    </el-table-column>
    <el-table-column v-if="show('zdlb')" prop="caseTypeDetail" label="问题类别" width="300">
    </el-table-column>
    <el-table-column v-if="show('zdqyS')" prop="syncRoad" label="重点区域" width="300">
      <template slot-scope="scope">
        {{ scope.row.syncRoad }}
      </template>
    </el-table-column>
    <el-table-column v-if="show('zdqyC')" prop="community" label="重点区域" width="300">
      <template slot-scope="scope">
        <span v-if="scope.row.community == '合并'"> {{ scope.row.community }} </span>
        <selectTag v-else :type="communityData" :value="scope.row.community"></selectTag>
      </template>
    </el-table-column>
    <el-table-column prop="total" label="总数" width="100">
    </el-table-column>
    <el-table-column label="按时整改" width="200">
      <template slot-scope="{}" slot="header">
        <span>按时整改</span>
        <el-tooltip class="item" effect="dark" placement="top">
          <i class="el-icon-question" style="vertical-align: middle;color:red"></i>
          <div slot="content">
            <p>Tips:在规定时限内完成整改的案件</p>
          </div>
        </el-tooltip>
      </template>
      <el-table-column prop="ontimeNum" label="数量" width="100">
      </el-table-column>
      <el-table-column prop="ontimeScore" label="扣分" width="100">
      </el-table-column>
    </el-table-column>
    <el-table-column label="限时整改" width="200">
      <template slot-scope="{}" slot="header">
        <span>限时整改</span>
        <el-tooltip class="item" effect="dark" placement="top">
          <i class="el-icon-question" style="vertical-align: middle;color:red"></i>
          <div slot="content">
            <p>Tips:未在规定时限内完成整改的案件</p>
          </div>
        </el-tooltip>
      </template>
      <el-table-column prop="timelimitNum" label="数量" width="100">
      </el-table-column>
      <el-table-column prop="timelimitScore" label="扣分" width="100">
      </el-table-column>
    </el-table-column>
    <el-table-column label="超期整改" width="200">
      <template slot-scope="{}" slot="header">
        <span>超期整改</span>
        <el-tooltip class="item" effect="dark" placement="top">
          <i class="el-icon-question" style="vertical-align: middle;color: red"></i>
          <div slot="content">
            <p>Tips:超过规定时限内整改的案件</p>
          </div>
        </el-tooltip>
      </template>
      <el-table-column prop="overdueNum" label="数量" width="100">
      </el-table-column>
      <el-table-column prop="overdueScore" label="扣分" width="100">
      </el-table-column>
    </el-table-column>
    <el-table-column prop="accumulatedScore" label="累计扣分" width="100">
      <template slot-scope="scope">
        {{ scope.row.accumulatedScore ? parseFloat(scope.row.accumulatedScore).toFixed(2) : "" }}
      </template>
    </el-table-column>
    <el-table-column label="备注" width="100">
    </el-table-column>
  </el-table-column>
</el-table>

上面是源代码 可能过于复杂 我给大家上精简版

<el-table :data="tableDatas" border id="report-table" v-show="false">
  <el-table-column :label="time + req.source + '检查问题统计报表'">
    <el-table-column label="序号" align="center" width="100">
      <template slot-scope="scope">
        <span v-if="scope.row.index"> {{ scope.row.index }} </span>
        <span v-else>{{ scope.$index + 1 }}</span>
      </template>
    </el-table-column>
    <el-table-column label="备注" width="100">
    </el-table-column>
  </el-table-column>
</el-table>

重要的是:绑定在 el-table 这个标签里的 id 

4. 导出事件

事件内 我们一行一行细讲  首先  获取当前导出表格的数据  这个时候就要用上之前导出表格上方绑定的 id 了  我们声明一个 wb 去接收 表格内数据转化的二进制 blob

var wb = XLSX.utils.table_to_book(document.querySelector("#report-table"));

我们可以打印一下 wb 看看里面有什么东西

 而我们所需要修改的表格则在 wb.Sheets 下, 我们在打印一下 wb.Sheets

 如果你导出表格只有一张的话 wb.Sheets 下就只有 Sheet1 一个参数 如果有其他表的话 则有:Sheet2, Sheet3 ... 以此类推 

 Sheet1 下方参数

参数表达含义
!cols代表每一列,数据格式为数组,比如 [{wpx:100}, {wpx: 100}], 则表示为前两列的宽为 100px
!merge合并单元格,数据格式为数组 [{s:{r:0,c:0},e:{r:0,c:6}}], s(start)为开始单元格坐标,e(end)为结束单元格坐标,r (row)行,c(col)列,这里的例子代表合并第0行第0到 第0行第6个单元格
A1A1 代表单元格第一行第一个 往右走则是 B1, C1...这个可以参照导出表格里的 A列第一行 每个单元格都有其格式 {t:"s", s: {}, v:""  }, t(type)为类型 其参数有:n(number数字类型),s(string字符串类型);s(style)里面参数为样式,你想要修改单元格的内部样式,v(value)是单元格内容

知道参数  那么我们就继续上代码了

比方:我要修改前24列的单元格宽

// 表Sheet1
wb.Sheets.Sheet1["!cols"] = [];
// 动态添加前24列  宽为140px
for (let a = 0; a < 24; a++) {
  wb.Sheets.Sheet1["!cols"].push({
    wpx: 140,
  })
}

表格添加边框并修改字体

let arr = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
// 循环渲染表格样式
arr.forEach((item) => {
    for (let i = 1; i < 7 + this.tableData.length; i++) {
        let str = (item + i).toString();
        if (wb.Sheets.Sheet1[str]) {
            wb.Sheets.Sheet1[str].s = { 
              font: {
                name: "宋体",
                sz: 14,
                // bold: true,
                // color: { rgb: "FC5531" }
              },
              border: {
                top: {
                  style: 'thin',
                  color: {
                    auto: 1
                  }
                },
                left: {
                    style: 'thin',
                  color: {
                    auto: 1
                  }
                },
                right: {
                  style: 'thin',
                  color: {
                    auto: 1
                  }
                },
                bottom: {
                  style: 'thin',
                  color: {
                    auto: 1
                  }
                }
              },
              alignment: {
                // 居中
                horizontal: "center",
                vertical: "center",
                indent: 0,
              },
            }
        }
    })
})

        先循环 arr 再循环 this.tableData.length 是因为  循环相加之后 拼凑成 A1 A2 B1 B2 ... 这样类型的 wb.Sheets.Sheet1[str].s 则是修改它的样式

 手动合并单元格(手动合并可能会导致表格报问题)

// 手动合并  最后三行注释
wb.Sheets.Sheet1["!merges"].push({
  e: {
    r: parseInt(_tableData.length + 2), c: 0
  },
  s: {
    r: parseInt(_tableData.length + 4), c: 5
  }
})

 这个点 即可 还得研究一下 怎么解决

结束  打完 手工

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解Python语言和版本

1.1 任务1了解Python语言和版本 Python 语言的名字来自于一个著名的电视剧"Monty Pythons Flying Cireus",Python之父 Guido van Rossum是这部电视剧的狂热爱好者&#xff0c;所以把他设计的语言命名为Python。 Python 是一门跨平台、开源、免费的解释型高级动态编…

2023年,尽量还是别裸辞了吧···

你知道什么叫 度日如年 吗&#xff1f;就是在家待业的每一天。你知道什么叫心焦如焚吗&#xff1f;就是投出100份简历却等不来一个回应。 当前就业环境&#xff0c;裁员、失业消息满天飞&#xff0c;好像能有一份工作就不错了&#xff0c;更别说高薪。其实这只是一方面。另一方…

电商平台商品详情接口的应用场景

API接口的定义价格、库存量、发货地点等。此外&#xff0c;它还可以提供商品的详细信息&#xff0c;包括商品的图片、详细描述、规格参数、售后服务等。这些信息可以帮助用户更好地了解商品&#xff0c;从而更好地选择商品。其次&#xff0c;电商平台商品详情接口的实现原理是基…

关于Qt程序打包后运行库依赖的常见问题分析及解决方法

目录 一. 大致如下常见问题&#xff1a; &#xff08;1&#xff09;找不到程序所依赖的Qt库 version Qt_5 not found (required by &#xff08;2&#xff09;Could not Load the Qt platform plugin "xcb" in "" even though it was found &#xff0…

Antd Select 设置偏移量

对于Select 组件我要想实现如下效果&#xff0c;该如何处理呢&#xff1f;我们查看你select组件https://ant.design/components/select-cn#select-props 并没有相关的属性API,如何去处理这个呢&#xff1f;添加 dropdownAlign{{ offset: [0, 30] }} 这个属性&#xff0c;可以设…

在Linux中进行rocketmq及rocketmq控制台安装与配置

rocketmq下载安装的版本&#xff1a;rocketmq-rocketmq-all-5.0.0.tar.gz rocketmq控制台下载安装的版本&#xff1a;rocketmq-externals-rocketmq-console-1.0.0.tar.gz rocketmq安装 第一步&#xff0c;下载server-jre-8u202-linux-x64.tar.gz安装包。 登录网址&#xff…

UVa 1604 Cubic Eight-Puzzle 立体八数码问题 双向BFS 状态设定

题目链接&#xff1a;Cubic Eight-Puzzle 题目描述&#xff1a; 给定一个初始状态和一个终止状态的3∗33*33∗3网格&#xff0c;网格中含有888个立方体和一个空白&#xff0c;每个立方体的颜色如下&#xff1a; 需要注意的是&#xff1a;只会给出终止状态的立方体的顶面朝向&a…

Android init 进程流程分析 一

init 进程流程分析 一1.1引入init进程1.2 init 进程入口函数参考博客预告下一章 FirstStageMain()分析1.1引入init进程 1.启动电源以及系统启动&#xff1a; 上电引导芯片从预定义的地放&#xff08;固化在ROM)开始执行&#xff0c;加载引导程序Bootloader 到RAM中&#xff0c…

格雷码的实现

格雷码&#xff1a;任意两个相邻的二进制数之间只有一位不同 想必通信专业的学生应该都接触过格雷码&#xff0c;它出现在数电、通信原理等课程里。 如下图所示一个四位格雷码是什么样子的&#xff1a; 格雷码的特点&#xff1a; 其最大的特点是任意上下相邻的两个码值间&am…

css学习-----web

引入方式 内嵌式 css写在style标签中 外链式 css写在一个单独的.css文件中 <link rel"stylesheet" href"./文件名.css">stylesheet关系为样式表&#xff1b; href地址 行內式 css写在标签的style属性中 可以配合js使用 选择器 标签选择器是选…

CTFer成长之路之XSS的魔力

XSS的魔力CTF XSS闯关 题目描述: 你能否过关斩将解决所有XSS问题最终获得flag呢&#xff1f; docker-compose.yml version: "3.2"services:xss:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-xss:latestports:- 3000:3000启动方式 docker-compose up -…

Spring依赖注入(四):Bean的循环依赖是如何产生和解决的?

前言其实这篇文章才是正主&#xff0c;前面几篇文章&#xff1a;Spring依赖注入&#xff08;一&#xff09;&#xff1a;字段注入的方式是如何工作的&#xff1f;Sprng依赖注入&#xff08;二&#xff09;&#xff1a;setter注入是如何工作的&#xff1f;Sprng依赖注入&#xf…

easyExcel与poi版本不兼容导致的后台报错问题

1、背景&#xff1a;最新接手公司系统excel导入解析模块&#xff0c;点击批量导入&#xff0c;后台报错如下 com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/FileMagicat com.alibaba.excel.analysis.…

CycleGAN代码使用入门

以下内容为本人亲测使用过程&#xff0c;完成了橘子到苹果的AI转化效果&#xff0c;先上效果&#xff1a; 1、下载数据集 Index of /cyclegan/datasets 本次做的是苹果和橘子相互转化的实验&#xff0c;所以下载apple2orange.zip数据集 2、下载代码 github地址为&#xff1a;…

ChatGPT从下游应用“火”到了上游芯片厂,国内谁将受益?

因库存陷入低迷周期的半导体市场近日因ChatGPT的火热而重新受到外界关注。 原文链接&#xff1a;ChatGPT从下游应用“火”到了上游芯片厂&#xff0c;国内谁将受益&#xff1f; 由于ChatGPT属于生成式AI&#xff0c;被誉为“AI芯片”第一股的英伟达应声而涨。2月13日收盘&#…

Go高质量编程与性能调优-学习笔记

1 高质量编程 1.1 简介 1.1.1 高质量代码 高质量代码即正确可靠、简洁清晰的代码 1.1.2 编程原则 简单性可读性生产力1.2 编码规范 1.2.1 代码格式 推荐gofmt自动格式化代码&#xff01; 推荐goimports实现gofmt依赖包管理&#xff01; 1.2.2 注释 注释要解释代码作用、…

5个设计师常用素材库

推荐5个设计素材网站&#xff0c;免费下载&#xff01; 1、菜鸟图库 菜鸟图库-免费设计素材下载 菜鸟图库是一个素材量非常丰富的网站&#xff0c;该网站聚合了平面、UI、淘宝电商、高清背景图、图片、插画等高质量素材。平面设计模板非常多&#xff0c;很多都能免费下载&…

springmvc实现controller接口

springmvc实现controller接口 前置配置 基础环境 springmvc 环境 jdk1.8 tomcat8.5 集成环境 ideasmart-tomcat (idea 中 tomcat插件) 实现controller接口 import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Control…

UNIAPP实战项目笔记59 NodeJS后端生成token 和 修复一些bug

UNIAPP实战项目笔记59 NodeJS后端生成token 和 修复一些bug 后端保持数据时往数据库写入token 修复一些前面遗留的问题bug 实际案例图片 后端接口文件 index.js var express require(express); var router express.Router(); var connection require(../db/sql.js); var us…

11、STM32通用定时器输出PWM

目录 1.通用定时器输出PWM 2.PWM的工作原理 3.PWM的内部运作机制 4.PWM的模式 41.边沿对齐模式 5.自动加载的预加载寄存器 6.定时器输出PWM结构体讲解 7.定时器输出PWM库函数讲解 8.定时器输出PWM----实战驱动SG90舵机 1.通用定时器输出PWM 以TIM3为例&#xff0c;STM…