Excel 檔案匯出 js-xlsx合併單元格的實現 (vue)
頁面資料如下圖:
export default { data() { return { tableData: [], colData: [], originData: [{"skuId":"00001","skuName":"nameSku0001","w00001":{"warehouseId":"w00001","warehouseName":"倉庫1","quantity":50,"lockQuantity":5,"availableQuantity":45},"w00002":{"warehouseId":"w00002","warehouseName":"倉庫2","quantity":200,"lockQuantity":5,"availableQuantity":195},"w00003":{"warehouseId":"w00003","warehouseName":"倉庫3","quantity":40,"lockQuantity":1,"availableQuantity":39}},{"skuId":"00002","skuName":"nameSku0002","warehouseItem":[{"warehouseId":"w00001","warehouseName":"倉庫1","quantity":100,"lockQuantity":5,"availableQuantity":95},{"warehouseId":"w00002","warehouseName":"倉庫2","quantity":200,"lockQuantity":5,"availableQuantity":195},{"warehouseId":"w00003","warehouseName":"倉庫3","quantity":5,"lockQuantity":5,"availableQuantity":0}],"w00001":{"warehouseId":"w00001","warehouseName":"倉庫1","quantity":100,"lockQuantity":5,"availableQuantity":95},"w00002":{"warehouseId":"w00002","warehouseName":"倉庫2","quantity":200,"lockQuantity":5,"availableQuantity":195},"w00003":{"warehouseId":"w00003","warehouseName":"倉庫3","quantity":5,"lockQuantity":5,"availableQuantity":0}},{"skuId":"00003","skuName":"nameSku0003","warehouseItem":[{"warehouseId":"w00001","warehouseName":"倉庫2","quantity":100,"lockQuantity":5,"availableQuantity":95},{"warehouseId":"w00002","warehouseName":"倉庫2","quantity":200,"lockQuantity":5,"availableQuantity":195},{"warehouseId":"w00003","warehouseName":"倉庫3","quantity":50,"lockQuantity":5,"availableQuantity":45}],"w00001":{"warehouseId":"w00001","warehouseName":"倉庫2","quantity":100,"lockQuantity":5,"availableQuantity":95},"w00002":{"warehouseId":"w00002","warehouseName":"倉庫2","quantity":200,"lockQuantity":5,"availableQuantity":195},"w00003":{"warehouseId":"w00003","warehouseName":"倉庫3","quantity":50,"lockQuantity":5,"availableQuantity":45}}] } } methods: { initData() { this.tableData = this.originData.map(res => { res.warehouseItem.forEach(item => { res[item.warehouseId] = item }) return res }) this.originData[0].warehouseItem.forEach((res) => { this.colData.push({ dataItem: res.warehouseId, dataName: res.warehouseName }) }) }, exportList() { const wscols = [ { wpx: 220 } // 第一列寬度設定單位px ] /** * 合併單元格元素(decode_range方法解析資料格式) { s: { //s start 開始 c: 1,//cols 開始列 r: 0 //rows 開始行 }, e: {//e end 結束 c: 4,//cols 結束列 r: 0 //rows 結束行 } } */ const wsMerge = [XLSX.utils.decode_range('A1:A2')] /** 頭部-行列資訊*/ const header1 = this.colData.map(res => res.dataName).concat('合計') header1.map((res, idx, array) => { const hdMergeObj = { s: { r: 0 }, e: { r: 0 } } if ((idx + 2) % 1 === 0) { array.splice(3 * idx + 1, 0, '', '') hdMergeObj['s']['c'] = 3 * idx + 1 hdMergeObj['e']['c'] = hdMergeObj['s']['c'] + 2 wsMerge.push(hdMergeObj) } return res }) const header2 = this.colData.map(() => '庫存數量').concat('庫存數量') header2.map((res, idx, array) => { if ((idx + 2) % 1 === 0) { array.splice(3 * idx + 1, 0, '鎖定數量', '可用數量') } return res }) const ws = XLSX.utils.aoa_to_sheet([ ['商品資訊'].concat(header1), [''].concat(header2) ]) // console.log('header1', ['商品資訊'].concat(header1)) // console.log(header2) /** 商品資訊-行列資訊*/ const skuInfo = this.tableData.map(res => res.skuId + '\r\n' + res.skuName) XLSX.utils.sheet_add_aoa(ws, skuInfo.map(res => [res]), { origin: 'A3' }) /** 倉庫-行列資訊(庫存數量,鎖定數量,可用數量)*/ const unAllowed = ['skuId', 'skuName', 'warehouseItem'] const sheetData = this.tableData.map((data) => { const filterItem = Object.assign({}, data) Object.keys(filterItem) .filter(key => unAllowed.includes(key)) .forEach(key => delete filterItem[key]) // 重構完資料 let warehouseDatas = [] Object.values(filterItem).forEach(res => { warehouseDatas = warehouseDatas.concat([res.quantity]).concat([res.lockQuantity]).concat([res.availableQuantity]) return warehouseDatas }) return warehouseDatas }) // console.log('sheetData', sheetData) XLSX.utils.sheet_add_aoa(ws, sheetData, { origin: { r: 2, c: 1 }}) /** 合計-行列資訊*/ const totalData = this.tableData.map(row => { const totlal_quantity = Object.values(row.warehouseItem).map(res => res.quantity).reduce((accumulator, currentValue) => accumulator + currentValue) const totlal_lockQuantity = Object.values(row.warehouseItem).map(res => res.lockQuantity).reduce((accumulator, currentValue) => accumulator + currentValue) const totlal_availableQuantity = Object.values(row.warehouseItem).map(res => res.availableQuantity).reduce((accumulator, currentValue) => accumulator + currentValue) return [totlal_quantity, totlal_lockQuantity, totlal_availableQuantity] }) // console.log('total', totalData, this.colData.length * 3 + 1) XLSX.utils.sheet_add_aoa(ws, totalData, { origin: { r: 2, c: this.colData.length * 3 + 1 }}) // 匯出 const wb = XLSX.utils.book_new() XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') ws['!cols'] = wscols // wsMerge.push(XLSX.utils.decode_range('B1:D1')) // 測試資料 倉庫1模擬資料 ws['!merges'] = wsMerge console.log(wsMerge) XLSX.writeFile(wb, '庫存報表按SKU.xlsx') } } }
匯出效果如下圖:
相關推薦
Excel 檔案匯出 js-xlsx合併單元格的實現 (vue)
頁面資料如下圖: export default { data() { return { tableData: [],
java將資料匯出,帶有合併單元格的excel--jxls技術
jxls技術可以生成各種樣式的報表,非常好用,深深地喜歡上了這個。說起用這個還是比較有意思的,當時專案有個匯出表格的功能,但是沒能合併單元格,客戶不是很滿意,當時專案中大家都說弄不了,我想著自己網上查查吧,就查到了這個,試了一下午完成了,很有成就感哪,哈哈。
js控制合併單元格-行/列
//函式說明:合併指定表格(表格id為_w_table_id)指定列(列數為_w_table_colnum)的相同文字的相鄰單元格 //引數說明:_w_table_id 為需要進行合併單元格的表格的id。如在HTMl中指定表格 id="data" ,此引數應為 #data
poi匯出資料(需要合併單元格)
import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.lang.reflect.Invocation
Excel應用技巧:不規則合併單元格之批量填充序列
大家好!上一篇文章中,xyz給大家分享了合併單元格的排序方法。今天咱們再來說說合並單元格的另一個
C# Excel 行高,列寬,合併單元格,單元格邊框線,凍結
private _Workbook _workBook = null; private Worksheet _workSheet = null; private Excel.Application _excelApplicatin = null; _excelApplic
PHPexcel匯出_帶合併單元格/邊框背景/_有效果圖_thinkphp
##供稿單位匯出 public function gonggao_excel(){ $color='0xCC000000'; //查詢所有供稿單位 $order='paixu asc,id desc';
Easyui datagrid 動態合併單元格實現
最近在頁面開發商遇到了一個新需求,要求在datagrid中實現同名單元格縱向合併效果,類似這樣 官方demo中用的是死資料,不符合實際要求。通過對檢視API,確定datagrid的合併單元格通過提供起始位置(index),合併長度(rowspan)以及合併欄位名(field)。於是
table合併單元格 colspan(跨列)和rowspan(跨行)
</td> </tr> <tr> <td width= "25% "> </td> <td width= "25% "> </td>
Spread for Windows Forms快速入門(4)---常用的單元格型別(上)
單元格型別定義了在單元格中呈現的資訊的型別,以及這種資訊如何顯示,使用者如何與其進行互動。單元格型別可以被賦給單個的單元格,整行或者整列。 使用者可以使用兩種不同的單元格型別對錶單中的單元格進行設定: 一種是可以簡單地關聯於單元格的文字格式,另一種就是顯示控制元件或者圖形化
python讀取excel檔案中所有sheet表格:openpyxl模組(二)
通過openpyxl模組 迴圈遍歷excel檔案中所有sheet表格。 excel檔案 e:\\t.xlsx ,有2個sheet: sales 客戶編碼 年月 銷售額(萬元) JLF0001 20
ProtoBuf.js – Protocol Buffers的Javascript實現(轉)
line 解決 進行 序列 blank read tar com json 原文鏈接:ProtoBuf.js – Protocol Buffers的Javascript實現 推薦前端網址:http://keenwon.com/ 在Javascript裏比較常見的數據格式就是
Node.js處理 Access-Control-Allow-Origin (Vue)
第一步:安裝cors庫 npm install koa2-cors 第二步:進入APP.JS檔案 const cors=require('koa2-cors') //引入 第三步:USE app.use(cors()); &
Laravel Excel實現Excel/CSV檔案匯入匯出的功能詳解(合併單元格,設定單元格樣式)
Laravel Excel實現Excel/CSV檔案匯入匯出(合併單元格,設定單元格樣式) 這篇文章主要給大家介紹了關於在Laravel中如何使用Laravel Excel實現Excel/CSV檔案匯入匯出功能的相關資料,文中通過示例程式碼介紹的非常詳細,對大
HSSFWorkbook——匯出excel,動態合併單元格
一 前言 開發中,對於匯出一個excel表格這樣的功能很常見,這裡談談我所知道的相關知識 二 需求 匯出某個套餐所關聯的所有專案的一個Excel表格 三 HSSFWorkbook //建立一個Excel檔案 HSSFWorkbook&
POI 匯出Excel實現合併單元格以及列自適應寬度
目錄 參考推薦: POI 匯出Excel 1. 合併單元格 POI是apache提供的一個讀寫Excel文件的開源元件,在操作excel時常要合併單元格,合併單元格的方法是: public CellRang
JXL匯出EXCEL合併單元格
圖片 import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.servlet.h
POI匯出Excel設定單元格格式2--建立與設定Excel合併單元格
POI建立與設定Excel合併單元格 話不多說上栗子 //準備工作 XSSFWorkbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("sheet1"); XSSFCreationHelper creationHel
java poi 讀取有合併單元格的EXCEL檔案
資料的樣子是這樣的 public String addReportByExcel(Long userId,InputStream inputStream,String fileName) throws BusinessException{ String mes
java匯出Excel合併單元格
網上java匯出excel表格併合並單元格的資料不完全,我整理了一份,並親測能用,附截圖。 ①java匯出excel用到POI所有jar包,大家可以直接到下面地址下載點選開啟連結 ②模擬資料類 package org; public class WorkSheetDet