xlsx-style 插件批量導出多個sheet表格excel中遇到的問題及解決

? ? ? ? Vue2中 前端界面導出表格,使用XLSXS插件版本(^0.8.13)導出表格存在表格背景顏色無法正常展示,百分比數據沒有正常展示 【有條件的盡量先升級高版本插件,此插件版本對樣式支持度不夠

? ? ? ? 優先考慮插件版本升級 同樣的使用方法在vue3中沒有出現錯誤

? ? 以下為界面上表格,表格采用vxe-table組件? 整個表格的列均為動態計算得出

導出后的表格樣式丟失 且最后一行數據百分比不能正常展示

以下為封裝的批量倒出代碼 使用需根據項目自行更改

import FileSaver from 'file-saver'
import XLSXS from 'xlsx-style'export function exportMultiSheetExcel(tables, // [{ el: tableDom, name: 'Sheet1' }, ...]{fileName = '多Sheet表格',style,colWidth,callback,  // 回調 對數據進行處理addCell,DataManipulationMethod}
) {const wb = XLSX.utils.book_new();tables.forEach(({ el, name, index }) => {const sheet = XLSX.utils.table_to_sheet(el);if (colWidth) sheet['!cols'] = colWidth;DataManipulationMethod && DataManipulationMethod(sheet, index);Object.keys(sheet).forEach((key) => {if (key.startsWith('!')) return;const cell = sheet[key];if (!cell || cell.v === '' || cell.v == null) return;cell.s = style || {};callback && callback(key, cell, sheet);});addCell && addCell(sheet);XLSX.utils.book_append_sheet(wb, sheet, name || 'Sheet');});const wbout = XLSXS.write(wb, {bookType: 'xlsx',type: 'binary',cellStyles: true})// 創建 Blob 并下載const blob = new Blob([s2ab(wbout)], {type: 'application/octet-stream'});const url = window.URL.createObjectURL(blob);const a = document.createElement('a');a.href = url;a.download = `${name || '表格'}.xlsx`;a.click();window.URL.revokeObjectURL(url);
}// 表格使用 ----------
import { exportMultiSheetExcel } from '@/utils'exportTable(){this.tableScheme.forEach((tableEle, index) => {// let ws = this.tableColumnHandle(tableEle.columns, this.$refs['scheme' + index][0])tables.push({el: this.$refs['scheme' + index][0].$el,// name: tableEle?.columns[0]?.title.replace(/\d{4}年/g, '').replace(/\d{2}月/g, '').replace(/:/g, '-').replace(/方案/g, ''),name: '123' + index,  // sheet的名稱 注意名稱不能超過31個字符且不能包含:等字符index})})exportMultiSheetExcel(// 導出用隱藏的導出格式表格tables,{fileName: '方案',style: {alignment: {horizontal: 'center', // 水平居中對齊vertical: 'center',wrapText: true}},callback: (key, item, obj) => {if (key === 'B5') {console.log(key)item.s = {alignment: {horizontal: 'center', // 水平居中對齊vertical: 'center',wrapText: true},fill: {fgColor: { rgb: 'FFb0e1' }}}}},DataManipulationMethod: (data, index) => {console.log(data, 'dd')const fixedCode = ['A', 'B']const tableDataLength = this.tableScheme[index].data.length // 表格數據行數const headNum = 3 // 表頭占用行數const endNum = 2 // 表尾占用行數const keysArr = []// 非A 或者 B 開始的數據 需要刪除 表尾后的多余固定列臟數據 即  tableDataLength+headNum+endNum 之后的let maxNum = 0for (const key in data) {if (!key.includes('!')) {const num = key.replace(/[A-Za-z]/g, '') - 0if (num > maxNum) maxNum = numconst code = key.replace(/[0-9]/g, '')if (!keysArr.includes(code)) keysArr.push(code)if (fixedCode.includes(code) && headNum + 1 <= num && num <= tableDataLength + headNum) {if (data[key].v === '') {// 固定列替換成有數據的data[key] = data[key.replace(/[0-9]/g, '') + (num + tableDataLength + headNum + endNum)]}}}}// 刪除固定列臟數據keysArr.forEach(code => {for (let num = (tableDataLength + headNum + endNum + 1); num <= maxNum; num++) {delete data[`${code + num}`]}})}})
}

插件使用過程中踩坑:

1,導出sheet名稱不符規范

? ? ? ?導出多個表格到同一個excel表格中的代碼參考如下

this.tableScheme.forEach((tableEle, index) => { let ws = this.tableColumnHandle(tableEle.columns, this.$refs['scheme' + index][0])  /// 表格部分數據處理wsArr.push({title: tableEle?.columns[0]?.title, ws: ws})})const wb = XLSX.utils.book_new();wsArr.forEach( item => { // excel表格 sheet名稱不能包含 :號 31個字符內const sheetName = item.title.replace(/\d{4}年/g, '').replace(/\d{2}月/g, '').replace(/:/g, '-').replace(/方案/g, '')XLSX.utils.book_append_sheet(wb, item.ws, sheetName);  // 此處添加到對應的sheet中})XLSX.writeFile(wb, '調時方案執行情況.xlsx');

excel中的sheet名稱要求如下:

style: {alignment: {horizontal: 'center', // 水平居中對齊vertical: 'center',wrapText: true},fill: {fgColor: { rgb: 'FFD6D6' } // 例如紅色背景}
},

2,表格背景色不展示

如果設置全局的顏色 可以顯示? 但是對單個背景色進行設置就不顯示了

全局直接在style中添加即可

style: {alignment: {horizontal: 'center', // 水平居中對齊vertical: 'center',wrapText: true},fill: {fgColor: { rgb: 'FFD6D6' } // 例如紅色背景}
},

對單個背景色進行處理 在回調callback中進行條件判斷? 注意 必須整個item.s 一起寫 包括劇中 否則就不生效

callback: (key, item, obj) => {            if (key === 'B5') {item.s = {alignment: {horizontal: 'center', // 水平居中對齊vertical: 'center',wrapText: true},fill: {fgColor: { rgb: 'FFb0e1' }}}}
},

3,百分比格式設置之后不生效

正常情況只需要在回調callback中 或者?DataManipulationMethod 處理方法中對數據進行格式命名numFmt??即可

data[key].s = {alignment: { horizontal: 'center', vertical: 'center', wrapText: true },numFmt: '0.00%'  // 只設置格式
}

不生效在用以下方法 直接改為string格式

const percent = data[key].v * 100;data[key].v = Number.isInteger(percent)? `${percent}%`: `${percent.toFixed(2)}%`;data[key].t = 's'; // 明確設為字符串,防止 Excel 報錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910619.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java后端與Vue前端項目部署全流程:從環境配置到Nginx反向代理

文章目錄 1. 準備項目所需的環境2. 后端項目打包步驟 1&#xff1a;使用 Maven 打包步驟 2&#xff1a;定位生成的 JAR 包步驟 3&#xff1a;上傳 JAR 包到 Linux 系統步驟 4&#xff1a;驗證 Java 環境步驟 5&#xff1a;啟動 JAR 包 3. 前端項目打包步驟 1&#xff1a;執行 B…

Mybatis踩坑之一天

background: 對接AML系統&#xff0c;日間實時需要送交易對手要素過去&#xff08;目前主要是交易對手全名&#xff09;&#xff0c;夜間需要將歷史交易送AML進行回溯&#xff0c;交互方式是文件。文件要素為日期、對手類型、對手名、交易流水之類。 設置對送AML的文件設計表…

【PyTorch】分布式訓練報錯記錄-ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1)

最近&#xff0c;我在服務器上起基于PyTorch分布式框架的預訓練實驗&#xff0c;起初實驗都在順利進行&#xff0c;但是當我們把模型的深度與寬度調大之后&#xff0c;模型在訓練幾代之后便會出現如下的報錯&#xff1a; WARNING:torch.distributed.elastic.multiprocessing.a…

有哪些詞編碼模型

有哪些詞編碼模型 詞編碼模型:是將自然語言符號映射為稠密的高維向量,使語義相近的詞匯在向量空間中位置接近。 不過,也有部分模型會考慮字母或字符信息,如基于字節對編碼(BPE)的模型會將單詞拆分成子詞,這里的子詞可能是字母組合。 詞編碼模型的原理主要是通過機器學…

Mono 功能介紹與使用示例

Mono 功能介紹與使用示例 一、核心概念與特性 Mono 是 Spring Reactor 框架中的核心組件&#xff0c;屬于響應式編程&#xff08;Reactive Programming&#xff09;模型&#xff0c;專注于處理包含 0 或 1 個元素 的異步序列[1][2][5]。其核心特點包括&#xff1a; 異步非阻…

5060Ti雙顯卡+LLaMA-factory大模型微調環境搭建

查看環境確定安裝版本安裝CUDA12.8安裝Anaconda安裝Visual Studio C桌面開發環境&#xff08;編譯llama.cpp需要&#xff09;安裝cmake(編譯llama.cpp需要)安裝llama.cpp(用于量化)安裝huggingface-cli安裝llama-factory安裝PyTorch2.7.0安裝bitsandbytes安裝flash-attention加…

Lnmp和XunRuiCMS一鍵部署(Rocky linux)

先上傳XunRuiCMS-Study.zip包到當前目錄&#xff0c;可以去官網下載 #!/bin/bash # function: install nginx mysql php on Rocky Linux 9.5 with fixed PHP-FPM configip$(hostname -I | awk {print $1}) yhxunrui passwordxunrui123# 檢查是否為root用戶 if [ "$USER&qu…

高精度OFDR設備在CPO交換機中的應用

光電共封裝&#xff08;CPO&#xff09;交換機的特點 核心需求&#xff1a;CPO將光模塊與交換芯片集成封裝&#xff0c;縮短電互連距離&#xff0c;降低功耗和延遲&#xff0c;但需解決以下挑戰&#xff1a; 1.光器件微型化&#xff1a;硅光芯片、光纖陣列等需高精度制造。 …

Vulkan 通過 CMake 集成 Dear ImGUI

一、 目錄與文件部署 從官網獲取 IMGUI 代碼庫&#xff0c;在項目 extern 目錄下新建 imgui 目錄&#xff0c;將相關文件復制進去&#xff0c;構建出如下目錄結構&#xff1a; . ├── build ├── extern │ ├── glfw │ ├── glm │ └── imgui │ ├…

Linux設備框架:kset與kobject基本介紹

系列文章目錄 Linux設備框架&#xff1a;kset與kobject基本介紹 [link] Linux設備框架&#xff1a;kset與kobject源碼分析 [link] kset與kobject基本介紹 一、前言二、kobject、kset和設備的關系2.1 kset 結構體2.2 kobject 結構體 三、總結 一、前言 Linux 設備模型如同一座擁…

【AI論文】擴展大型語言模型(LLM)智能體在測試時的計算量

摘要&#xff1a;擴展測試時的計算量在提升大型語言模型&#xff08;LLMs&#xff09;的推理能力方面已展現出顯著成效。在本研究中&#xff0c;我們首次系統地探索了將測試時擴展方法應用于語言智能體&#xff0c;并研究了該方法在多大程度上能提高其有效性。具體而言&#xf…

LeapMotion-PhysicalHandsManager 類詳解

PhysicalHandsManager 類詳解 這個類是 Ultraleap 物理手交互系統的核心管理器,負責處理手部物理交互的不同模式。下面我將詳細解析這個類的結構和功能: 類概述 PhysicalHandsManager 繼承自 LeapProvider,是物理手交互系統的中央控制器: public class PhysicalHandsMa…

vue-22(理解組合式 API:setup、ref、reactive)

Vue.js 中的組合式 API 代表了我們構建和組織組件方式的重大轉變。它為傳統的選項式 API 提供了一種更靈活、更強大的替代方案&#xff0c;尤其適用于復雜的應用程序。本章將深入探討組合式 API 的核心概念&#xff1a;setup函數、ref和reactive&#xff0c;為你構建更可維護、…

【Golang玩轉MCP】-實現一個加減乘除MCP服務

文章目錄 概要1 首先創建一個MCP服務器2 添加MCP工具如何測試我們的MCP服務功能是否正常呢小結 概要 今天我們使用golang簡單實現一個加減乘除MCP服務 1 首先創建一個MCP服務器 s : server.NewMCPServer("Hello World Server","1.0.0",server.WithToolCa…

計算機網絡期末 網絡基礎概述

目錄 網絡的定義歷史發展(了解) 網絡的分類&#xff0c;功能和應用(熟悉) 網絡的組成與結構(理解) 網絡的 OSI 七層參考模型(熟悉) 網絡的 TCP/IP 四次模型(理解) 網絡有關性能指標(掌握) 網絡的定義歷史發展(了解) 計算機網絡是什么 四個階段 總結 網絡 互連網 因特網的…

SwiftUI學習筆記day4: Lecture 4 | Stanford CS193p 2023

Lecture 4 | Stanford CS193p 2023 課程鏈接&#xff1a;https://www.youtube.com/watch?v4CkEVfdqjLw 代碼倉庫&#xff1a;iOS 課程大綱&#xff1a; 簡要課程大綱&#xff1a;SwiftUI 高級主題 Swift 訪問控制&#xff08;Access Control&#xff09; 5 個級別&#xff1…

Docker 高級管理——容器通信技術與數據持久化

目錄 一、Docker 容器的網絡模式 1. Bridge 模式 2. Host 模式 3. Container 模式 4. None 模式 5. Overlay 模式 6. Macvlan 模式 7. 自定義網絡模式 二、端口映射 1. 端口映射 2. 隨機映射端口 3. 指定映射端口 &#xff08;1&#xff09;固定端口 &#xff08;…

git操作案例 -設置遠程分支,并提交到新遠程新分支

文章目錄 前言一、分析當前的問題二、修改遠程倉庫地址&#xff08;一&#xff09;修改遠程倉庫地址場景 現有保留遠程分支場景替換現有遠程分支 二、 找回已經提交的文件場景&#xff1a;提交后&#xff0c;代碼在本地倉庫但未推送 三、同步遠程分支四、提交到新遠程的新分支 …

mysql一張表,其中一個字段設置了唯一索引,又設置了普通索引,查詢的時候很慢,沒有走普通索引,是const

問題分析 在 MySQL 中&#xff0c;當一個字段同時存在唯一索引和普通索引時&#xff0c;查詢優化器通常會優先選擇最嚴格的索引&#xff08;即能最快縮小結果集的索引&#xff09;。在你的場景中&#xff0c;優化器選擇了唯一索引并將查詢視為const類型&#xff0c;這通常是高…

ARCGIS國土超級工具集1.6更新說明

ARCGIS國土超級工具集V1.6版本&#xff0c;功能已增加至60 個。本次更新在V1.5版本的基礎上&#xff0c;除修復了使用時發現的若干小問題外&#xff0c;還更新及新增了若干工具。其中勘測定界工具欄更新了界址點西北角重排工具&#xff0c;新增了提示圖斑起始點、指定圖斑起始點…