国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vue導(dǎo)入處理Excel表格功能步驟實(shí)例

3403771864 / 943人閱讀

  1. 前言

  本篇文章就是為大家講講前端導(dǎo)入并處理excel表格的情況,順便講講vue導(dǎo)入并處理excel數(shù)據(jù);也總結(jié)下使用工具。

  2.vue導(dǎo)入Excel表格

  vue導(dǎo)入Excel表格主要有兩種常用的方法,一個(gè)是借助ElementUI文件上傳進(jìn)行表格導(dǎo)入,另一個(gè)是自帶的input做文件上傳;以下對(duì)兩個(gè)方法做詳細(xì)介紹;

  2.1 使用ElementUI中的upload組件

  安裝ElementUI

  npm i element-ui -S

  安裝Excel表格解析插件

  npm i xlsx -S

  導(dǎo)入需要用的工具包

  import Vue from "vue";
  import ElementUI from "element-ui";
  import "element-ui/lib/theme-chalk/index.css";
  import { read, utils } from "xlsx"; // 注意處理方法引入方式
  Vue.use(ElementUI);

  引入組件

  <el-upload
  action="https://jsonplaceholder.typicode.com/posts/"
  :on-success="handleChange"
  :file-list="fileList"
  class="el-upload"
  >

  添加處理邏輯

  // 導(dǎo)入成功時(shí)執(zhí)行
  handleChange(res, file, fileList) {
  // 將文件放入
  for (let i = 0; i < fileList.length; i++) {
  if (file.name != fileList[i].name) {
  this.fileList.push({
  name: file.name,
  url: "",
  uid: file.uid
  });
  }
  }
  const files = { 0: file };
  this.readExcel(files);
  },
  readExcel(file) {
  const fileReader = new FileReader();
  fileReader.onload = ev => {
  try {
  const data = ev.target.result;
  const workbook = read(data, { type: "binary" });
  const params = [];
  // 取對(duì)應(yīng)表生成json表格內(nèi)容
  workbook.SheetNames.forEach(item => {
  this.tableData.push(utils.sheet_to_json(workbook.Sheets[item]));
  });
  // 該算法僅針對(duì)表頭無合并的情況
  if (this.tableData.length > 0) {
  // 獲取excel中第一個(gè)表格數(shù)據(jù)tableData[0][0],并且將表頭提取出來
  for (const key in this.tableData[0][0]) {
  this.tableHead.push(key);
  }
  }
  // 重寫數(shù)據(jù)
  } catch (e) {
  console.log("error:" + e);
  return false;
  }
  };
  fileReader.readAsBinaryString(file[0].raw);
  }

  上面都是有關(guān)處理的數(shù)據(jù),用組件展示在了頁面上,效果如下圖:

1.png

  2.2 使用input文件上傳

  1.安裝Excel表格解析插件

  npm i xlsx -S

  2.導(dǎo)入需要用的工具包

  import { read, utils } from "xlsx"; // 注意處理方法引入方式

  3.使用input

  <div class="flex-display">
  <div class="left-box">文件上傳(input):</div>
  <input type="file" v-on:change="onChange" class="file-ipt" />
  </div>

  4.添加處理邏輯

  基本與上面處理邏輯相同

  onChange(e) {
  const file = e.target.files[0];
  const fileReader = new FileReader();
  fileReader.onload = ev => {
  try {
  const data = ev.target.result;
  const workbook = read(data, { type: "binary" });
  const params = [];
  // 取對(duì)應(yīng)表生成json表格內(nèi)容
  workbook.SheetNames.forEach(item => {
  params.push({
  name: item,
  dataList: utils.sheet_to_json(workbook.Sheets[item])
  });
  this.tableData.push(utils.sheet_to_json(workbook.Sheets[item]));
  });
  // 該算法僅針對(duì)表頭無合并的情況
  if (this.tableData.length > 0) {
  // 獲取excel中第一個(gè)表格數(shù)據(jù)tableData[0][0],并且將表頭提取出來
  for (const key in this.tableData[0][0]) {
  this.tableHead.push(key);
  }
  }
  return params;
  // 重寫數(shù)據(jù)
  } catch (e) {
  console.log("error:" + e);
  return false;
  }
  };
  fileReader.readAsBinaryString(file);
  }

  3. 總體代碼與效果

  效果如下:

2.gif

  總的樣式以及代碼如下:

  <template>
  <div>
  <div class="flex-display">
  <div class="left-box">表格上傳(ElementUI):</div>
  <el-upload
  action="https://jsonplaceholder.typicode.com/posts/"
  :on-success="handleChange"
  :file-list="fileList"
  class="el-upload"
  >
  <el-button size="small" type="primary" class="el-btn"
  >點(diǎn)擊上傳</el-button
  >
  <div slot="tip" class="el-upload-tip">
  只能上傳xlsx文件,且不超過5MB
  </div>
  </el-upload>
  </div>
  <el-table v-if="tableHead.length" :data="tableData[0]" style="width: 100%">
  <el-table-column
  v-for="(data, key) in tableHead"
  :prop="data"
  :label="data"
  :key="key"
  width="180"
  >
  </el-table-column>
  </el-table>
  <div class="flex-display">
  <div class="left-box">文件上傳(input):</div>
  <input type="file" v-on:change="onChange" class="file-ipt" />
  </div>
  </div>
  </template>
  <script>
  import Vue from "vue";
  import ElementUI from "element-ui";
  import "element-ui/lib/theme-chalk/index.css";
  import { read, utils } from "xlsx";
  Vue.use(ElementUI);
  export default {
  data() {
  return {
  fileList: [], //上傳文件列表
  tableHead: [], //表頭
  tableData: [] // 表數(shù)據(jù)
  };
  },
  methods: {
  onChange(e) {
  const file = e.target.files[0];
  const fileReader = new FileReader();
  fileReader.onload = ev => {
  try {
  const data = ev.target.result;
  const workbook = read(data, { type: "binary" });
  const params = [];
  // 取對(duì)應(yīng)表生成json表格內(nèi)容
  workbook.SheetNames.forEach(item => {
  params.push({
  name: item,
  dataList: utils.sheet_to_json(workbook.Sheets[item])
  });
  this.tableData.push(utils.sheet_to_json(workbook.Sheets[item]));
  });
  // 該算法僅針對(duì)表頭無合并的情況
  if (this.tableData.length > 0) {
  // 獲取excel中第一個(gè)表格數(shù)據(jù)tableData[0][0],并且將表頭提取出來
  for (const key in this.tableData[0][0]) {
  this.tableHead.push(key);
  }
  }
  return params;
  // 重寫數(shù)據(jù)
  } catch (e) {
  console.log("error:" + e);
  return false;
  }
  };
  fileReader.readAsBinaryString(file);
  },
  handleChange(res, file, fileList) {
  // 將文件放入
  for (let i = 0; i < fileList.length; i++) {
  if (file.name != fileList[i].name) {
  this.fileList.push({
  name: file.name,
  url: "",
  uid: file.uid
  });
  }
  }
  // this.fileList = fileList.slice(-3);
  const files = { 0: file };
  this.readExcel(files);
  },
  readExcel(file) {
  const fileReader = new FileReader();
  fileReader.onload = ev => {
  try {
  const data = ev.target.result;
  const workbook = read(data, { type: "binary" });
  const params = [];
  // 取對(duì)應(yīng)表生成json表格內(nèi)容
  workbook.SheetNames.forEach(item => {
  params.push({
  name: item,
  dataList: utils.sheet_to_json(workbook.Sheets[item])
  });
  this.tableData.push(utils.sheet_to_json(workbook.Sheets[item]));
  });
  // 該算法僅針對(duì)表頭無合并的情況
  if (this.tableData.length > 0) {
  // 獲取excel中第一個(gè)表格數(shù)據(jù)tableData[0][0],并且將表頭提取出來
  for (const key in this.tableData[0][0]) {
  this.tableHead.push(key);
  }
  }
  return params;
  // 重寫數(shù)據(jù)
  } catch (e) {
  console.log("error:" + e);
  return false;
  }
  };
  fileReader.readAsBinaryString(file[0].raw);
  }
  }
  };
  </script>
  <style scoped>
  .upload-demo {
  width: 100%;
  }
  .flex-display {
  margin: 50px 30px;
  width: 100%;
  display: flex;
  justify-content: flex-start;
  .left-box {
  margin: 20 30;
  height: 36px;
  line-height: 36px;
  }
  }
  .el-upload {
  margin-left: 40px;
  .el-btn {
  font-size: 16px;
  }
  .el-upload-tip {
  display: inline;
  font-size: 12px;
  }
  }
  .file-ipt {
  width: 200px;
  height: 36px;
  line-height: 36px;
  button {
  background-color: #409eff;
  }
  }
  input #file-upload-button {
  background-color: #409eff;
  }
  </style>

  4. 總結(jié)

  較為容易踩坑的點(diǎn)就是,這個(gè)其次

這是說下要注意xlsx這個(gè)包的導(dǎo)入方式在包處理excel表格功能時(shí)相當(dāng)強(qiáng)大的,除了導(dǎo)入與數(shù)據(jù)解析,還有導(dǎo)出為excel等功能,在我們?nèi)粘>W(wǎng)站開發(fā)中非常常用;還有就是容易踩坑的就是vue中事件的監(jiān)聽與處理方式,我們可以看到使用組件賀不使用組件區(qū)別還是比較大的,當(dāng)然使用現(xiàn)有組件往往能獲得更好的效果,所以這里還是推薦大家使用方法一去實(shí)現(xiàn)這個(gè)功能。

  這里說下對(duì)于數(shù)據(jù)處理都是仁者見仁的,都有自己的處理,能夠解決就是最好的。




文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128387.html

相關(guān)文章

  • 使用 SpreadJS 實(shí)現(xiàn) JavaScript 中導(dǎo)入和導(dǎo)出Excel文件

    摘要:而作為一款深受用戶喜愛的電子表格工具,借助其直觀的界面出色的計(jì)算性能和圖表工具,已經(jīng)成為數(shù)據(jù)統(tǒng)計(jì)領(lǐng)域不可或缺的軟件之一。使用實(shí)現(xiàn)的導(dǎo)入和導(dǎo)出通過純,您完全可以實(shí)現(xiàn)導(dǎo)入和導(dǎo)出文件功能,并為最終用戶提供與這些文件進(jìn)行交互的界面。 JavaScript是一個(gè)涵蓋多種框架、直譯式、可以輕松自定義客戶端的腳本語言,在 Web 應(yīng)用程序中,更加易于編碼和維護(hù)。而Excel 作為一款深受用戶喜愛的電...

    Jioby 評(píng)論0 收藏0
  • js-xlsx + handsontable + echarts實(shí)現(xiàn)excel上傳編輯然后顯示成圖表

    摘要:生成報(bào)表數(shù)據(jù)都處理完了之后,就是生成報(bào)表了,報(bào)表這里稍微做的靈活了一點(diǎn),是要讓用戶根據(jù)上傳的數(shù)據(jù),自己選擇字段,然后用去生成對(duì)應(yīng)的報(bào)表。 js-xlsx + handsontable + echarts 實(shí)現(xiàn)在前端導(dǎo)入excel數(shù)據(jù)并生成echart報(bào)表 前言 最近都在做類似 ERP 的項(xiàng)目,所以呢,又碰到一個(gè)比較變態(tài)的需求(至少對(duì)我來說是),在前端導(dǎo)入 excel 文件,然后在瀏覽器...

    joy968 評(píng)論0 收藏0
  • vue.js中如何導(dǎo)出Excel表格

    摘要:有一個(gè)項(xiàng)目需求,要求在前端項(xiàng)目中導(dǎo)出表格,經(jīng)過查找代碼確實(shí)可以實(shí)現(xiàn),具體實(shí)現(xiàn)步驟為安裝依賴導(dǎo)入兩個(gè)下載和,在目錄下新建文件夾,里面放入和兩個(gè)文件在引入這兩個(gè)文件在組件中使用導(dǎo)出的方法序號(hào)昵稱姓名上面設(shè)置的表格第一行的標(biāo)題上面的是里對(duì) 有一個(gè)項(xiàng)目需求,要求在前端項(xiàng)目中導(dǎo)出Excel表格,經(jīng)過查找代碼,Vue.js確實(shí)可以實(shí)現(xiàn),具體實(shí)現(xiàn)步驟為: 1.安裝依賴 npm install -S ...

    lunaticf 評(píng)論0 收藏0
  • Vue 2019開發(fā)者圖譜

    摘要:為了便于您更清晰的理解的體系架構(gòu),在這里我將為您展示年開發(fā)者知識(shí)圖譜,它包含了所有開發(fā)過程中的關(guān)鍵部分。在數(shù)據(jù)展示前端導(dǎo)入導(dǎo)出圖表面板數(shù)據(jù)綁定等場(chǎng)景無需大量代碼開發(fā)和測(cè)試,可極大節(jié)省企業(yè)研發(fā)成本并降低交付風(fēng)險(xiǎn)。 作為 Vue 的初學(xué)者,您或許已經(jīng)聽過很多關(guān)于它的專業(yè)術(shù)語了,例如:單頁面應(yīng)用程序、異步組件、服務(wù)器端呈現(xiàn)等,您可能還聽過和Vue經(jīng)常一起被提到的工具和庫,如Vuex、Webp...

    cgspine 評(píng)論0 收藏0
  • 純前端實(shí)現(xiàn)excel表格導(dǎo)入導(dǎo)出

    摘要:使用時(shí),前端可以將后端返回的數(shù)據(jù)拼接成自己需要導(dǎo)出的格式,下載到電腦中,完全不依賴后端。 前言 github: https://github.com/stardew516... 以往做excel表格下載功能的時(shí)候,都是后端生成好表格后,存儲(chǔ)在某個(gè)地方,然后給前端一個(gè)鏈接,前端使用a標(biāo)簽加download下載,或者使用node。其實(shí)純前端也是可以做表格下載的,有一個(gè)很好用的javascr...

    CoyPan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<