exceljs读取el-upload上传的excle数据并转为json输出

28 篇文章 0 订阅
21 篇文章 0 订阅

当使用 Element UI 的 el-upload 组件上传 Excel 文件时,您可以使用 exceljs 库将上传的 Excel 数据转换为 JSON 格式。以下是一个示例代码,演示了如何在 Vue 项目中实现这一功能:

<template>
  <el-upload
    class="upload-demo"
    action="/upload"
    :on-success="handleSuccess"
    :before-upload="beforeUpload"
  >
    <el-button size="small" type="primary">点击上传</el-button>
  </el-upload>
</template>

<script>
import ExcelJS from 'exceljs';

export default {
  methods: {
    async handleSuccess(response, file, fileList) {
      // 读取上传的Excel文件
      const workbook = new ExcelJS.Workbook();
      await workbook.xlsx.load(file.raw);

      // 定义一个数组来存储JSON格式的数据
      const jsonData = [];

      // 获取第一个工作表
      const worksheet = workbook.getWorksheet(1);

      // 读取数据并转换为JSON格式
      worksheet.eachRow({ includeEmpty: true }, function(row, rowNumber) {
        if (rowNumber !== 1) { // 排除表头行
          let rowData = {};
          row.eachCell({ includeEmpty: true }, function(cell, colNumber) {
            // 使用单元格的列号作为JSON对象的键
            rowData[colNumber] = cell.value;
          });
          jsonData.push(rowData);
        }
      });

      // 输出JSON数据
      console.log(jsonData);
    },
    beforeUpload(file) {
      const isExcel = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
      if (!isExcel) {
        this.$message.error('只能上传xlsx格式的文件');
      }
      return isExcel;
    },
  },
};
</script>

在上述示例中,我们使用 el-upload 组件来实现文件上传功能,并使用 exceljs 库将上传的 Excel 文件转换为 JSON 格式的数据。在 handleSuccess 方法中,我们使用 ExcelJS 的 Workbook 类来加载上传的文件,并将其转换为 JSON 格式的数据。最后,我们将转换后的 JSON 数据输出到控制台。

// utils exceljsExport.ts文件
import moment from 'moment';

export const exportToExcel = (exportDataList: any, getExcelColumns: any, name: any) => {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('Sheet1');  
  worksheet.columns = getExcelColumns();
  worksheet.addRows(exportDataList);
  const time = moment().format('YYYYMMDDHHmmss');
  workbook.xlsx.writeBuffer().then((buffer) => {
    let blob = new Blob([buffer], {
      type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    });
    saveAs(blob, `${name}_${time}.xlsx`);
  });
};
// vue文件
const getExcelColumns = () => {
    const exportAddColumns = [
      { prop: 'startTime', label: '开始充电时间' },
      { prop: 'phoneNumber', label: '手机号' },
      { prop: 'cmsOrderId', label: '订单编号' },
      { prop: 'status', label: '订单状态' }
    ];
    return exportAddColumns.map((item) => {
      let items = {header: item.label, key: item.prop};
      return items;
    });
  };

exportToExcel(exportDataList, getExcelColumns, '订单');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的pandas和matplotlib库来读取excel多列数据、进行插值、绘制图以及输出excel。具体步骤如下: 1. 导入需要的库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt ``` 2. 读取excel文件: ```python df = pd.read_excel('data.xlsx', sheet_name='Sheet1', usecols=[0,1]) ``` 其中,`data.xlsx`是excel文件名,`Sheet1`是excel中的工作表名,`usecols`表示读取excel中的哪些列,这里读取第1列和第2列。 3. 进行插值: ```python df = df.interpolate() ``` 使用`interpolate()`方法进行线性插值。 4. 绘制图像: ```python plt.plot(df.iloc[:,0], df.iloc[:,1]) plt.xlabel('x') plt.ylabel('y') plt.show() ``` 使用`plot()`方法绘制折线图,`iloc[:,0]`表示读取第1列数据,`iloc[:,1]`表示读取第2列数据。 5. 输出excel: ```python df.to_excel('output.xlsx', sheet_name='Sheet1', index=False) ``` 使用`to_excel()`方法将数据输出excel文件,`output.xlsx`为输出excel文件名,`Sheet1`为输出的工作表名,`index=False`表示不输出行索引。 完整代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.read_excel('data.xlsx', sheet_name='Sheet1', usecols=[0,1]) df = df.interpolate() plt.plot(df.iloc[:,0], df.iloc[:,1]) plt.xlabel('x') plt.ylabel('y') plt.show() df.to_excel('output.xlsx', sheet_name='Sheet1', index=False) ``` 注意:在使用pandas和matplotlib库之前需要先安装它们。可以通过以下命令进行安装: ```python !pip install pandas matplotlib ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值