JS之实现Excel数据导入

1.<template>部分

<a-upload
  name="file"
  :customRequest="importExcelData"
  accept=".xls,.xlsx"
  class="uploadBtn"
  :showUploadList="false"
>
  <a-button
    type="primary"
    style="margin-right: 8px"
    :loading="uploading"
    >导入excel</a-button
  >
</a-upload>

2.导入xlsx

import * as xlsx from "xlsx";

3.<script>部分

//导入excel
const uploading = ref(false);
// 文件上传自定义
const importExcelData = async (op) => {
  uploading.value = true;

  // 获取上传的excel  并解析数据
  let file = op.file;
  let dataBinary = await readFile(file);
  let workBook = xlsx.read(dataBinary, { type: "binary", cellDates: true });

  let workSheet = workBook.Sheets[workBook.SheetNames[0]];
  const excelData = xlsx.utils.sheet_to_json(workSheet);

  let result = [];
  for (let i = 0; i < excelData.length; i++) {
    //循环excel数据,将字段名置为英文字符,值为当前项相应表头字段的值,拼成接口需要的数据格式
    // 定义要导出的
    let sheetData = {
      branch: excelData[i]["分公司"], //第i项,对应表头为楼宇名称的列值
      grid: excelData[i]["网格"],
      buildingId: excelData[i]["楼宇id"],
      buildingName: excelData[i]["楼宇名称"],
    };
    result.push(sheetData);
  }
  return new Promise((resolve, reject) => {
    GzBuildingsApi.importExcelData(result)
      .then((response) => {
        const data = response.data;
        if (data.code === 200) {
          message.success("导入成功");
          uploading.value = false;
          query();
        } else {
          message.error(data.message);
        }
      })
      .catch((error) => {});
  });
};

const readFile = (file) => {
  return new Promise((resolve) => {
    let reader = new FileReader();
    reader.readAsBinaryString(file);
    reader.onload = (ev) => {
      resolve(ev.target?.result);
    };
  });
};

 

posted @ 2024-09-04 09:39  罗毅豪  阅读(84)  评论(0编辑  收藏  举报