Django+vue 上传execl文件并解析

Django+vue 上传execl文件并解析

VUE

<template>
      <el-button type="primary" class="but_list_but1"><input type="file" name="avatar" id="avatar" style="display: none"
                                                             @change="upload('/api/v1/admin/product/load/',$event)"><label
          for="avatar">导入</label></el-button>
</template>
<script>
import axios from "axios";
import {MessageBox, Message} from 'element-ui'
import {Loading} from 'element-ui'

const http = axios.create({
  // baseURL: process.env.VUE_APP_BASE_API,
  baseURL: '/api',
  timeout: 60000,
  withCredentials: true
})
export default {
      methods: {
              /**
     * 上传
     * @param url
     * @param data
     */
    upload(url, file, data) {
      const formData = new FormData()
      formData.append('file', file.target.files[0])

      // 附加数据
      if (data) {
        Object.keys(data).forEach(key => {
          formData.append(key, data[key])
        })
      }

      return new Promise((resolve, reject) => {
        // 打开
        const loading = Loading.service({
          text: '正在上传数据...',
          background: 'rgba(0, 0, 0, 0.7)'
        })

        http
            .request({
              url: url,
              method: 'post',
              data: formData,
              timeout: 1200000
            })
            .then(response => {
                console.log(response)
                loading.close()
                resolve(response)
              }
            })
            .catch(err => {
              loading.close()
              reject(err)
            })
      })
    },
      }
}
</script>

Django

    '''
    	首先需要安装xlrd
    	pip install xlrd==1.2.0
    	推荐安装老版本,xlrd版本原因,好像最新的版本不支持读取xlsx文件了,新版本会报错
    '''
    def leading_in(self, request):
        '''
        导入商品列表
        '''
        file = request.FILES.get('file')
        from io import BytesIO, StringIO
        sio = BytesIO()
        for i in file:
            sio.write(i)  # 将数据写入io对象
        data = xlrd.open_workbook(file_contents=sio.getvalue())  # 如果传入的是io数据对象,那么别忘了传参的时候要用关键字file_contents=指定一下
        # 根据索引获取第一个sheet工作簿
        sheet = data.sheet_by_index(0)
        # 获取execl中的行数
        rows_count = sheet.nrows
        # 获取execl的列数
        cols_count = sheet.ncols
        # print(sheet.name, rows_count, sheet.ncols)  # sheet名称,行数,列数
        for i in range(1, rows_count):
            # rowx表示是获取第几行的数据
            # start_col表示列从索引为多少开始,end_colx表示从索引为多少结束,
            # end_colx为None表示结束没有限制
            # 获取指定行中的数据并以列表的形式返回
            table_list = sheet.row_values(rowx=i, start_colx=0, end_colx=None)
posted @ 2023-03-03 13:36  春游去动物园  阅读(101)  评论(0编辑  收藏  举报