当前位置:   article > 正文

解决前端项目问题,基于vue的后端接口excel文件的导入,以及纯静态前端excel导入_后端接收vue element导入的execl文件

后端接收vue element导入的execl文件

工具:vue2.0+element-ui+vscode


连接后端的动态导入 

①首先在结构层里进行布局,

创建一个点击事件@click="xxx"

  1. <form enctype="multipart/form-data" id="daoru">
  2. <input
  3. type="file"
  4. name="fileup"
  5. id="uploadEventFile"
  6. @change="fileChange"
  7. style="display: none"
  8. />
  9. </form>
  10. <li @click="labelExcelImport">
  11. <i class="el-icon-download"></i>导入
  12. </li>

 ②其次在行为层里利用axios进行后端数据交互

  1. //导入
  2. labelExcelImport() {
  3. event.preventDefault();
  4. document.getElementById("uploadEventFile").click();
  5. },
  6. fileChange(el) {
  7. // el.preventDefault(); //取消默认行为
  8. let uploadEventFile = document.getElementById("uploadEventFile").files;
  9. this.file = el.target.files[0];
  10. if (uploadEventFile == "") {
  11. this.$message({
  12. type: "warning",
  13. message: "请选择文件",
  14. });
  15. }
  16. let formData = new FormData(document.getElementById("daoru"));
  17. // 向 formData 对象中添加文件
  18. formData.append("file", this.file);
  19. const rLoading = this.openLoading();
  20. this.$axios({
  21. method: "post",
  22. url:
  23. window.serverAPI.url +
  24. "", //请求接口
  25. //请求接口的参数
  26. data: formData,
  27. // responseType: "blob",
  28. headers: {
  29. "Content-Type": "multipart/form-data", //设置请求头请求格式为JSON
  30. Authorization: window.sessionStorage.getItem("token"),
  31. },
  32. }).then((data) => {
  33. // console.log(data);
  34. if (data.data.code == 200) {
  35. Loading.close();
  36. this.$notify({
  37. type: "error",
  38. dangerouslyUseHTMLString: true,
  39. message: data.data.data,
  40. position:"top-left",
  41. duration:4000
  42. });
  43. } else {
  44. alert(
  45. "未上传指定文件,将跳转到入网页面",
  46. this.$router.push("/xxx/xxx")
  47. );
  48. }
  49. // location.href="http://www.baidu.com"
  50. this.xxx();//表格接口
  51. document.getElementById("uploadEventFile").value = "";
  52. });
  53. },

纯前端的静态导入 

①创建一个js文件

  1. export let networkPro = { //函数名称
  2. xxx1: {
  3. text: "xxx1",
  4. type: "string"
  5. },
  6. xxx2: {
  7. text: "xxx2",
  8. type: "string"
  9. },
  10. xxx3: {
  11. text: "xxx3",
  12. type: "string"
  13. },
  14. }
  15. export function readFile(file) { //函数名称
  16. return new Promise(resolve => {
  17. let reader = new FileReader();
  18. reader.readAsBinaryString(file)
  19. reader.onload = ev => {
  20. resolve(ev.target.result);
  21. }
  22. })
  23. }

②下载xlsx插件,然后在mainjs文件里导入

npm install --save xlsx
  1. import XLSX from 'xlsx'
  2. Vue.prototype.XLSX = XLSX

③在vue页面里进行调用和封装

  1. //结构层
  2. <el-upload
  3. :on-success="handleSuccess"
  4. :before-upload="beforeUpload"
  5. action
  6. :on-change="uploadExcel"
  7. :show-file-list="false"
  8. :file-list="fileList"
  9. accept=".xlsx,.xls"
  10. :auto-upload="false">导入</el-upload>
  11. //引入
  12. import XLSX from "xlxs";
  13. import { networkPro, fileReader } from "../../excel.js";
  14. //导入
  15. async uploadExcel(ev){
  16. let file = ev.raw
  17. // console.log(file);
  18. if(!file) return ;
  19. this.show = false;
  20. //读取file数据(变为json格式)
  21. let data = await readFile(file)
  22. // console.log(data);
  23. let workbook = XLSX.read(data, {type:"binary"}),
  24. worksheet = workbook.Sheets[workbook.SheetNames[0]];
  25. data = XLSX.utils.sheet_to_json(worksheet);
  26. // console.log(workbook);
  27. // console.log(worksheet);
  28. console.log(data);
  29. //把读取出来的数据变为最后传递给服务器的数据
  30. let arr = [];
  31. data.forEach(item =>{
  32. let obj = {};
  33. for(let key in networkPro){
  34. if (!Object.hasOwnProperty.call(networkPro,"key")) break;
  35. let v =networkPro[key],
  36. text = v.text,
  37. type = v.type;
  38. v= item[text] || "";
  39. type === "string" ?(v= String(v)):null
  40. type === "number" ?(v= Number(v)):null
  41. obj[key] =v
  42. }
  43. arr.push(obj);
  44. })
  45. //展示到页面
  46. this.show = true;
  47. this.tableData = arr;
  48. console.log(this.tableData);
  49. },

作者上一篇文章,

【vue】echarts的tooltip(提示框)基础配置和样式改写_意初的博客-CSDN博客_echarts 提示框样式为了能够使得echarts的tooltip提示框触发的格式,使用valueFormatter回调函数,能按照自定义的格式 项目场景②:改写提示框里的样式echarts的tooltip的样式需要官网api属性,贴一下常用的 项目场景③:自定义提示框里的样式为了能够使得echarts的tooltip改写样式,就不得不提formatter函数作者上一篇文章,vue+echarts折线图拐点样式的配置和教程(简单易懂)_意初的博客-CSDN博客vue+echarts折.........https://blog.csdn.net/weixin_43928112/article/details/125523542?spm=1001.2014.3001.5501

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号