67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
import Excel from 'exceljs'
 | 
						|
export function exportExcelWithTotal(sheetName, columns, title, conditional, headerArr, data, totalRow, numFmts, merge) {
 | 
						|
  var workbook = new Excel.Workbook()
 | 
						|
  var sheet = workbook.addWorksheet(sheetName)
 | 
						|
  sheet.columns = columns
 | 
						|
  const maxColCode = String.fromCharCode(64 + columns.length)
 | 
						|
  // 处理标题
 | 
						|
  sheet.mergeCells(`A1:${maxColCode}2`)
 | 
						|
  sheet.getCell('A1').value = title
 | 
						|
  sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' }
 | 
						|
  sheet.getCell('A1').font = { name: 'SimSun', family: 4, size: 13, bold: true }
 | 
						|
  sheet.mergeCells(`A3:${maxColCode}3`)
 | 
						|
  sheet.getCell('A3').value = conditional
 | 
						|
  sheet.getCell('A3').alignment = { vertical: 'middle', horizontal: 'right' }
 | 
						|
  // 列头
 | 
						|
  sheet.getRow(4).values = headerArr
 | 
						|
  sheet.getRow(4).font = { name: 'SimSun', family: 4, size: 11, bold: true }
 | 
						|
  sheet.getRow(4).alignment = { vertical: 'middle', horizontal: 'left' }
 | 
						|
 | 
						|
  sheet.addRows(data)
 | 
						|
  numFmts.forEach(element => {
 | 
						|
    sheet.getColumn(element.colIndex).numFmt = element.format
 | 
						|
  })
 | 
						|
  sheet.addRow(totalRow)
 | 
						|
  sheet.getRow(data.length + 5).font = { name: 'SimSun', family: 4, size: 11, bold: true }
 | 
						|
  if (merge) {
 | 
						|
    sheet.mergeCells(merge)
 | 
						|
  }
 | 
						|
  sheet.eachRow((row, number) => {
 | 
						|
    if (number > 3) {
 | 
						|
      row.eachCell(cell => {
 | 
						|
        cell.alignment = { vertical: 'center', horizontal: 'left' }
 | 
						|
        cell.border = {
 | 
						|
          top: { style: 'thin' },
 | 
						|
          left: { style: 'thin' },
 | 
						|
          bottom: { style: 'thin' },
 | 
						|
          right: { style: 'thin' }
 | 
						|
        }
 | 
						|
      })
 | 
						|
    }
 | 
						|
  })
 | 
						|
 | 
						|
  workbook.xlsx
 | 
						|
    .writeBuffer({
 | 
						|
      base64: true
 | 
						|
    })
 | 
						|
    .then(function(xls64) {
 | 
						|
      var data = new Blob([xls64], {
 | 
						|
        type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
 | 
						|
      })
 | 
						|
      if ('msSaveOrOpenBlob' in navigator) {
 | 
						|
        window.navigator.msSaveOrOpenBlob(data, `${sheetName} ${title}.xlsx`)
 | 
						|
      } else {
 | 
						|
        var a = document.createElement('a')
 | 
						|
        var url = URL.createObjectURL(data)
 | 
						|
        a.href = url
 | 
						|
        a.download = `${sheetName} ${title}.xlsx`
 | 
						|
        document.body.appendChild(a)
 | 
						|
        a.click()
 | 
						|
        setTimeout(function() {
 | 
						|
          document.body.removeChild(a)
 | 
						|
          window.URL.revokeObjectURL(url)
 | 
						|
        }, 0)
 | 
						|
      }
 | 
						|
    })
 | 
						|
}
 |