首先npm下载两个依赖

npm install xlsx --save
npm install xlsx-style --save

还需要下载一个浏览器文件下载依赖

npm install file --save

引入xlsx-style会产生报错,需要在vue.config.js配置下
vue.config.js

module.exports = {chainWebpack(config) {config.externals({ './cptable': 'var cptable' })}
}

excel.js

/*
在这里统一进行处理,
页面上把数据传过来就行了
*/
import * as XLSX from 'xlsx'
import { saveAs } from 'file-saver'
import XLSXStyle from 'xlsx-style'
import XSU from './xlsxStyle.utils'
// 自动宽度计算
function AutoWidth(ws, arr) {// 设置worksheet每列的最大宽度const colWidth = arr.map(row => row.map(val => {// 判断是否为null/undefinedif (val == null) {return { wch: 10 }} else if (val.toString().charCodeAt(0) > 255) { // 判断是否为中文return { wch: val.toString().length * 2 }} else {return { wch: val.toString().length }}}))// 以第一行为初始值const result = colWidth[0]for (let i = 1; i < colWidth.length; i++) {for (let j = 0; j < colWidth[i].length; j++) {if (result[j].wch < colWidth[i][j].wch) {result[j].wch = colWidth[i][j].wch}}}ws['!cols'] = result
}// 数组转换成JSON
function formatJSON(key, data) {return data.map(v => key.map(i => { return v[i] }))
}// 字符串转ArrayBuffer
function s2ab(s) {const buf = new ArrayBuffer(s.length)const view = new Uint8Array(buf)for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFFreturn buf
}
/*
**将我的数据转换成xlsx需要的
*/
export function exportDataToExcelList(data,packageNamesIndex) {const header = [] // 头部表头,可以为空,和下面的key一一对应const key = ['productName', 'productCode', 'priceText', 'num', 'count']; // 表格各项对应key值  // data可以是这样的数据/*data = [{productName:'productName',productCode:'productCode',priceText:'priceText',num:'num',count:'count'}]*/const params = {header,key,data,autoWidth: true, // 是否自动宽度fileName: '产品预算清单', // 文件名字bookType: 'xlsx', // 文件类型};// returnexportDataToExcel(params,packageNamesIndex);
}
// 这个是业务逻辑,可以忽略
export function getPruductData(arr,count) {let result = []let packageNamesIndex = []// console.log(arr);const array = JSON.parse(JSON.stringify(arr))array.map((ele) => {if (ele.serveType.length) {ele.serveType.map((child, index) => {if (index === 0) {result.push({ productName: ele.packageName ,bold:true}); packageNamesIndex.push(result.length)result.push({productName: '产品服务名称',productCode: '预算编码',priceText: '单价',num: '购买数量',count: '金额'})}if (child.productType.length) {child.productType.forEach((item) => {result.push(item)})}})}})result.push({num: '合计年预算',count})// console.log(JSON.stringify(arr));// returnexportDataToExcelList(result,packageNamesIndex)return result
}
// 导出EXCEL表格
export function exportDataToExcel({header, // 表头名数组key, // 列对应字段数组data, // 需要导出数据的数组fileName, // 导出文件名autoWidth = true, // 是否自动宽度bookType = 'xlsx' // 导出文件格式} = {},packageNamesIndex) {// 创建Workbook对象const wb = XLSX.utils.book_new()const arr = formatJSON(key, data)fileName = fileName || 'excel-list'// arr.unshift(header)// 将数组数据转换为worksheetconst ws = XLSX.utils.aoa_to_sheet(arr)if (autoWidth) {AutoWidth(ws, arr)}// 向Workbook对象中追加worksheet和fileNameXLSX.utils.book_append_sheet(wb, ws, fileName)// 调用样式处理方法const wbStyle= utilsTest(wb,packageNamesIndex)// 生成EXCEL的配置项// 这里调用XLSXStyle 来调整excel样式const wbout = XLSXStyle.write(wbStyle, {bookType: bookType,bookSST: false,type: 'binary'})// return// 浏览器下载saveAs(new Blob([s2ab(wbout)], {type: 'application/octet-stream'}), `${fileName}.${bookType}`)
}
// 表格样式编辑
function utilsTest(wb,packageNamesIndex=[]) {packageNamesIndex?.forEach(ele=>{XSU.setFontBold(wb,wb.SheetNames[0],`A${ele}`,true) })XSU.setAlignmentWrapTextAll(wb,wb.SheetNames[0],true)XSU.setFontTypeAll(wb,wb.SheetNames[0],'等线')XSU.setAlignmentHorizontalAll(wb,wb.SheetNames[0],'center')XSU.setAlignmentVerticalAll(wb,wb.SheetNames[0],'center')XSU.setFontSizeAll(wb,wb.SheetNames[0],11)return wb
}
// 从Excel文件中获取表格头
function getHeaderRow(sheet) {const headers = []// 将 A1:G8 这种字符串转换为行列对象const range = XLSX.utils.decode_range(sheet['!ref'])let Cconst R = range.s.r// 从第一列开始,遍历范围中的每一列for (C = range.s.c; C <= range.e.c; ++C) {// 将行列对象转换为 A1 这种字符串const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]// 用默认值替换let hdr = 'UNKNOWN ' + Cif (cell && cell.t) hdr = XLSX.utils.format_cell(cell)headers.push(hdr)}return headers
}// 读取Excel文件
export function readDataFromExcel(data, type) {// 读取Excel文件并保存到Workbook对象const workbook = XLSX.read(data, { type: type })const firstSheetName = workbook.SheetNames[0]// 获取Workbook对象的worksheetconst worksheet = workbook.Sheets[firstSheetName]const header = getHeaderRow(worksheet)// 将worksheet转化成数组const results = XLSX.utils.sheet_to_json(worksheet)return { header, results }
}export default {exportDataToExcel,readDataFromExcel,exportDataToExcelList,getPruductData,}

xlsxStyle.utils

/*
@author Ctrl
@version 20190917
@aim 对xlsx-style方法进行二次封装 方便调用以导出带样式Excel
@usage XSU.xxxFunction()
*/var XSU;XSU=({//字符串转字符流s2ab: function(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;},//初始化init: function(workBook, sheetName, cell) {if (!workBook.Sheets[sheetName][cell].s) {workBook.Sheets[sheetName][cell].s = {};}},init1: function(workBook, sheetName, cell, attr) {this.init(workBook, sheetName, cell);if (!workBook.Sheets[sheetName][cell].s[attr]) {workBook.Sheets[sheetName][cell].s[attr] = {};}},init2: function(workBook, sheetName, cell, attr1, attr2) {this.init(workBook, sheetName, cell);this.init1(workBook, sheetName, cell, attr1);if (!workBook.Sheets[sheetName][cell].s[attr1][attr2]) {workBook.Sheets[sheetName][cell].s[attr1][attr2] = {};}},//根据ref的单元格范围新建范围内所有单元格,不存在的单元格置为空值,已存在的不处理initAllCell: function(workBook, sheetName) {var ref = workBook.Sheets[sheetName]["!ref"].split(":");var startCell = ref[0];var endCell = ref[1];var sc = XLSX.utils.decode_cell(startCell).c;var sr = XLSX.utils.decode_cell(startCell).r;var ec = XLSX.utils.decode_cell(endCell).c;var er = XLSX.utils.decode_cell(endCell).r;var isExist;for(c = sc; c <= ec; c++) { //初始化所有单元格for(r = sr; r <= er; r++) {var temp = XLSX.utils.encode_cell({c: c,r: r});isExist = false;for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {if (temp == cell) {isExist = true;break;}}}if (!isExist) { //单元格不存在则新建单元格XLSX.utils.sheet_add_aoa(workBook.Sheets[sheetName], [['']], {origin: temp});}}}},//单元格合并 startCell=A1 endCell=B5mergeCells: function(workBook, sheetName, startCell, endCell) {/*var sc = startCell.substr(0, 1).charCodeAt(0) - 65;var sr = startCell.substr(1);sr = parseInt(sr) - 1;var ec = endCell.substr(0, 1).charCodeAt(0) - 65;var er = endCell.substr(1)er = parseInt(er) - 1;*/var sc = XLSX.utils.decode_cell(startCell).c;var sr = XLSX.utils.decode_cell(startCell).r;var ec = XLSX.utils.decode_cell(endCell).c;var er = XLSX.utils.decode_cell(endCell).r;var merges = [{s: { //s start 始单元格c: sc, //cols 开始列r: sr //rows 开始行},e: { //e end  末单元格c: ec, //cols 结束列r: er //rows 结束行}}];if (!workBook.Sheets[sheetName]["!merges"]) {workBook.Sheets[sheetName]["!merges"] = merges;} else {workBook.Sheets[sheetName]["!merges"] = workBook.Sheets[sheetName]["!merges"].concat(merges);}return workBook;},//merges=[{s: {c: 0, r: 0},e: {c: 3, r: 0}}]mergeCellsByObj: function(workBook, sheetName, merges) {if (workBook.Sheets[sheetName]["!merges"]) {workBook.Sheets[sheetName]["!merges"] = workBook.Sheets[sheetName]["!merges"].concat(merges);} else {workBook.Sheets[sheetName]["!merges"] = merges;}return workBook;},//设置每列列宽,单位px cols= [{wpx: 45}, {wpx: 165}, {wpx: 45}, {wpx: 45}]setColWidth: function(workBook, sheetName, cols) {workBook.Sheets[sheetName]["!cols"] = cols;return workBook;},//一次性设置多样式 styles etc: /*{"font": {"sz": 14,"bold": true,"color": {"rgb": "FFFFAA00"}},"fill": {"bgColor": {"indexed": 64},"fgColor": {"rgb": "FFFFFF00"}}}*/setCellStyle: function(workBook, sheetName, cell, styles) {workBook.Sheets[sheetName][cell].s = styles;return workBook;},/*Fill*///填充颜色 fill={"bgColor": {"indexed": 64},"fgColor": {"rgb": "FFFFFF00"}}setFillStyles: function(workBook, sheetName, cell, styles) {this.init(workBook, sheetName, cell);workBook.Sheets[sheetName][cell].s.fill = styles;return workBook;},setFillStylesAll: function(workBook, sheetName, styles) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFillStyles(workBook, sheetName, cell, styles);}}},//patternType="solid" or "none"”setFillPatternType: function(workBook, sheetName, cell, patternType) {this.init1(workBook, sheetName, cell, "fill");workBook.Sheets[sheetName][cell].s.fill.patternType = patternType;return workBook;},setFillPatternTypeAll: function(workBook, sheetName, patternType) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFillPatternType(workBook, sheetName, cell, patternType);}}},//前景颜色(单元格颜色) rgb //COLOR_SPEC属性值:{ auto: 1}指定自动值,{ rgb: "FFFFAA00" }指定16进制的ARGB,{ theme: "1", tint: "-0.25"}指定主题颜色和色调的整数索引(默认值为0),{ indexed: 64} 默认值 fill.bgColorsetFillFgColor: function(workBook, sheetName, cell, COLOR_SPEC) {this.init1(workBook, sheetName, cell, "fill");workBook.Sheets[sheetName][cell].s.fill.fgColor = COLOR_SPEC;return workBook;},setFillFgColorAll: function(workBook, sheetName, COLOR_SPEC) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFillFgColor(workBook, sheetName, cell, COLOR_SPEC);}}},//使用RGB值设置颜色setFillFgColorRGB: function(workBook, sheetName, cell, rgb) {this.init2(workBook, sheetName, cell, "fill", "fgColor");workBook.Sheets[sheetName][cell].s.fill.fgColor.rgb = rgb;return workBook;},setFillFgColorRGBAll: function(workBook, sheetName, rgb) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFillFgColorRGB(workBook, sheetName, cell, rgb);}}},//单元格背景颜色(貌似没用)setFillBgColor: function(workBook, sheetName, cell, COLOR_SPEC) {this.init1(workBook, sheetName, cell, "fill");workBook.Sheets[sheetName][cell].s.fill.bgColor = COLOR_SPEC;return workBook;},setFillBgColorAll: function(workBook, sheetName, COLOR_SPEC) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFillBgColor(workBook, sheetName, cell, COLOR_SPEC);}}},//单元格背景颜色setFillBgColorRGB: function(workBook, sheetName, cell, rgb) {this.init2(workBook, sheetName, cell, "fill", "bgColor");workBook.Sheets[sheetName][cell].s.fill.bgColor.rgb = rgb;return workBook;},setFillBgColorRGBAll: function(workBook, sheetName, rgb) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFillBgColorRGB(workBook, sheetName, cell, rgb);}}},/*Font*///字体风格,可一次性在styles中设置所有font风格setFontStyles: function(workBook, sheetName, cell, styles) {this.init(workBook, sheetName, cell);workBook.Sheets[sheetName][cell].s.font = styles;return workBook;},setFontStylesAll: function(workBook, sheetName, styles) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontStyles(workBook, sheetName, cell, styles);}})},//字体 type="Calibri" setFontType: function(workBook, sheetName, cell, type) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.name = type;return workBook;},setFontTypeAll: function(workBook, sheetName, type) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontType(workBook, sheetName, cell, type);}})},//字体大小setFontSize: function(workBook, sheetName, cell, size) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.sz = size;return workBook;},setFontSizeAll: function(workBook, sheetName, size) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontSize(workBook, sheetName, cell, size);}})},//字体颜色 COLOR_SPECsetFontColor: function(workBook, sheetName, cell, COLOR_SPEC) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.color = COLOR_SPEC;//workBook.Sheets[sheetName][cell].s.font.color.rgb = rgb;return workBook;},setFontColorAll: function(workBook, sheetName, COLOR_SPEC) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontColor(workBook, sheetName, cell, COLOR_SPEC);}}},//字体颜色RGBsetFontColorRGB: function(workBook, sheetName, cell, rgb) {this.init2(workBook, sheetName, cell, "font", "color");workBook.Sheets[sheetName][cell].s.font.color.rgb = rgb;return workBook;},setFontColorRGBAll: function(workBook, sheetName, rgb) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontColorRGB(workBook, sheetName, cell, rgb);}}},//是否粗体 boolean isBoldsetFontBold: function(workBook, sheetName, cell, isBold) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.bold = isBold;return workBook;},setFontBoldAll: function(workBook, sheetName, isBold) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontBold(workBook, sheetName, cell, isBold);}}},//设置某列为粗体setFontBoldOfCols: function(workBook, sheetName, isBold, col) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {if (cell.substr(0, 1) == col) {this.setFontBold(workBook, sheetName, cell, isBold);}}}},//设置某行为粗体setFontBoldOfRows: function(workBook, sheetName, isBold, row) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {if (cell.substr(1) == row) {this.setFontBold(workBook, sheetName, cell, isBold);}}}},//是否下划线 boolean isUnderlinesetFontUnderline: function(workBook, sheetName, cell, isUnderline) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.underline = isUnderline;return workBook;},setFontUnderlineAll: function(workBook, sheetName, isUnderline) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontUnderline(workBook, sheetName, cell, isUnderline);}}},//是否斜体 boolean isItalicsetFontItalic: function(workBook, sheetName, cell, isItalic) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.italic = isItalic;return workBook;},setFontItalicAll: function(workBook, sheetName, isItalic) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontItalic(workBook, sheetName, cell, isItalic);}}},//是否删除线 boolean isStrikesetFontStrike: function(workBook, sheetName, cell, isStrike) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.strike = isStrike;return workBook;},setFontStrikeAll: function(workBook, sheetName, isStrike) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontStrike(workBook, sheetName, cell, isStrike);}}},//是否outline boolean isOutlinesetFontOutline: function(workBook, sheetName, cell, isOutline) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.outline = isOutline;return workBook;},setFontOutlineAll: function(workBook, sheetName, isOutline) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontOutline(workBook, sheetName, cell, isOutline);}}},//是否阴影 boolean isShadowsetFontShadow: function(workBook, sheetName, cell, isShadow) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.shadow = isShadow;return workBook;},setFontShadowAll: function(workBook, sheetName, isShadow) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontShadow(workBook, sheetName, cell, isShadow);}}},//是否vertAlign boolean isVertAlignsetFontVertAlign: function(workBook, sheetName, cell, isVertAlign) {this.init1(workBook, sheetName, cell, "font");workBook.Sheets[sheetName][cell].s.font.vertAlign = isVertAlign;return workBook;},setFontVertAlignAll: function(workBook, sheetName, isVertAlign) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontVertAlign(workBook, sheetName, cell, isVertAlign);}}},/*numFmt*/setNumFmt: function(workBook, sheetName, cell, numFmt) {this.init(workBook, sheetName, cell);workBook.Sheets[sheetName][cell].s.numFmt = numFmt;return workBook;},setNumFmtAll: function(workBook, sheetName, numFmt) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setNumFmt(workBook, sheetName, cell, numFmt);}}},/*Alignment*///文本对齐 alignment={vertical:top,horizontal:top,}setAlignmentStyles: function(workBook, sheetName, cell, styles) {this.init(workBook, sheetName, cell);workBook.Sheets[sheetName][cell].s.alignment = styles;return workBook;},setAlignmentStylesAll: function(workBook, sheetName, styles) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setAlignmentStyles(workBook, sheetName, cell, styles);}})},//文本垂直对齐 vertical   ="bottom" or "center" or "top"setAlignmentVertical: function(workBook, sheetName, cell, vertical) {this.init1(workBook, sheetName, cell, "alignment");workBook.Sheets[sheetName][cell].s.alignment.vertical = vertical;return workBook;},setAlignmentVerticalAll: function(workBook, sheetName, vertical) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setAlignmentVertical(workBook, sheetName, cell, vertical);}})},//文本水平对齐 "bottom" or "center" or "top"setAlignmentHorizontal: function(workBook, sheetName, cell, horizontal) {this.init1(workBook, sheetName, cell, "alignment");workBook.Sheets[sheetName][cell].s.alignment.horizontal = horizontal;return workBook;},setAlignmentHorizontalAll: function(workBook, sheetName, horizontal) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setAlignmentHorizontal(workBook, sheetName, cell, horizontal);}})},//自动换行setAlignmentWrapText: function(workBook, sheetName, cell, isWrapText) {this.init1(workBook, sheetName, cell, "alignment");workBook.Sheets[sheetName][cell].s.alignment.wrapText = isWrapText;return workBook;},setAlignmentWrapTextAll: function(workBook, sheetName, isWrapText) {Object.keys(workBook.Sheets[sheetName]).forEach(cell=>{if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setAlignmentWrapText(workBook, sheetName, cell, isWrapText);}})},setAlignmentReadingOrder: function(workBook, sheetName, cell, readingOrder) {this.init1(workBook, sheetName, cell, "alignment");workBook.Sheets[sheetName][cell].s.alignment.readingOrder = readingOrder;return workBook;},setAlignmentReadingOrderAll: function(workBook, sheetName, readingOrder) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setAlignmentReadingOrder(workBook, sheetName, cell, readingOrder);}}},//文本旋转角度 0-180,255 is special, aligned verticallysetAlignmentTextRotation: function(workBook, sheetName, cell, textRotation) {this.init1(workBook, sheetName, cell, "alignment");workBook.Sheets[sheetName][cell].s.alignment.textRotation = textRotation;return workBook;},setAlignmentTextRotationAll: function(workBook, sheetName, textRotation) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setAlignmentTextRotation(workBook, sheetName, cell, textRotation);}}},/*Border*///单元格四周边框默认样式borderAll :{top: {style: 'thin'},bottom: {style: 'thin'},left: {style: 'thin'},right: {style: 'thin'}},//边框默样式:细线黑色defaultBorderStyle : {style: 'thin'},//边框 styles={top:{ style:"thin",color:"FFFFAA00"},bottom:{},...}setBorderStyles: function(workBook, sheetName, cell, styles) {this.init(workBook, sheetName, cell);workBook.Sheets[sheetName][cell].s.border = styles;return workBook;},setBorderStylesAll: function(workBook, sheetName, styles) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderStyles(workBook, sheetName, cell, styles);}}},//设置单元格上下左右边框默认样式setBorderDefault: function(workBook, sheetName, cell) {this.init(workBook, sheetName, cell);workBook.Sheets[sheetName][cell].s.border = this.borderAll;return workBook;},//设置所有单元默认格边框setBorderDefaultAll: function(workBook, sheetName) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderDefault(workBook, sheetName, cell);}}},//上边框setBorderTop: function(workBook, sheetName, cell, top) {this.init(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.top = top;return workBook;},setBorderTopAll: function(workBook, sheetName, top) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderTop(workBook, sheetName, cell, top);}}},//上边框默样式setBorderTopDefault: function(workBook, sheetName, cell) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.top = this.defaultBorderStyle;return workBook;},setBorderTopDefaultAll: function(workBook, sheetName) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderTopDefault(workBook, sheetName, cell);}}},//下边框setBorderBottom: function(workBook, sheetName, cell, bottom) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.bottom = bottom;return workBook;},setBorderBottomAll: function(workBook, sheetName, bottom) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderBottom(workBook, sheetName, cell, bottom);}}},//下边框默样式setBorderBottomDefault: function(workBook, sheetName, cell) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.bottom = this.defaultBorderStyle;return workBook;},setBorderBottomDefaultAll: function(workBook, sheetName) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderBottomDefault(workBook, sheetName, cell);}}},//左边框setBorderLeft: function(workBook, sheetName, cell, left) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.left = left;return workBook;},setBorderLeftAll: function(workBook, sheetName, left) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderLeft(workBook, sheetName, cell, left);}}},setBorderLeftDefault: function(workBook, sheetName, cell) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.left = this.defaultBorderStyle;return workBook;},setBorderLeftDefaultAll: function(workBook, sheetName) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderLeftDefault(workBook, sheetName, cell);}}},//右边框setBorderRight: function(workBook, sheetName, cell, right) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.right = right;return workBook;},setBorderRightAll: function(workBook, sheetName, right) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderRight(workBook, sheetName, cell, right);}}},setBorderRightDefault: function(workBook, sheetName, cell) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.right = this.defaultBorderStyle;return workBook;},setBorderRightDefaultAll: function(workBook, sheetName) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderRightDefault(workBook, sheetName, cell);}}},//对角线setBorderDiagonal: function(workBook, sheetName, cell, diagonal) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.diagonal = diagonal;return workBook;},setBorderDiagonalAll: function(workBook, sheetName, diagonal) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderDiagonal(workBook, sheetName, cell, diagonal);}}},setBorderDiagonalDefault: function(workBook, sheetName, cell) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.diagonal = this.defaultBorderStyle;return workBook;},setBorderDiagonalDefaultAll: function(workBook, sheetName) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderDiagonalDefault(workBook, sheetName, cell);}}},setBorderDiagonalUp: function(workBook, sheetName, cell, isDiagonalUp) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.diagonalUp = isDiagonalUp;return workBook;},setBorderDiagonalUpAll: function(workBook, sheetName, isDiagonalUp) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderDiagonalUp(workBook, sheetName, cell, isDiagonalUp);}}},setBorderDiagonalDown: function(workBook, sheetName, cell, isDiagonalDown) {this.init1(workBook, sheetName, cell, "border");workBook.Sheets[sheetName][cell].s.border.diagonalDown = isDiagonalDown;return workBook;},setBorderDiagonalDownAll: function(workBook, sheetName, isDiagonalDown) {this.initAllCell(workBook, sheetName);for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setBorderDiagonalDown(workBook, sheetName, cell, isDiagonalDown);}}},//默认样式,多单元格设置样式//设置所有单元格字体样式setFgColorStylesAll: function(workBook, sheetName, fontType, fontColor, fontSize) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {this.setFontType(workBook, sheetName, cell, fontType);this.setFontColorRGB(workBook, sheetName, cell, fontColor);this.setFontSize(workBook, sheetName, cell, fontSize);}}},//设置第一行标题自定义样式setTitleStyles: function(workBook, sheetName, fgColor, fontColor, alignment, isBold, fontSize, ) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {row = cell.substr(1);if (row == '1') {this.setFillFgColorRGB(workBook, sheetName, cell, fgColor);this.setFontColor(workBook, sheetName, cell, fontColor);this.setAlignmentHorizontal(workBook, sheetName, cell, alignment);this.setFontBold(workBook, sheetName, cell, isBold);this.setFontSize(workBook, sheetName, cell, fontSize);}}}},//设置第一行标题默认样式setTitleStylesDefault: function(workBook, sheetName) {for(cell in workBook.Sheets[sheetName]) {row = cell.substr(1);if (row == '1') {//setFillFgColorRGB(workBook, sheetName, cell, 'FFFF00');this.setAlignmentHorizontal(workBook, sheetName, cell, 'center');this.setFontBold(workBook, sheetName, cell, true);this.setFontSize(workBook, sheetName, cell, '20');}}},//设置双数行背景色灰色,便于阅读setEvenRowColorGrey: function(workBook, sheetName) {for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {row = parseInt(cell.substr(1));if (row % 2 == 0) {this.setFillFgColorRGB(workBook, sheetName, cell, 'DCDCDC');}}}},//合并同一列中内容一样的相邻行mergeSameColCells: function(workBook,sheetName,col) {var cells=[];for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {if (cell.substr(0, 1) == col) {cells.push(cell);//获得该列单元格数组,升序}}}for(var i = 0;i<cells.length-1;){for(var j=i+1;j<cells.length;j++){//内容一样且不为空则合并if(workBook.Sheets[sheetName][cells[i]].v == workBook.Sheets[sheetName][cells[j]].v && workBook.Sheets[sheetName][cells[i]].v != ""){this.mergeCells(workBook,sheetName,cells[i],cells[j]);if(j==cells.length-1){i=j;}}else{ //当且仅当相邻的两个cell值相同时才合并i=j;break;}}}},//合并同一行中内容一样的相邻列mergeSameRowCells: function(workBook,sheetName,row) {var cells=[];for(cell in workBook.Sheets[sheetName]) {if (cell != '!cols' && cell != '!merges' && cell != '!ref') {if (cell.substr(1) == row) {cells.push(cell);//获得该列单元格数组,升序}}}for(var i = 0;i<cells.length-1;){for(var j=i+1;j<cells.length;j++){if(workBook.Sheets[sheetName][cells[i]].v == workBook.Sheets[sheetName][cells[j]].v){this.mergeCells(workBook,sheetName,cells[i],cells[j]);if(j==cells.length-1){i=j;}}else{  //当且仅当相邻的两个cell值相同时才合并i=j;break;}}}},//当前表格最大行数 return intgetMaxRow: function(workBook,sheetName) {var length = 0;for(var ever in workBook.Sheets[sheetName]) {temp = parseInt(ever.substr(1));if (temp > length) {length = temp;}}return length;},//当前表格最大列数 A起步 return stringgetMaxCol: function(workBook,sheetName) {var length = 'A';for(var ever in workBook.Sheets[sheetName]) {temp = ever.substr(0, 1);if (temp > length) {length = temp;}}return length;},})export default XSU

xlsx 导出导入excel,xlsx-style 修改excel样式相关推荐

  1. php直接修改excel,php如何修改excel

    php修改excel的方法:首先实例化Excel读取类:然后通过"$PHPReader->load($dir.$templateName);"方法读取Excel:最后实例化E ...

  2. oracle取32位唯一码,Oracle导出导入dmp文件命令,以及excel生成32位uuid

    Oracle导出dmp文件命令,以及excel生成64位uuid 导出命令cmd中 expdp mms/xfkjerp@orcl schemas=mms dumpfile=expdp.dmp DIRE ...

  3. Excel服务器数据库修改,excel服务器与数据库

    excel服务器与数据库 内容精选 换一换 云服务器备份在支持崩溃一致性备份的基础上,同时支持数据库备份.文件/磁盘数据在同一时间点,通过数据库备份内存数据,能够保证应用系统一致性,如包含MySQL或 ...

  4. python如何修改excel数据库_python修改excel数据库

    1 连接登入很多人第一次使用某工具时,往往打怵,排斥,感觉很不好用.我们先从连接操作的具体细节的讲起,来减少这种不适.step 1 点击上面工具栏的[Connect]按钮step 2 在弹出的Conn ...

  5. excel服务器模板修改,Excel Server Tutorial

    18.5 模板另存 如果若干模板的表样很相像,我们可以先定义好一个模板,然后把这个模板另存成一个新模板,然后再稍作修改,就完成了相似模板的设计. 把一个模板另存为新模板的步骤是: 以设计者身份登录系统 ...

  6. Nodejs xlsx导出导出

    //使用xlsx内置读取流的方式解析导入导出 //使用busboy解析excel完成导入 var express = require('express'); var router = express. ...

  7. python如何修改excel数据库_python学习笔记-day7-2-【python从mysql数据库导数据到excel,读excel,修改excel】...

    这节说下如何用python把数据库里的数据导出到excel里,并如何读取excel, 修必excel等操作. 一.用python把数据库里的数据导出到excel里 1.导入如下的模块,没有的话需要安装 ...

  8. python怎么编辑excel_python 修改excel表格数据-关于如何用python 编辑 excel表格

    python对Excel中数据的处理 把你的写入excel 的内容编码一哈 例如 str('内容').encode('utf-8') 或者str('内容').encode('gbk') 再写入exce ...

  9. java excel生成_java操作excel表,包括创建、读取、以及修改【via 度娘】

    作者的网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体.数字.日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说 ...

最新文章

  1. Session原理、安全以及最基本的Express和Redis实现
  2. vue项目刷新当前页面的三种方法
  3. PHP- 深入PHP、Redis连接
  4. java int越界_用位运算判断int类型变量越界
  5. 博客阅读学习笔记-目录
  6. c++ extern “C”
  7. C# 打印PDF文档的10种方法
  8. 序列每天从0开始_【算法打卡】分割数组为连续子序列
  9. iTerm – 让你的命令行也能丰富多彩
  10. C# 委托?这篇文章让你困惑全摆脱!
  11. ios 访问设备的基本信息
  12. 麦淘亲子完成近千万美元B+轮融资,预计2019年前将开设约300个线下科学活动点...
  13. oracle函数调用语法,simpleJdbcCall调用函数语法
  14. C语言实现sin函数的程序设计
  15. 用python实现PSNR与SSIM
  16. html打印多了空白页,为什么打印Word文档会多打印出一空白页
  17. 程序员的核心竞争力是怎样的?列举程序员要掌握的能力
  18. 稳定云服务器出租_云服务器租用,安全稳定的DDoS高防独立IP弹性云主机租用_爱普互联...
  19. 一周总结——2020.5.31
  20. win10 右键新建卡顿

热门文章

  1. 收藏||二叉树的遍历:颜色标记法(前序、中序、后序通用)
  2. 第三届艺星超级品牌日钜献·世界名曲音乐会,全网直播!
  3. 【前端框架】前端框架学习
  4. 大疆Tello EDU版本(新发布)
  5. STFT filter bank
  6. 红牛农场java代码_Java面向对象程序设计实验指导模板代码(171页)-原创力文档...
  7. 构建nas_我的第一个diy nas服务器构建
  8. ISO26262:功能安全解决了什么问题?
  9. Pytorch实现CT图像正投影(FP)与反投影(FBP)的模块
  10. MathorCup大数据挑战赛第一届A题-移动通信基站流量预测赛题解析