xlsx xlsx-style-vite 实现前端根据element 表格导出excel且定制化样式 背景 列宽等

前言

先看下最终效果图吧,需要的可以参考我的实现方式
这是最终导出的表格文件

在这里插入图片描述

类似这种的,特定单元格需要额外标注,表头也有月份然后细分的,表格组件是这样的

在这里插入图片描述

在这里插入图片描述

注意

别使用xlsx-style 这个库,太多问题了,按照网上的教程改了源码都不行,哈哈,然后选择xlsx-style-vite这个库,一点问题没有了。

import * as XLSX from 'xlsx'  
import * as XLSX_STYLE from 'xlsx-style-vite'  
import * as FileSaver from 'file-saver'

实现

这里贴一下主要实现代码吧

// 导出 Excel 的方法
const exportExcel = async () => {
  LoadBtn.value = true
  const elementTable = tabRef.value
  let worksheet = XLSX.utils.table_to_sheet(elementTable.$el)
  const workbook = XLSX.utils.book_new()
  setPubExcel(worksheet)
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  let wbout = XLSX_STYLE.write(workbook, { bookType: 'xlsx', bookSST: false, type: 'binary' })
  FileSaver.saveAs(
    new Blob([s2ab(wbout)], { type: 'application/octet-stream;charset=utf-8"' }),
    'xx项目汇总统计' + dayjs().format('YYYYMMDD') + '.xlsx'
  )
  // 导出 Excel 文件
  // XLSX.writeFile(workbook, 'table.xlsx')
}

//设置公共样式
const setPubExcel = (data: any) => {
  data['!cols'] = [
    { wpx: 60 },
    { wpx: 200 },
    { wpx: 60 },
    { wpx: 400 },
    { wpx: 90 },
    { wpx: 80 },
    { wpx: 80 },
    { wpx: 100 },
    { wpx: 100 },
    { wpx: 70 },
    { wpx: 70 },
    { wpx: 70 },
    { wpx: 600 },
    { wpx: 200 }
  ]
  const excludes = ['!cols', '!fullref', '!merges', '!ref', '!rows']
  for (let key in data) {
    if (data?.hasOwnProperty(key)) {
      // if (!excludes.includes(key)) {
      // console.log(key, 'key', data[key], 'value-------')
      if (key[0] === 'G' || key[0] === 'F') {
        // console.log('时间', data[key], '-----', key)
        const v = data[key].v
        if (!v || v === '') continue
        // console.log('after-time', formatExcelDate(v))
        let time = formatExcelDate(v)
        // 判断是否小于当前时间
        if (dayjs().isAfter(time)) {
          data[key].s = {
            // border: {
            //   top: { style: 'thin', color: { rgb: '000000' } },
            //   bottom: { style: 'thin', color: { rgb: '000000' } },
            //   left: { style: 'thin', color: { rgb: '000000' } },
            //   right: { style: 'thin', color: { rgb: '000000' } }
            // },
            // alignment: {
            //   horizontal: 'center', //水平居中对齐
            //   vertical: 'center', //垂直居中
            //   wrapText: true //是否换行
            // },
            fill: {
              fgColor: { rgb: 'FFFF0000' } // 设置标题单元格的背景颜色
            }
          }
        }
      }
    }
  }
}

const s2ab = (s: any) => {
  const buf = new ArrayBuffer(s.length)
  const view = new Uint8Array(buf)
  for (let i = 0; i < s.length; i++) {
    view[i] = s.charCodeAt(i) & 0xff
  }
  return buf
}

// 表格特定的时间转换
function formatExcelDate(numb: number, format = '/') {
  const time = new Date((numb - 25569) * 24 * 3600000)
  return time
    .toLocaleDateString('zh-CN', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit'
    })
    .replace(/\//g, format)
}

end

希望对你有帮助,点个赞吧!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何选择云主机或者VPS挂EA?

近年来&#xff0c;随着EA交易在零售外汇圈的逐渐流行&#xff0c;越来越多的交易者开始使用外汇VPS&#xff08;虚拟专用服务器&#xff09;来挂载EA&#xff08;智能交易系统&#xff09;进行交易。通过外汇VPS&#xff0c;可以最大程度地减少MT4客户终端与MT4服务器之间的延…

多特征变量序列预测(四) Transformer-BiLSTM风速预测模型

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现&#xff08;一&#xff09;EMD-CSDN博客 EMD、EEM…

【模型部署】python中socket编程入门知识-系列1

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

[实时计算flink]基于Paimon的数据库实时入湖快速入门

Apache Paimon是一种流批统一的湖存储格式&#xff0c;支持高吞吐的写入和低延迟的查询。本文通过Paimon Catalog和MySQL连接器&#xff0c;将云数据库RDS中的订单数据和表结构变更导入Paimon表中&#xff0c;并使用Flink对Paimon表进行简单分析。 背景信息 Apache Paimon是一…

深度学习之梯度下降法 | Chapter 2 | Deep Learning | 3Blue1Brown

目录 前言1. 总览2. 回顾3. 训练数据的使用4. 代价函数5. 梯度下降法6. 梯度向量7. 梯度下降小结8. 分析网络9. 网络如何学习的研究相关资料结语 前言 3Blue1Brown 视频笔记&#xff0c;仅供自己参考 这个章节主要介绍梯度下降的思想&#xff0c;之后进一步探索网络的能力以及隐…

助农贷款、保险精准定价,背后的“星绽”机密计算全球开源

文&#xff5c;白 鸽 编&#xff5c;王一粟 河南平顶山种植日本引进白草莓的李朝阳&#xff0c;和山东临沂种植山楂和桃子的李东旭&#xff0c;都是网商银行“农户秒贷”项目的受益者。 “发果农工资&#xff0c;收购水果&#xff0c;遇上天气灾害时周转应急时&#xff0c;“…

E/MicroMsg.SDK.WXMediaMessage:checkArgs fail,thumbData is invalid 图片资源太大导致分享失败

1、微信分享报&#xff1a; 2、这个问题是因为图片太大导致&#xff1a; WXWebpageObject webpage new WXWebpageObject();webpage.webpageUrl qrCodeUrl;//用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象WXMediaMessage msg new WXMediaMessage(webpage);msg.tit…

MySQL-12.DQL-条件查询

一.DQL-条件查询 -- DQL:条件查询 -- 1.查询 姓名 为 杨逍 的员工 select id, username, password, name, gender, image, job, entrydate, create_time, update_timefrom tb_emp where name 杨逍;-- 2.查询 id小于等于5 的员工信息 select * from tb_emp where id < 5;-…

Flutter 小技巧之 equatable 包解析以及宏编程解析

今天我们聊聊 equatable 包的实现&#xff0c;并通过 equatable 去理解 Dart 宏编程的作用和实现&#xff0c;对于 Flutter 开发者来说&#xff0c;Dart 宏编程可以说是「望眼欲穿」。 equatable 正如 equatable 这个包名所示&#xff0c;它的功能很简单&#xff0c;主要是用…

LeetCode 热题100之双指针

1.移动零 思路分析1&#xff08;纯模拟&#xff09; 定义指针j&#xff0c;用来收集不是0的数&#xff1b;收集完毕之后&#xff0c;再把剩下位置处置为0即可。 具体实现代码&#xff08;详解版&#xff09;&#xff1a; class Solution { public:void moveZeroes(vector<…

前端vue框架配置基础信息详解分析

前端vue2、vue3框架是我们最近常用的框架&#xff0c;今天我们分析一下配置基础信息、详解其中的功能含义。 1、vue.config.js 文件分析 这个 vue.config.js 文件是 Vue CLI 项目中用于配置项目构建行为和开发环境设置的文件。它能够让开发者定制打包、代理、路径、样式等方面…

国产单片机及其特点

国产单片机在近年来取得了显著的发展&#xff0c;不仅在技术上不断突破&#xff0c;还在市场上占据了越来越重要的位置。 主要国产单片机品牌及特点 兆易创新&#xff08;GD&#xff09; 主要系列&#xff1a;GD32系列&#xff0c;基于ARM Cortex-M内核。特点&#xff1a;高性能…

Android 中的串口开发

一&#xff1a;背景 本文着重讲安卓下的串口。 由于开源的Android在各种智能设备上的使用越来越多&#xff0c;如车载系统等。在我们的认识中&#xff0c;Android OS的物理接口一般只有usb host接口和耳机接口&#xff0c;但其实安卓支持各种各样的工业接口&#xff0c;如HDM…

ResNet18果蔬图像识别分类

1. 项目简介 本项目的目标是开发一个基于ResNet18深度学习模型的果蔬图像分类系统。随着现代农业与人工智能的结合&#xff0c;智能果蔬分类技术在供应链、生产和销售管理中扮演了越来越重要的角色。本项目的背景源于提升果蔬分类效率的需求&#xff0c;通过使用计算机视觉技术…

基于SSM+微信小程序的酒店管理系统1

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于微信小程序开发的酒店管理系统管理员&#xff0c;酒店管理员以及用户。 1、管理员功能可以管理个人中心&#xff0c;用户信息管理&#xff0c;酒店管理员管理&#xff0c;房间类型管…

YOLO11改进 | 注意力机制 | 添加SE注意力机制

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文介绍了YOLOv11添加SE注意力机制&…

Redis中String类型数据扩容原理分析

大家好&#xff0c;我是 V 哥。在 Java 中&#xff0c;我们有动态数组ArrayList&#xff0c;当插入新元素空间不足时&#xff0c;会进行扩容&#xff0c;好奇 Redis 中的 String 类型&#xff0c;C 语言又是怎样的实现策略&#xff0c;带着疑问&#xff0c;咱们来了解一下。 最…

Python酷库之旅-第三方库Pandas(167)

目录 一、用法精讲 766、pandas.Interval.open_left属性 766-1、语法 766-2、参数 766-3、功能 766-4、返回值 766-5、说明 766-6、用法 766-6-1、数据准备 766-6-2、代码示例 766-6-3、结果输出 767、pandas.Interval.open_right属性 767-1、语法 767-2、参数 …

[LeetCode] 78. 子集

题目描述&#xff1b; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1…

Windows通过netsh控制安全中心防火墙和网络保护策略

Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口&#xff08;禁用/启用&#xff09;前&am…