js生成excel表格进阶版

原生方法(简单)

https://blog.csdn.net/qq_41579327/article/details/125088468?spm=1011.2415.3001.5331

纯前端方法

vue、vite、webpack环境多可用

安装

bash 复制代码
npm i exceljs

使用

javascript 复制代码
import ExcelJS from 'exceljs'

/**
 * data: [{tital1:'', tital2:'', tital3:'', tital4:'', tital5:'', tital6:'', tital7:'', tital8:'', tital9:'', tital10:'', tital11:''}...]
 **/
const exportExcel = async (data) => {
  const workbook = new ExcelJS.Workbook()
  const worksheet = workbook.addWorksheet('sheet1', {
    properties: { defaultRowHeight: 36, defaultColWidth: 20 },
    // 打印配置
    pageSetup: {
      horizontalCentered: true,
      verticalCentered: true,
      paperSize: 9,
      orientation: 'landscape',
      scale: 81,
      margins: {
        left: 0.25,
        right: 0.25,
        top: 0.75,
        bottom: 0.75,
        header: 0.3,
        footer: 0.3
      }
    }
  })

  worksheet.mergeCells('A1:K1') // 合并单元格
  const a1 = worksheet.getCell('A1') // 获取A1单元格
  a1.value = '抽查表' // 设置内容
  a1.alignment = { vertical: 'top', horizontal: 'center' } // 设置内容居中
  a1.font = { size: 20, bold: true } // 设置字体

  worksheet.getRow(1).height = 40 // 设置行高

  const a2 = worksheet.getCell('A2')
  a2.value = '抽查日期:'
  a2.alignment = { vertical: 'middle', horizontal: 'left' }
  a2.font = { size: 14, bold: true }

  worksheet.mergeCells('J2:K2')
  const j2 = worksheet.getCell('J2')
  j2.value = `统计时间:${new Date().toISOString().slice(0, 10)}`
  j2.alignment = { vertical: 'middle', horizontal: 'right' }
  j2.font = { size: 14 }

  worksheet.getRow(2).height = 40

  const header_title = ['tital1', 'tital2', 'tital3', 'tital4', 'tital5', 'tital6', 'tital7', 'tital8', 'tital9', 'tital10', 'tital11']

  worksheet.addRow(header_title)

  if (data && Array.isArray(data)) {
    data.forEach((item, index) => {
      worksheet.addRow([index + 1, item.code, item.name, item.type, item.unit, item.cangkuName, item.huoweiName, item.kucun, '', '', ''])
    })
  }

  const columnWidths = [7, 13, 19, 31, 12, 14, 19, 14, 11, 15, 23]

  columnWidths.forEach((width, index) => {
    worksheet.getColumn(index + 1).width = width
  })

  const alignment = {
    wrapText: true,
    vertical: 'middle',
    horizontal: 'center'
  }

  const borderStyle = {
    style: 'thin',
    color: { argb: 'ff000000' }
  }

  const border = {
    top: borderStyle,
    left: borderStyle,
    bottom: borderStyle,
    right: borderStyle
  }

  const data_rows = data?.length ? data.length + 3 : 13
  const data_cols = header_title.length || 11

  for (let row = 3; row <= data_rows; row++) {
    worksheet.getRow(row).height = 36
    for (let col = 1; col <= data_cols; col++) {
      const cell = worksheet.getCell(row, col)
      cell.font = { size: 12, bold: row === 3 }
      cell.alignment = alignment
      cell.border = border // 设置边框
    }
  }

  const footer_rows = data_rows + 1
  worksheet.getRow(footer_rows).height = 30
  worksheet.mergeCells(`A${footer_rows}:B${footer_rows}`)
  const a14 = worksheet.getCell(`A${footer_rows}`)
  a14.value = '抽查人:'
  a14.font = { size: 14 }

  const e14 = worksheet.getCell(`E${footer_rows}`)
  e14.value = '核对人:'
  e14.font = { size: 14 }

  const k14 = worksheet.getCell(`K${footer_rows}`)
  k14.value = '准确率:'
  k14.font = { size: 14 }

  // 生成文件并下载
  const buffer = await workbook.xlsx.writeBuffer()
  saveAs(new Blob([buffer]), `导出数据_${new Date().toLocaleDateString()}.xlsx`)
}

后端nodeJS方法

使用node处理数据,再导出excel表格

安装

bash 复制代码
npm i exceljs

使用

javascript 复制代码
const ExcelJS = require('exceljs')
const fs = require('fs')

const exportExcel = async (data, filePath) => {
  const workbook = new ExcelJS.Workbook()
  const worksheet = workbook.addWorksheet('数据列表', {
    properties: { defaultRowHeight: 36, defaultColWidth: 20 },
    pageSetup: {
      horizontalCentered: true,
      verticalCentered: true,
      paperSize: 9,
      orientation: 'landscape',
      scale: 81,
      margins: {
        left: 0.25,
        right: 0.25,
        top: 0.75,
        bottom: 0.75,
        header: 0.3,
        footer: 0.3
      }
    }
  })

  // 按换行拆分
  let lines = data.split('\n').filter((line) => line.trim() !== '')
  const rows = lines.map((line) => line.split(' ').filter((item) => item.trim() !== ''))

  rows.forEach((row) => {
    worksheet.addRow(row)
  })

  // 设置所有单元格居中
  worksheet.eachRow((row) => {
    row.eachCell((cell) => {
      cell.alignment = { vertical: 'middle', horizontal: 'center' }
    })
  })

  const buffer = await workbook.xlsx.writeBuffer()

  // 保存文件
  fs.writeFileSync(filePath, buffer)
  console.log(`Excel文件已保存到 ${filePath}`)
}

const str = `
故障 显示 名称 类型 复位 范围 错码 辅码
E2 E2.0 外设异常 NO.1 否 整机 x0E12 x0E120
E3 E3.0 设定错误 NO.2 是 整机 x6320 x0E130
E5 E5.0 误差过大 NO.2 是 整机 x0E15 x0E150
`

exportExcel(str, './output.xlsx')
相关推荐
3秒一个大2 分钟前
JS 数组去重全方案:从基础到通用万能去重函数
前端·javascript
晴天164 分钟前
Electron面试题-Day19
java·javascript·electron
Hilaku25 分钟前
为什么跳槽涨薪 30% 的时代彻底结束了?聊聊 2026 前端薪资的天花板
前端·javascript·程序员
从小就看凹凸曼^o^31 分钟前
Python基础5 - 字典与集合:(1)字典
开发语言·python
侧耳倾听1111 小时前
java 日志框架简介
java·开发语言
zlinear数据采集卡1 小时前
数据采集卡从入门到精通(9):分辨率与精度——16位卡不等于1/65536的精度
开发语言·数据库·fpga开发·开源·c#
全栈技术负责人1 小时前
解密 MCP(Model Context Protocol):大模型时代的“Type-C”总线与三驾马车架构深度解析
开发语言·ai·架构
大家的林语冰1 小时前
✌️ 让 Rust 再次伟大,pnpm 12 抛弃 TypeScript,移植 Rust 原地起飞!
前端·javascript·node.js
丰锋ff1 小时前
1.7在Qt窗口中添加右键菜单
开发语言·qt
Titan20242 小时前
Linux网络学习:套接字、UDP的封装与应用
linux·服务器·开发语言·网络·c++