excel导入
excel导入需要依赖elementui的上传组件,将上传的文件获取到以后,将文件的数据读取出来,解析成json格式,然后转换成我们可以显示的表格数据,然后展示在表格中。
文件上传组件
1 2 3 4 5 6 7 8 9 10
| <el-upload class="upload-demo" action :on-change="onChange" accept=".xlsx,.xls" :auto-upload="false" :show-file-list="false" > <el-button size="small" type="primary">导入</el-button> </el-upload>
|
其中的on-change表示选择的文件信息发生变化的时候会触发的方法,所以需要在methods中定义onChange方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| onChange(file, fileList) { let reader = new FileReader(); reader.readAsBinaryString(file.raw); reader.onload = (ev) => { }; },
|
当读取到文件数据后,需要依赖第三方模块xlsx处理数据:
下载:
导入并解构需要用到的方法:
1
| import {read, utils} from 'xlsx'
|
使用第三方模块处理数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| let workbook = read(文件二进制数据, { type: "binary" })
workbook.SheetNames.forEach((item, index) => { let worksheet = workbook.Sheets[item]; let data = utils.sheet_to_json(worksheet); if(data.length) { this.tableData = data.map(v => { return { year: v.毕业年份, number: v.毕业人数, } }) } })
|
接下来根据当前组件中的表格数据显示表格即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <el-table :data="tableData" style="width: 100%"> <el-table-column prop="year" label="毕业年份" width="180"> </el-table-column> <el-table-column prop="number" label="毕业人数" width="180"> </el-table-column> </el-table>
|
表格数据如下图:

excel导出
excel导出也是依赖第三方模块xlsx,过程是将数据展示在表格中,然后转换表格数据为excel数据,创建excel工作表,将数据写入工作表中,将excel下载到本地即可。
展示表格:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <el-button type="success" @click="tableExport">导出</el-button> <el-table :data="tableData" style="width: 100%"> <el-table-column prop="year" label="毕业年份" width="180"> </el-table-column> <el-table-column prop="number" label="毕业人数" width="180"> </el-table-column> </el-table>
|
点击导出按钮执行导出操作,在methods中定义了tableExport方法,方法中使用xlsx操作数据。
导入:
1
| import {utils, writeFile} from 'xlsx'
|
方法中操作数据并导出excel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| tableExport() { let arr = this.tableData.map(item => { return { '毕业年份': item.year, '毕业人数': item.number } }) let sheet = utils.json_to_sheet(arr); let book = utils.book_new(); utils.book_append_sheet(book, sheet, "毕业统计"); writeFile(book, `毕业统计.xls`); },
|
echart图表的使用
echarts是基于canvas封装而成的一个专业做统计图表的js库,使用方式非常简单:
- 下载并导入echars
- echarts初始化一个dom标签
- echarts设置配置项
例:
下载
导入
1
| import * as echarts from "echarts";
|
数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| list: [ { year: '2018', number: 1 }, { year: '2019', number: 2 }, { year: '2020', number: 2 }, { year: '2021', number: 7 }, { year: '2022', number: 18 }, { year: '2023', number: 16 }, { year: '2024', number: 1 } ],
|
初始化echarts一个dom标签
1 2 3
| mounted() { this.charts = echarts.init(document.querySelector('#chart')) },
|
转换数据成柱状图需要的配置项:
1 2 3 4 5 6 7 8 9 10 11 12
| this.chartsOption = { xAxis: { data: [...this.list.map(item => item.year)] }, yAxis: {}, series: [ { type: 'bar', data: [...this.list.map(item => item.number)] } ] }
|
给echarts设置配置项:
1
| this.charts.setOption(this.chartsOption)
|
其他不同图表的配置项,参考官网:https://echarts.apache.org/examples/zh/index.html#chart-type-line
地图
下载地图数据:https://datav.aliyun.com/portal/school/atlas/area_selector
下载echarts
导入echart
导入地图数据
1 2 3 4 5 6 7
| let myCharts = echarts.init(标签)
echarts.registerMap(地图名称, 导入的地图数据)
设置option - geo
myCharts.setOption(option)
|