解决VUE将对象数组导出excel表

解决VUE将对象数组导出excel表

1.使用数组对象的对象的字段当列标题

/**
 * 将JSON数据导出为Excel文件
 * @param {Array} jsonData - 要导出的对象数组
 * @param {String} filename - 导出文件的名称,默认为'exported_data'
 */
function exportToJsonExcel(jsonData, filename = 'exported_data') {
  // 创建一个新的工作簿
  const workbook = XLSX.utils.book_new()

  // 定义列标题,使用JSON数据的第一个对象的键名作为标题
  const header = Object.keys(jsonData[0])

  // 创建一个新的工作表,并将JSON数据转换为Excel工作表,同时设置列标题
  const worksheet = XLSX.utils.json_to_sheet(jsonData, { header })

  // 将工作表添加到工作簿中
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')

  // 将工作簿转换为二进制数据,准备下载
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' })

  // 创建一个Blob对象,用于表示二进制数据
  const data = new Blob([excelBuffer], { type: 'application/octet-stream' })

  // 创建一个URL表示这个Blob对象,以便可以在网页上访问它
  const url = URL.createObjectURL(data)

  // 创建一个隐藏的可下载链接,并模拟点击以触发下载
  const a = document.createElement('a')
  a.href = url
  a.download = `${filename}.xlsx`
  a.click()
  // 清理:撤销对URL的引用,以释放资源
  URL.revokeObjectURL(url)
}

注意:

  • header为行标题,也就是表格第一行

2.如果你想自定义列标题而不是使用 JSON 数据或者对象数组中的键名作为默认标题,你可以在 XLSX.utils.json_to_sheet 方法中传入一个自定义的标题数组

/**
 * 将JSON数据导出为Excel文件
 * @param {Array} jsonData - 要导出的对象数组
 * @param {Array} customHeaders - 自定义的列标题数组
 * @param {String} filename - 导出文件的名称,默认为'exported_data'
 */
function exportToExcel(jsonData, customHeaders, filename = 'exported_data') {
  // 创建一个新的工作簿
  const workbook = XLSX.utils.book_new()

  // 使用自定义的列标题
  const header = customHeaders

  // 创建一个新的工作表,并将JSON数据转换为Excel工作表,同时设置列标题
  const worksheet = XLSX.utils.json_to_sheet(jsonData, { header })

  // 将工作表添加到工作簿中
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')

  // 将工作簿转换为二进制数据,准备下载
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' })

  // 创建一个Blob对象,用于表示二进制数据
  const data = new Blob([excelBuffer], { type: 'application/octet-stream' })

  // 创建一个URL表示这个Blob对象,以便可以在网页上访问它
  const url = URL.createObjectURL(data)

  // 创建一个隐藏的可下载链接,并模拟点击以触发下载
  const a = document.createElement('a')
  a.href = url
  a.download = `${filename}.xlsx`
  a.click()
  // 清理:撤销对URL的引用,以释放资源
  URL.revokeObjectURL(url)
}

3.以上两个代码会出现生成的excel出现两组标题行,一组是自定义的,一组是键名,只使用自定义标题行,解决代码如下

function exportToExcel(jsonData, customHeaders, filename = 'exported_data') {  
  // 创建一个新的工作簿  
  const workbook = XLSX.utils.book_new();  
  
  // 使用 json_to_sheet 转换数据,但不自动添加标题行  
  const worksheet = XLSX.utils.json_to_sheet(jsonData, { header: [] }); // 使用空数组来明确不添加自动标题  
  
  // 如果有自定义标题,则添加到工作表中  
  if (customHeaders && customHeaders.length > 0) {  
    const range = XLSX.utils.decode_range(worksheet['!ref']);  
    const headerRow = {};  
    customHeaders.forEach((header, colIdx) => {  
      headerRow[XLSX.utils.encode_col(colIdx + 1)] = { t: 's', v: header }; // 注意列索引从1开始  
    });  
    XLSX.utils.sheet_add_json(worksheet, [headerRow], { origin: { r: 0, c: 0 } }); // 在第一行添加自定义标题  
  }  
  
  // 将工作表添加到工作簿中  
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');  
  
  // 将工作簿转换为二进制数据,准备下载  
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });  
  
  // 创建一个Blob对象,用于表示二进制数据  
  const data = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' });  
  
  // 创建一个URL表示这个Blob对象,以便可以在网页上访问它  
  const url = URL.createObjectURL(data);  
  
  // 创建一个隐藏的可下载链接,并模拟点击以触发下载  
  const a = document.createElement('a');  
  a.href = url;  
  a.download = `${filename}.xlsx`; // 注意这里使用了模板字符串的正确语法  
  document.body.appendChild(a); // 添加到DOM中(有些浏览器需要这样做才能触发下载)  
  a.click();  
  document.body.removeChild(a); // 清理  
  
  // 清理:撤销对URL的引用,以释放资源  
  URL.revokeObjectURL(url);  
}s

使用:

const jsonData = [
  { name: 'Alice', age: 30, city: 'New York' },
  { name: 'Bob', age: 25, city: 'San Francisco' }
];

const customHeaders = ['姓名', '年龄', '城市'];

exportToExcel(jsonData, customHeaders, 'my_data');

这个不知道为什么会出现导出的EXcel出现BCD。。。标题头,另一篇文章已经解决,大家可以看另一篇文章https://blog.csdn.net/weixin_65363325/article/details/141142226?spm=1001.2014.3001.5501

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue 可以使用 JavaScriptExcel 库,如 js-xlsx 和 exceljs,来实现对象数组导出Excel 的功能。可以使用 Vuex 和 Axios 来处理和发送 Ajax 请求,并使用 Excel 库来生成文件,最后使用 FileSaver.js 来保存导出的文件。 ### 回答2: 要将Vue中的对象数组导出Excel,可以使用第三方的插件或者纯前端的方式。 一种常用的方法是使用插件,例如`xlsx`,它提供了将数据转换为Excel文件的功能。首先,安装`xlsx`插件:`npm install xlsx`。然后,在Vue组件中导入它:`import XLSX from 'xlsx'`。 接下来,定义一个导出Excel的方法,该方法接收一个对象数组作为参数。在方法中,首先将对象数组转换为Excel中的工作数据。可以使用`XLSX.utils.json_to_sheet()`函数来完成这一步骤。然后,创建一个工作簿,并将工作添加到工作簿中。最后,使用`XLSX.writeFile()`函数将工作簿保存为Excel文件。 以下是一个示例代码: ```javascript methods: { exportToExcel(data) { const worksheet = XLSX.utils.json_to_sheet(data); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSX.writeFile(workbook, 'data.xlsx'); } } ``` 在Vue模板中,可以使用按钮来触发导出Excel的方法。例如: ```html <button @click="exportToExcel(objects)">导出Excel</button> ``` 其中,`objects`是包含对象数组Vue数据。 这样,当点击导出Excel按钮时,将会将Vue中的对象数组导出为一个名为`data.xlsx`的Excel文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值