xlsx、xlsx-style 的配置及導出(分享)

文章目錄

      • 1. 基礎配置
        • 1.1 單元格內容
        • 1.2 單元格合并、列寬、行高
        • 1.3 單元格樣式
      • 2. sheet 配置、多個 sheet
      • 3. excel 導出
      • 4. 數據插入(進階)

1. 基礎配置

1.1 單元格內容

注:xlsx、xlsx-style 都存在 write 方法,xlsx 設置單元格樣式沒有效果,xlsx-style 設置行高沒有效果

// 首選需要安裝 npm i xlsx xlsx-style
imoprt XLSX from "xlsx"let arr = [{date: "2016-05-02",name: "王小虎",address: "上海市普陀區金沙江路 1518 弄",},{date: "2016-05-04",name: "王小虎",address: "上海市普陀區金沙江路 1517 弄",}
];// 處理成 XLSX 認識的格式
XLSX.utils.json_to_sheet(arr);
/** 可以看到自動把 key 變為第一行的標題了,value 依此排列* { // 這里的對象也可以手動自行配置*     "!ref": "A1:C3", // 表示表格內容范圍A1: { t: "s", v: "date" }, // t: 格式  v: 內容A2: { t: "s", v: "2016-05-02" },A3: { t: "s", v: "2016-05-04" },B1: { t: "s", v: "name" },B2: { t: "s", v: "王小虎" },B3: { t: "s", v: "王小虎" },C1: { t: "s", v: "address" },C2: { t: "s", v: "上海市普陀區金沙江路 1518 弄" },C3: { t: "s", v: "上海市普陀區金沙江路 1517 弄" }}*/
1.2 單元格合并、列寬、行高
let worksheet = {"!cols": [{ wpx: 140 }, { wpx: 80 }],"!rows": [{ hpx: 14 }, { hpx: 14 }],"!ref": "A1:C3","!merges": [{ s: { r: 0, c: 0 }, e: { r: 0, c: 2 } }] // 合并第一行的 1~3 列
}
1.3 單元格樣式
let cell = {t: "s",v: "測試"s: {alignment: {vertical: "center", // 垂直居中horizontal: "center", // 水平居中wrapText: "true", // 文本換行readingOrder: "2", // 閱讀順序,從右往左textRotation: "180" // 文本旋轉},border: {top: { style: "邊框樣式", color: { rgb: "邊框顏色" }}bottom: {}...},font: {name: "字體", sz: "字體大小",color: { rgb: "字體顏色" },bold: "是否加粗"},fill: {bgColor: { rgb: "背景顏色" }}}
}

2. sheet 配置、多個 sheet

import XLSX from "xlsx" // 只能使用 xlsx
const wb = XLSX.utils.book_new(); // 創建工作簿
const sheet1 = XLSX.utils.json_to_sheet(arr1)
const sheet2 = XLSX.utils.json_to_sheet(arr2)
XLSX.utils.book_append_sheet(wb1, sheet, 'sheet1名稱');
XLSX.utils.book_append_sheet(wb2, sheet, 'sheet2名稱');
// 這個時候的 wb 的數據就完整了

3. excel 導出

// 將 workbook 裝化成 blob 對象
// 這里用到了 XLSX.write,注意是使用的哪種 import XLSX from "xlsx"/"xlsx-style"
function workbook2blob(workbook) {// 生成excel的配置項var wopts = {// 要生成的文件類型bookType: "xlsx",// 是否生成Shared String Table,官方解釋是,如果開啟生成速度會下降,但在低版本IOS設備上有更好的兼容性bookSST: false,type: "binary",};var wbout = XLSX.write(workbook, wopts);// 將字符串轉 ArrayBufferfunction s2ab(s) {var buf = new ArrayBuffer(s.length);var view = new Uint8Array(buf);for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;return buf;}var blob = new Blob([s2ab(wbout)], {type: "application/octet-stream",});return blob;
}// 將 blob 對象創建 bloburl,然后用 a 標簽實現彈出下載框
function openDownloadDialog(blob, fileName) {if (typeof blob == "object" && blob instanceof Blob) {blob = URL.createObjectURL(blob); // 創建blob地址}var aLink = document.createElement("a");aLink.href = blob;// HTML5 新增的屬性,指定保存文件名,可以不要后綴,注意,有時候 file:///模式下不會生效aLink.download = fileName || "";var event;if (window.MouseEvent) event = new MouseEvent("click");// 移動端else {event = document.createEvent("MouseEvents");event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);}aLink.dispatchEvent(event);
}openDownloadDialog(workbook2blob(wb), "excel下載.xlsx");

4. 數據插入(進階)

// 數據的更新(插入行,向下平移)
// 插入指定行同理 修改循環時的初始值就好了
function insertRowsBeforeData(worksheet, rowLen = 1, callback) {// 獲取當前工作表范圍const range = worksheet["!ref"] ? XLSX.utils.decode_range(worksheet["!ref"]) : null;// 計算要插入的行數const insertRows = rowLen;// 處理合并單元格 - 下移現有合并區域if (worksheet["!merges"]) {worksheet["!merges"] = worksheet["!merges"].map((merge) => {const newMerge = { ...merge };// 移動合并區域的起始行和結束行newMerge.s.r += insertRows;newMerge.e.r += insertRows;return newMerge;});}//  處理數據,下移現有數據if (range) {// 從最后一行開始向上移動,避免覆蓋for (let row = range.e.r; row >= range.s.r; row--) {for (let col = range.s.c; col <= range.e.c; col++) {const cellAddress = XLSX.utils.encode_cell({ r: row, c: col });if (worksheet[cellAddress]) {// 計算新位置(向下移動insertRows行)const newRow = row + insertRows;const newAddress = XLSX.utils.encode_cell({ r: newRow, c: col });// 移動單元格worksheet[newAddress] = worksheet[cellAddress];// 刪除原始位置的單元格delete worksheet[cellAddress];}}}// 更新工作表范圍range.e.r += insertRows;worksheet["!ref"] = XLSX.utils.encode_range(range);}// 插入數據callback && callback();
}this.insertRowsBeforeData(worksheet, 1, () => {worksheet.A1 = { t: "s", v: "我是新插入的數據1" }worksheet.B1 = { t: "s", v: "我是新插入的數據2" }
});

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

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

相關文章

算法第38天|322.零錢兌換\139. 單詞拆分

322.零錢兌換 題目 思路與解法 class Solution { public:int coinChange(vector<int>& coins, int amount) {// dp數組&#xff1a;// dp[i]: 湊成總金額i&#xff0c;所需的最少硬幣個數vector<int> dp(amount 1, INT_MAX);dp[0] 0;for (int i 0; i &l…

使用MobileNetV3訓練水果分類模型并用Flask部署

前言 在計算機視覺領域&#xff0c;圖像分類是一個基礎且重要的任務。本文將介紹如何使用MobileNetV3預訓練模型來訓練一個水果分類模型&#xff0c;并通過Flask框架進行部署。MobileNetV3作為輕量級網絡&#xff0c;在保持較高精度的同時&#xff0c;具有較快的推理速度&…

SCADA技術與市場全景解析

SCADA系統作為工業自動化領域的關鍵組成部分&#xff0c;成為了工業企業推進數字化轉型的有力抓手。本文將重點介紹SCADA系統的發展歷程、系統構成及工作原理、發展趨勢&#xff0c;分析其行業應用差異&#xff0c;以及與物聯網和組態軟件的區別&#xff0c;梳理其在不同行業的…

在線教學課程視頻AI智能大綱代碼與演示

AI根據視頻內容自動生成視頻大綱&#xff0c;極大地提高了視頻內容的管理效率、可訪問性和用戶體驗&#xff0c;是推動視頻內容智能化發展的重要一環。AI根據視頻內容自動生成視頻內容大綱。這種功能&#xff0c;應用場景有哪些&#xff1f; 應用場景&#xff1a; 在線教育平臺…

動態WCMP+Flowlet ALB:雙引擎驅動智算網絡負載均衡

傳統網絡架構的困境 在 AI 算力爆發的今天&#xff0c;數據中心網絡正經歷前所未有的流量形態變革。傳統 Clos 網絡架構依賴逐流 ECMP 均衡算法&#xff0c;其設計邏輯基于 “大量短流” 假設&#xff0c;通過五元組 HASH 實現負載分擔。然而 AI 訓練場景呈現出鮮明的流量特征…

軟件測試題

選擇題 1、導致軟件缺陷的原因有很多&#xff0c;①—④是可能的原因&#xff0c;其中最主要的原因包括( )。 ①軟件需求說明書編寫的不全面&#xff0c;不完整&#xff0c;不準確&#xff0c;而且經常更改 ②軟件設計說明書 ③軟件操作人員的水平 ④開發人員不能很好的…

微信小程序頁面容器彈出層

效果圖 .JS Page({data: {show: false,duration: 300,position: right,round: false,overlay: true,customStyle: ,overlayStyle: },popup(e) {const position e.currentTarget.dataset.positionlet customStyle let duration this.data.durationswitch(position) {case to…

Excel批量計算時間差

執行以下操作&#xff0c;將自定義格式代碼應用到單元格&#xff1a; 選擇相應的單元格。在"開始"選項卡上的"數字"組中&#xff0c;單擊"常規"框旁邊的箭頭&#xff0c;然后單擊"其他數字格式"。在"設置單元格格式"對話框…

shell腳本--變量

1.變量是什么 2.變量類型 3.動態&#xff0c;靜態&#xff0c;強弱類型 4.變量的命名 5.變量的定義和引用 5.1三種變量類型 普通變量 環境變量 局部變量 5.2單引號&#xff0c;雙引號&#xff0c;強弱引用 雙引號對變量賦值的影響01:59&#xff1a;給變量加雙引號&#x…

大模型Text2SQL之在CentOS上使用yum安裝與使用MySQL

前言 學習大模型的時候需要一個mysql&#xff0c;原因還是在公司使用電腦的時候不允許按照Docker-Desktop&#xff0c;我的宿主機其實是MAC&#xff0c;我習慣上還是在centsos上面安裝,就發現這件過去很簡單的事情居然搗鼓了我蠻久&#xff0c;記錄一下。 容器環境 我直接安…

機器人大腦的進化:Physical Intelligence如何用“知識隔離“破解VLA模型三大難題

目錄 引言&#xff1a;當GPT遇上機器人手臂 第一章&#xff1a;VLM 與 VLA的介紹 VLM (Vision-Language Model) - 視覺語言模型 VLA (Vision-Language Agent) - 視覺語言智能體 VLM和VLA的對比 第二章&#xff1a;VLA模型的進化史 - 從"口述指揮"到"精確控…

LeetCode 662. 二叉樹的最大寬度

文章目錄 LeetCode 662. 二叉樹的最大寬度題目描述思路Golang 代碼 LeetCode 662. 二叉樹的最大寬度 記錄一次刷題的感悟。這道題目是我人生第一次面試的時候的手撕題目&#xff0c;但臨場的時候面試官沒有為難我&#xff0c;他考察的問題是求二叉樹的最大寬度&#xff0c;但是…

【linux】bash腳本中括號問題

在 Bash 腳本里&#xff0c;中括號 [ ] 其實是 test 命令的同義詞&#xff0c;[ 是一個命令&#xff0c;] 是該命令的最后一個參數&#xff0c;所以中括號內外的空格會影響命令執行&#xff0c;下面詳細說明&#xff1a; 中括號內側空格 中括號內側與操作數之間必須有空格&…

Ruoyi(若依)整合websocket實現信息推送功能(消息鈴鐺)

實現消息推送功能 來了&#xff0c;來了&#xff0c;大家做系統應該是最關心這個功能。 【思路】 需求&#xff1a;對全系統【所有的業務操作】進行消息推送&#xff0c;有【群發】、【私發】功能、處理【消息狀態&#xff08;未讀/已讀&#xff09;】&#xff0c;websocket持…

小白的進階之路系列之十五----人工智能從初步到精通pytorch綜合運用的講解第八部分

torch.nn 究竟是什么? PyTorch 提供了設計精良的模塊和類,如 torch.nn、torch.optim、Dataset 和 DataLoader,幫助你創建和訓練神經網絡。為了充分利用它們的能力并根據你的問題進行定制,你需要真正理解它們到底在做什么。為了幫助你理解這一點,我們將首先在不使用這些模…

JavaScript 數據結構詳解

最近在復習JavaScript的基礎知識&#xff0c;和第一次學確實有了很不一樣的感受&#xff0c;第一次學的比較淺&#xff0c;但是回頭再進行學習的時候&#xff0c;發現有很多遺漏的東西&#xff0c;所以今天想分享一下新學到的知識&#xff0c;后面會一點一點補充更新 JavaScrip…

c++面試題(14)------順時針打印矩陣

操作系統&#xff1a;ubuntu22.04 IDE:Visual Studio Code 編程語言&#xff1a;C11 題目描述 輸入一個矩陣&#xff0c;按照從外向里以順時針的順序依次打印出每一個元素。 例如&#xff1a; 輸入矩陣&#xff1a; [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ] ]輸出&…

《Go語言圣經》defer

《Go語言圣經》defer 核心概念&#xff1a;defer語句的執行時機 defer是Go語言的一個關鍵字&#xff0c;它的作用是&#xff1a;延遲執行一個函數調用&#xff0c;該調用會在包圍它的函數返回前一刻執行。 關鍵點&#xff1a; defer語句會在函數即將返回時執行&#xff0c;…

WEB3 的 WebSocket Provider連接方式

1. 什么是 WebSocket Provider? WebSocket Provider 是 web3.js 中用于通過 WebSocket 協議 與以太坊節點(如 Infura、Geth、Parity)建立持久化連接的通信方式。它允許雙向實時數據傳輸,適用于需要實時監聽區塊鏈事件的場景。 核心特點 雙向通信:客戶端和服務器可以主動…

三國大模型:智能重構下的亂世文明圖譜

引言&#xff1a;當赤壁烽煙遇見深度學習 一件動態的《全本三國演義》正通過全息投影技術演繹群雄逐鹿的史詩。這個虛實交融的場景&#xff0c;恰似三國大模型技術的隱喻——以人工智能為紐帶&#xff0c;連接起漢末三國的烽火狼煙與數字時代的文明重構。作為人工智能與歷史學…