一片月 2024-04-08 10:16 采纳率: 0%
浏览 70
已结题

vue中使用xlsx合并单元格并设置内容没效果


export function export_json_to_excel({
  multiHeader = [],
  header,
  data,
  filename,
  merges = ['A14:E14'],
  autoWidth = true,
  bookType = 'xlsx',
} = {}) {
  filename = filename || 'excel-list'
  data = [...data]
  data.unshift(header)
  for (let i = multiHeader.length - 1; i > -1; i--) {
    data.unshift(multiHeader[i])
  }

  const ws_name = 'SheetJS'
  const wb = new Workbook(),
    ws = sheet_from_array_of_arrays(data)

  if (merges.length > 0) {
    if (!ws['!merges']) ws['!merges'] = []
    merges.forEach((item) => {
      ws['!merges'].push(XLSX.utils.decode_range(item))
    })
  }

  // 设置合并单元格'A14:E14'的内容
  ws['A14'] = {
    t: 's',
    v: '请严格按投放媒体选择对应的链接',
    s: {
      font: {
        sz: 14,
        bold: true,
      },
      alignment: {
        horizontal: 'center',
        vertical: 'center',
      },
    },
  }

  for (let i = 1; i < 5; i++) {
    const cellAddress = String.fromCharCode(65 + i) + '14'
    if (!ws[cellAddress]) {
      ws[cellAddress] = { t: 's', v: '' }
    }
    ws[cellAddress].s = {
      font: {
        sz: 14,
        bold: true,
      },
      alignment: {
        horizontal: 'center',
        vertical: 'center',
      },
    }
  }

  if (autoWidth) {
    const colWidth = data.map((row) =>
      row.map((val) => {
        if (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
  }

  wb.SheetNames.push(ws_name)
  wb.Sheets[ws_name] = ws

  const wbout = XLSX.write(wb, {
    bookType: bookType,
    bookSST: false,
    type: 'binary',
  })
  saveAs(
    new Blob([s2ab(wbout)], {
      type: 'application/octet-stream',
    }),
    `${filename}.${bookType}`
  )
}

这是导出excel的代码 使用vue+xlsxzu做的导出表格 但是合并单元格设置内容时 没效果 ,单元格倒是合并了 就算把内容设置不上去 这个代码没起作用

  ws['A14'] = {
    t: 's',
    v: '请严格按投放媒体选择对应的链接',
    s: {
      font: {
        sz: 14,
        bold: true,
      },
      alignment: {
        horizontal: 'center',
        vertical: 'center',
      },
    },
  }

  • 写回答

14条回答 默认 最新

  • 百锦再@新空间代码工作室 全栈领域优质创作者 2024-04-08 10:16
    关注

    ws['A14'] = {t: 's',v: '请严格按投放媒体选择对应的链接',s: {font: { sz: 14, bold: true },alignment: { horizontal: 'center', vertical: 'center' }}};

    在这段代码中,您需要将设置单元格内容和样式的对象直接赋给ws['A14'],而不是将对象包裹在大括号内。这样才能正确设置单元格的内容和样式。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错