您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
2021/8/25 下午8:16:44
// ==UserScript== // @name 美团-导出表格 // @namespace Violentmonkey Scripts // @match https://km.sankuai.com/page/* // @grant none // @version 2.0 // @author - // @description 2021/8/25 下午8:16:44 // @require https://cdn.bootcdn.net/ajax/libs/exceljs/4.2.1/exceljs.min.js // ==/UserScript== (function () { 'use strict'; let exportBtn = null; const createUserList = ['杨佳丽', '庞布斯', 'pangbusi', 'yangjiali03']; let timerStart = +new Date(); let reqId = null; // Your code here... function init() { if (+new Date() > timerStart + 5000) { cancelAnimationFrame(reqId) } else { try { let createUser = document.getElementsByClassName('ct-user-name')[0].innerText; if (createUserList.includes(createUser)) { exportBtn = document.createElement("button"); exportBtn.innerText = "导出" exportBtn.style.width = "180px"; exportBtn.style.height = "80px"; exportBtn.style.align = "center"; exportBtn.style.background = "#6496c8"; exportBtn.style.border = "none";//52 exportBtn.style.borderRadius = "10px" exportBtn.style.color = "#fff"; exportBtn.style.position = "absolute" exportBtn.style.left = "1000px" exportBtn.style.top = "100px" exportBtn.id = "but" document.querySelector('body').appendChild(exportBtn) } cancelAnimationFrame(reqId) } catch(e) { reqId = requestAnimationFrame(init) } } } function exportExcel(retData) { const workbook = new ExcelJS.Workbook(); // 在加载时强制工作簿计算属性 workbook.calcProperties.fullCalcOnLoad = true; // 创建一个具有属性的可写的新工作表 const worksheet = workbook.addWorksheet('sheet', { properties: { outlineLevelCol: 1 } }); // 使工作表可见 worksheet.state = 'visible'; // 之后调整属性(工作表读写器不支持该操作) worksheet.properties.outlineLevelCol = 2; worksheet.properties.defaultRowHeight = 15; // 添加列标题并定义列键和宽度 // 注意:这些列结构仅是构建工作簿的方便之处,除了列宽之外,它们不会完全保留。 worksheet.columns = [ { header: '姓名', key: 'name', width: 20 }, { header: '出勤天数系数(标准值:5天)', key: 'attend', width: 40 }, { header: '5', key: 'coefficient_1', width: 10, outlineLevel: 1 }, { header: '一面数1(来自业务侧和Recruiter侧简历的安排一面数)', key: 'interview_1', width: 60 }, { header: '50', key: 'coefficient_2', width: 10 }, { header: '有效简历数(自主Sourcing简历评审通过数量)', key: 'valid_resume', width: 60 }, { header: '50', key: 'coefficient_3', width: 10 }, { header: '一面数2(自主Sourcing简历的安排一面数)', key: 'interview_2', width: 60 }, { header: '25', key: 'coefficient_4', width: 10 }, { header: '面试通过数(自主Sourcing简历通过数量)', key: 'count_pass', width: 60 }, { header: '1', key: 'coefficient_5', width: 10 }, { header: '总计完成度', key: 'total_completion', width: 20 }, { header: '', key: 'pass_interviewer', width: 50 }, ]; retData.forEach((item) => { worksheet.addRow(item); }) // 设置每一列样式 居中 const row = worksheet.getRow(1); row.eachCell((cell, rowNumber) => { worksheet.getColumn(rowNumber).alignment = { vertical: "middle", horizontal: "center", }; }); workbook.xlsx.writeBuffer().then((buffer) => { writeFile('数据.xlsx', buffer); }); // 将二进制转为Excel并下载 const writeFile = (fileName, content) => { let a = document.createElement("a"); let blob = new Blob([content], { type: "text/plain" }); a.download = fileName; a.href = URL.createObjectURL(blob); a.click(); }; } function bindExportEvent(exportBtn) { exportBtn.onclick = function () { // read & deal Data const tbs = [...document.getElementsByTagName('table')].slice(1); const [data, indicator] = [...tbs] const data_trs = [...data.children[2].children].slice(1); // 第二张表,未用到 // const indicator_trs = [...data.children[2].children].slice(1); let retData = [] const originData = [] data_trs.forEach(item => { let temp_Arr = [] item.children.forEach(value => { temp_Arr.push(value.innerText) }) originData.push(temp_Arr) // let formula = temp_Arr[3] / temp_Arr[4] * 0.4 + temp_Arr[5] / temp_Arr[6] * 0.1 + temp_Arr[7] / temp_Arr[8] * 0.4 + Number(temp_Arr[9]) !== 0 ? Number(temp_Arr[9]) * 0.1 : 0 }) originData.forEach(item => { let ret = [] ret[0] = item[0] ret[1] = item[1] ret[2] = item[1] / 5 ret[3] = item[2] ret[4] = 50 * item[1] / 5 ret[5] = item[3] ret[6] = 50 * item[1] / 5 ret[7] = item[4] ret[8] = 25 * item[1] / 5 ret[9] = item[5] !== "" ? item[5].split('(')[0] : "" ret[10] = 1 ret[11] = (item[2] / ret[4] * 0.4) + (item[3] / ret[6] * 0.1) + (item[4] / ret[8] * 0.4) + (item[5] !== "" ? Number(ret[9]) / ret[2] * 0.1 : 0) console.log(ret, item, 123); ret[11] = (ret[11] * 100).toFixed(0) ret[12] = item[5] !== "" ? item[5].slice(1) : "" retData.push(ret) }) retData = retData.sort((a, b) => parseFloat(b[11] - parseFloat(a[11]))) retData.forEach(item => { item[11] += "%" }) } } // 主流程 init() if (exportBtn) { bindExportEvent(exportBtn) } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址