以下是几种用的较多的函数方法,可以参考使用。

// 導出1
myExport() {
// post請求文件寫法1
const url = 'http://XXXX/XXXX/XXXX/XXXX'
const formData = new FormData()
formData.append('file', '123')
this.axios({
method: 'post',
url: url,
data: formData,
responseType: 'blob' // 表明返回服務器返回的數據類型
}).then(_ => {
const content = _
const blob = new Blob([content])
const fileName = '測試表格.xls'
if ('download' in document.createElement('a')) {
// 非IE下载
const aLink = document.createElement('a')
aLink.download = fileName
aLink.style.display = 'none'
aLink.href = URL.createObjectURL(blob)
aLink.setAttribute('target', '_blank')
document.body.appendChild(aLink)
aLink.click()
URL.revokeObjectURL(aLink.href) // 释放URL 对象
document.body.removeChild(aLink)
} else {
// IE10+下载
navigator.msSaveBlob(blob, fileName)
}
})
// post請求文件寫法2
},
<template>
<div>通用函數頁面</div>
</template>
<script>
// 導出表格數據1
import toExcel from '../common.js'
// 導出表格數據2
export default {
methods: {
// 導出表格數據1
formatJson(filterVal, jsonData) {
return jsonData.map(v => filterVal.map(j => v[j]))
},
myGetDate() {
// 这段每个都加了数据处理成的格式备注,很容易明白
const th = ['參數1', '參數2', '參數3', '參數4']
const filterVal = ['name', 'age', 'grade', 'score']
const dataSource = [
{ name: '值1', age: '值2', grade: '值3', score: '值4' },
{ name: '值1', age: '值2', grade: '值3', score: '值4' }
]
var data = this.formatJson(filterVal, dataSource)
// data得到的值为[["小绵羊","12","六年级","100"],["小猪猪,"23","五年级","98"]]
// 注意:二维数组里的每一个元素都应是字符串类型,否则导出的表格对应单元格为空
toExcel({ th, data, fileName: '设备导出数据', fileType: 'xlsx', sheetName: 'sheet名' })
},
// 導出表格數據2
// 導出模板方法-get、兩種-post、一種
// get導出模板方案一:通过创建iframe的方式1
myGetExport1() {
// get請求寫法1
const elemIF = document.createElement('iframe')
elemIF.src = ''
elemIF.style.display = 'none'
document.body.appendChild(elemIF)
// get請求寫法2
},
// get導出模板方案一:通过创建iframe的方式2
// get導出模板方案二:不太好用哦~~通过a标签的链接向后端服务发get请求,接收后端的文件流1
downloadTemplate() {
const url = ''
const a = document.createElement('a')
a.style.display = 'none'
a.setAttribute('target', '_blank')
a.href = url
a.click()
// window.open(url);
},
// get導出模板方案二:通过a标签的链接向后端服务发get请求,接收后端的文件流2
// post方法導出模板方案一fetch:1
myFetch() {
requestData = {
no: this.noArr, //這個給的是勾選的no列表
// no: this.myLists,//這個給的是勾選的id列表
partsn: this.data4.map(_ => (_ = _.no))
}
//下载execl文件
const url = ''
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(requestData)
})
.then(res => res.blob())
.then(data => {
this.showSpin = false
let blobUrl = window.URL.createObjectURL(data)
const a = document.createElement('a')
a.style.display = 'none'
a.setAttribute('target', '_blank')
a.download = '<List>'
a.href = blobUrl
a.click()
})
},
// post方法導出模板方案一fetch:2
// post方法導出模板方案二axios:1
myPostExport() {
// post請求文件寫法1
const url = ''
const formData = new FormData()
formData.append('file', '123')
this.axios({
method: 'post',
url: url,
data: formData,
responseType: 'blob' // 表明返回服務器返回的數據類型
}).then(_ => {
const content = _
const blob = new Blob([content])
const fileName = '測試表格.xls'
if ('download' in document.createElement('a')) {
// 非IE下载
const aLink = document.createElement('a')
aLink.download = fileName
aLink.style.display = 'none'
aLink.href = URL.createObjectURL(blob)
aLink.setAttribute('target', '_blank')
document.body.appendChild(aLink)
aLink.click()
URL.revokeObjectURL(aLink.href) // 释放URL 对象
document.body.removeChild(aLink)
} else {
// IE10+下载
navigator.msSaveBlob(blob, fileName)
}
})
// post請求文件寫法2
},
// post方法導出模板2
// 導入表格的方法1
// 導入表格的方法2
// 導入文本讀取文本的方法1
myUploadTxt(e) {
const myData = {
status: '',
result: []
}
if (e.target.files[0]) {
console.log(e.target.files[0].type)
if (e.target.files[0].type === 'text/plain') {
const fileReader = new FileReader()
fileReader.readAsText(e.target.files[0], 'utf-8')
fileReader.onload = () => {
console.log(fileReader.result)
}
// fileReader.readAsText(e.target.files[0]);
} else {
myData.status = 'error'
return myData
}
}
},
// 導入文本讀取文本的方法2
// 導入文本讀取表格的方法1
// 上传表格1
readExcel(e) {
//表格导入
const files = e.target.files
// console.log(files);
if (files.length <= 0) {
//如果没有文件名
return false
} else if (!/\.(xls|xlsx)$/.test(files[0].name.toLowerCase())) {
// this.msg.error('上传格式不正确,请上传xls或者xlsx格式');
return false
} const fileReader = new FileReader()
fileReader.onload = (ev) => {
try {
const data = ev.target.result
const workbook = XLSX.read(data, {
type: 'binary'
})
const wsname = workbook.SheetNames[0] //取第一张表
const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]) //生成json表格内容
// console.log(ws);
const excellist = [] //清空接收数据
//编辑数据
for (var i = 0; i < ws.length; i++) {
excellist.push(ws[i])
}
// 此时得到的是一个内容是对象的数组需要处理
// console.log(excellist);
let arr1 = excellist.map(_ => Object.values(_)[0])
// console.log(arr1);
this.resultArr = arr1.map((_, idx) => {
return {
id: idx + 1,
name: idx + 1,
age: _
}
})
// console.log(this.resultArr)
} catch (e) {
// console.log('出错了')
return false
}
}
fileReader.readAsBinaryString(files[0])
// 如果需要後台處理表格數據,就執行如下操作1
// 如果是發送後台解析,就這樣發送1
// let url = '';
// let myformdataFile = {
// file: e.target.files[0]
// }
// if (e.target.files[0]) {
// this.http.post(url, myformdataFile).subscribe((res: any) => {
// if (res.status == 'success') {
// console.log(res)
// } else {
// this.msg.warning(res.message);
// return false;
// }
// });
// }
// 如果是發送後台解析,就這樣發送2
// 如果需要後台處理表格數據,就執行如下操作2
},
// 上传表格2
// 導入文本讀取表格的方法2
// 輸入文本檢測過濾空格函數形成數組
// 用戶輸入數據使用空格,逗號,隔開,我們需要分解成數組1
// inputvalue 字符串格式
textValue(inputvalue) {
if (inputvalue) {
// 當用戶輸入用空格隔開時候使用
let resultArr = inputvalue
.split(/[,,\s]+/gm)
.filter(_ => _)
.map(item => {
// 當用戶輸入用逗號隔開時候使用
// let resultArr = inputvalue.split(/[,,\s]+/gm).filter(_ => _).map(item => {
if (item.length != 0) {
return item
} else {
// console.log(item)
// this.msg.error('請重輸');
this.resultArr = []
return false
}
})
// console.log(resultArr)
return resultArr
} else {
// this.msg.error('輸入不能空');
return false
}
}
// 用戶輸入數據使用空格,逗號,隔開,我們需要分解成數組2
}
}
</script>

关联js

// 導出表格專用代碼1
/** ***********这段直接复制就好,看明白最好,不明白也不影响使用*************/
import XLSX from 'xlsx'
import { saveAs } from 'file-saver' function s2ab(s) {
const buf = new ArrayBuffer(s.length)
const view = new Uint8Array(buf)
for (let i = 0; i !== s.length; ++i) {
view[i] = s.charCodeAt(i) & 0xFF
}
return buf
}
function data2ws(data) {
const ws = {}
const range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } }
for (let R = 0; R !== data.length; ++R) {
for (let C = 0; C !== data[R].length; ++C) {
if (range.s.r > R) range.s.r = R
if (range.s.c > C) range.s.c = C
if (range.e.r < R) range.e.r = R
if (range.e.c < C) range.e.c = C
const cell = { v: data[R][C] }
if (cell.v == null) continue
const cellRef = XLSX.utils.encode_cell({ c: C, r: R })
if (typeof cell.v === 'number') cell.t = 'n'
else if (typeof cell.v === 'boolean') cell.t = 'b'
else if (cell.v instanceof Date) {
cell.t = 'n'
cell.z = XLSX.SSF._table[14]
} else {
cell.t = 's'
}
ws[cellRef] = cell
}
}
if (range.s.c < 10000000) {
ws['!ref'] = XLSX.utils.encode_range(range)
}
return ws
}
function Workbook() {
if (!(this instanceof Workbook)) {
return new Workbook()
}
this.SheetNames = []
this.Sheets = {}
}
/*
* th => 表头
* data => 数据
* fileName => 文件名
* fileType => 文件类型
* sheetName => sheet页名
*/
// 导出封装好的方法
export default function toExcel({ th, data, fileName, fileType, sheetName }) {
data.unshift(th)
const wb = new Workbook()
const ws = data2ws(data)
sheetName = sheetName || 'sheet1'
wb.SheetNames.push(sheetName)
wb.Sheets[sheetName] = ws
fileType = fileType || 'xlsx'
var wbout = XLSX.write(wb, { bookType: fileType, bookSST: false, type: 'binary' })
fileName = fileName || '列表'
saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), `${fileName}.${fileType}`)
}
// 導出表格專用代碼2

Vue导出模板、使用前端js办法导出表格数据、导入表格前端读取表格数据、导入表格发送后端读取数据的更多相关文章

  1. 前端JS Excel导出

    本文转载自:https://blog.csdn.net/plmzaqokn11/article/details/73604705 下载table2Excel插件 <input type=&quo ...

  2. 模板模式创建一个poi导出功能

    之前的导出都很乱,直接写在代码中,等到下回还使用导出功能时又不知如何下手,今天用模板模式重写了一个导出功能,方便以后使用: package com.sf.addrCheck.util.export.p ...

  3. vue脚手架使用swiper /引入js文件/引入css文件

    1.安装vue-cli 参考地址:https://github.com/vuejs/vue-cli 如果不使用严格语法需要在后三项打no:(加了挺头疼的,老是报错,但是对自己的代码规范性也是有很大的帮 ...

  4. vue引入swiper vue使用swiper vue脚手架使用swiper /引入js文件/引入css文件

    vue引入swiper  vue使用swiper  vue脚手架使用swiper /引入js文件/引入css文件 ------------------------------------------- ...

  5. 前端Js跨域方法汇总—剪不断,理还乱,是跨域

    1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...

  6. html table表格导出excel的方法 html5 table导出Excel HTML用JS导出Excel的五种方法 html中table导出Excel 前端开发 将table内容导出到excel HTML table导出到Excel中的解决办法 js实现table导出Excel,保留table样式

    先上代码   <script type="text/javascript" language="javascript">   var idTmr; ...

  7. vue后台_纯前端实现excel导出/csv导出

    之前的文件下载功能一般是由前后端配合实现,由于项目需要,纯前端实现了一把excel的导出功能: 一.excel导出 1.安装依赖库 xlsx:这是一个功能强大的excel处理库,但是上手难度也很大,还 ...

  8. js前端导出excel:json形式的导出

    第一中形式的导出:主要是表头对应主体数据,json形式的导出 js库文件名称 : table2excel.js这个js库文件是网上找的,并且自己根据自己业务需求把内容改了一下复制到 table2exc ...

  9. Vue 浅谈前端js框架vue

    Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ...

  10. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

随机推荐

  1. 十四、资源控制器之RS

    RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 .即如果有容器异常退出,会自动创建新的 Pod 来替代:而如果异常多出来的容器也 ...

  2. Redis 先操作数据库和先删除缓存, 一致性分析

    初始状态: 数据库和缓存中v=10 第一种,先删除缓存在操作数据库: 线程1准备更新数据库的值v=20,先删除缓存, 此时线程2进来, 缓存未命中,查询数据库v=10, 写入缓存v=10, cpu回到 ...

  3. 《ASP.NET Core技术内幕与项目实战》精简集-目录

    本系列是杨中科2022年最新作品<ASP.NET Core技术内幕与项目实战>及B站配套视频(强插点赞)的精简集,是一个读书笔记.总结和提炼了主要知识点,遵守代码优先原则,以利于快速复习和 ...

  4. pinpoint:初始化hbase数据库

    安装完成hbase之后,需要初始化hbase的pinpoint库(创建表). 1. 登录数据库 [root@monitor default]# cd /home/pinpoint/hbase-1.7. ...

  5. Java开发学习(四十一)----MyBatisPlus标准数据层(增删查改分页)开发

    一.标准CRUD使用 对于标准的CRUD功能都有哪些以及MyBatisPlus都提供了哪些方法可以使用呢? 我们先来看张图: 1.1 环境准备 这里用的环境就是Java开发学习(四十)----MyBa ...

  6. 开发用户K8S授权

    #开发用户没有K8S权限 [ans@master ~]$ kubectl get po Unable to connect to the server: x509: certificate signe ...

  7. 获取联通光猫PT952G的管理员密码

    前言 普通用户的帐号和密码在光猫的背面 输入光猫网关即可跳转到登录界面 但是没有什么权限操作东西,所以我找到了管理员界面 输入 网关+cu.html 即可跳转到管理员界面 例如我这里是http://1 ...

  8. 解决linux vlc设置中文问题

    解决方法 sudo apt install vlc-l10n

  9. 4.3:flume+Kafka日志采集实验

    〇.目标 使用kafka和flume组合进行日志采集 拓扑结构 一.重启SSH和zk服务 打开终端,首先输入:sudo service ssh restart 重启ssh服务.之后输入下述命令开启zo ...

  10. 【每日一题】【直接循环&二分查找】2022年2月10日-NC32 求平方根

    描述实现函数 int sqrt(int x).计算并返回 x 的平方根(向下取整) 方法1:直接循环 import java.util.*; public class Solution { /** * ...