1. 程式人生 > >使用exceljs匯出部門-職位聯動下拉框的excel

使用exceljs匯出部門-職位聯動下拉框的excel


import { Workbook } from 'exceljs';

///////////////////////////////
const wb = new Workbook();
const ws = wb.addWorksheet('tb');
const dict2 = wb.addWorksheet('dict2');
const test = wb.addWorksheet('test');

const test_data = [{
	post_name: '方案',
	department_name: '產品'
}, {
	post_name: '設計',
	department_name: '產品'
}, {
	post_name: 'js開發',
	department_name: '產品'
}, {
	post_name: '部門主管',
	department_name: '產品'
}];
const departments = Array.from(test_data.reduce((p, c) => {
	p.add(c.department_name);
	return p;
}, new Set()));
dict2.addRows(departments);

ws.columns = [
	{ header: '員工編號', key: 'staff_no', width: 20 },	// A1
	{ header: '員工姓名', key: 'staff_name', width: 20 },	// B2
	{ header: '性別', key: 'sex', width: 20 },	// C3
	{ header: '部門名稱', key: 'department_name', width: 20 },	// D4
	{ header: '崗位名稱', key: 'post_name', width: 20 },	// E5
	{ header: '身份證號', key: 'id_no', width: 20 },	// 6
	{ header: '出生日期', key: 'birthday', width: 20 },	// 7
	{ header: '年齡', key: 'age', width: 20 },	// 8
	{ header: '聯絡電話', key: 'contact_number', width: 20 },	// 9
	{ header: '入職時間', key: 'staff_hiredate', width: 20 },	// 10
	{ header: '員工狀態', key: 'staff_state', width: 20 }	// 11
];
///////////////////////////
new Array(5000).fill(0).forEach((_, idx) => {
	const row = idx + 2;
	// 渲染部門下拉框
	ws.getCell(row, 4).dataValidation = {
		type: 'list',
		formulae: [`=dict2!$C$2:$C${departments.length}`]
	};
	// 使用indirect函式新增引用, 渲染崗位
	ws.getCell(row, 5).dataValidation = {
		type: 'list',
		formulae: [`=INDIRECT(D${row})`]
	};
});

// 新增名稱管理器
const _data = test_data.reduce((p, c: any) => {
	if (!p.has(c.department_name)) {
		p.set(c.department_name, [c.post_name]);
	} else {
		const arr = p.get(c.department_name);
		arr.push(c.post_name);
	}
	return p;
}, new Map<string, string[]>());

const department_names = Array.from(_data.keys());
const post_names = Array.from(_data.values());
test.addRows(post_names);

test.eachRow(function (row, i) {
	const department_name = department_names[i - 1];
	console.log(department_name, i);
	row.eachCell(function (cell, colNumber) {
		cell.addName(department_name);
	});
});

await wb.xlsx.writeFile('/home/feidao/Desktop/模板列表.xlsx');
return;
// const buff = await wb.xlsx.writeBuffer();
// return {
//  buff,
//  content_type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
//  attachment: '模板列表.xlsx'
// };

相關推薦

使用exceljs匯出部門-職位聯動excel

import { Workbook } from 'exceljs'; /////////////////////////////// const wb = new Workbook(); const ws = wb.addWorksheet('tb'); const d

原生的三級聯動

for .org char endif cti ima nal height local 最近在工作中遇到了一個需要三級聯動的功能,之前也只用到過地區聯動的三級菜單,還是用的插件,這次就不沒那麽好了,沒辦法,自己寫咯,我下面的寫出來的是原生的;寫的不好,不要噴我 一共有三個

前端省市區(縣)三級聯動

呼叫省市區的思想要先確定下來,一般是有多處呼叫,所以將省市區三級聯動抽取為工具js! 靜態頁面例子: <html> <head> <script type="text/javascript" src="address.js"></script

兩級聯動的簡單實現

最近經常用到二級選單的情況,改變一個另一個跟著變化。自己寫了一個簡單的JSP頁面,大家給點意見,另外大家這種情況都是怎麼做的,當然Ajax除外![code]<%! public final String _JS_GET_METHOD_NAME="_do_get_seco

利用ajax實現二級聯動

下拉框二級聯動,用ajax來實現是已經非常成熟的技術了。但對於我這個java菜鳥來說,真的是費了九牛二虎之力,各種百度,各種測試。終於得以實現。程式碼相對於網上的容易理解些。現把程式碼和我在編寫的過程中遇到的問題貼出來,對自己也是一個總結,同時也希望能幫助到跟我一樣的菜鳥。

javascript年月日三級聯動

/* 在你的頁面需要這三條html程式碼 <select id="y" onchange="funy(this)"></select> <select id="m" onchange="fu

android:省市二級聯動

xml佈局檔案: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

基於Vue的三級聯動

展示 html部分 使用v-model設定和獲取select的值 使用v-for顯示option列表 使用:value設定option屬性 使用{{}}輸出內容 <div i

自己總結封裝了多級聯動js

/*支援多級下拉框 * data:查詢出來的所有資料,經過處理縮排的多級資料。子集用固定child, * pdata:選中的資料。字串用逗號隔開例:'4,57,557'如果沒有就空字串''; *

ASP.NET兩級聯動

  介紹一個剛做的例子吧!   使用者在提出問題時需要選擇物件機構,而物件機構的分類在一個叫做category的表中儲存。下面介紹一下使用者從分類下拉框中選擇分類後出現機構下拉框。   前臺頁面中放置兩個下拉框: 分類:<asp:dropdownlist id="ddl

JSON+JS實現省市縣三級聯動

function Area(selector){ if (!Area.ALL_AREAS) { throw new Error('areas not init!'); } this.selector = selector; $(this.selecto

POI匯出帶級聯excel

效果: 所需jar包: poi-3.8-20120326.jar demo: import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExceptio

初學ajax,實現使用者名稱重複提示、二級/三級聯動

初學ajax,實現非同步操作!                 以下為三級聯動下拉框部分程式碼 jsp頁面部分程式碼 <table> <tr> <th>下拉框:</th> &l

sharepoint2010實現聯動(不用程式碼)

近期由於實習需要,開始學習sharepoint. 之前對於sharepoint是完全不瞭解,連聽都沒聽過。不過從現在開始瞭解啦。 公司近期將原來用的sharepoint2007升級為2010的,很多功能是2007不能實現的。比如這個聯動下拉框的實現,在sharepoint2

Android實現三級聯動 列表spinner

布局 idt ets county wid 分享圖片 n) 技術分享 parent 主要實現辦法:動態加載各級下拉值的適配器 在監聽本級下拉框,當本級下拉框的選中值改變時,隨之修改下級的適配器的綁定值 XML布局:

路由機構 -- 獲取當前所屬部門

當前 esp success post war pro -- dia init //下拉框獲取當前所屬部門 function initRespOrg(){ $.ajax({ type: "POST", url: "/tms/

Easyui多個聯動效果

code this .com cti 下拉框聯動 reload tex count 多個 好久沒寫前端了,以前在做多級聯動的時候,用的是easyui的tree結構,但是需要一次性全部加載,不是按需加載,性能不好,退而求其之,用多個下拉框做 eayui的combobox 有

的二級聯動

fff append 二級 前臺 數據庫表 option return 那種 後臺 需求描述:點擊服務類型下拉框,選擇後,後邊的服務類別會自動的匹配到與服務類型相對應的,臥槽,繞來繞去的,說不明白啦。舉個例子:服務類型A,B,C三個可選,當選擇A的時候,服務類別會自動填充上

ASP.NET MVC聯動

這個case主要是我在做專案的時候遇到一個需要根據input控制元件輸入的內容,動態填充dropdown list中的內容, 實現二者聯動的需求。在搜尋了一些資源後,這篇部落格解決了我的問題,所以記錄並轉載一下。 轉載自: https://www.jb51.net/article/88986.htm 資料

DJANGO實現的二級聯動

環境:PYTHON2.7+DJANGO1.9 有資料表如下,就是想在每次下拉框選擇dnsname欄位的時候,帶出對應的hostipaddr欄位 實現如下 models.py from __future__ import unicode_literals from django