基于js-xlsx插件的echarts账单分析系统

基于js-xlsx插件的echarts账单分析系统

主程序:(注释比较详细,就不再说明了)

$(function() {
    
    
	// 头部彩蛋
	// console.log(document.getElementById("demo"));
	// console.log($("#demo")[0].outerHTML);
	$(".header_title_one")[0].click(function() {
    
    
		$(".header_title_two").css("opacity", "1");
	});

	// 表面file调用真实file上传
	$("#upfileBtn").click(function() {
    
    
		$("#upfileBtn__").click();
	});

	// 当文件上传完成响应change方法
	$("#upfileBtn__").change(function() {
    
    
		// 成功上传后外边框改为绿色
		$(".upfileImgDiv").css("border-color", "#009688");
		// 上传成功后按钮图片变为彩色
		$("#upfileImg").attr("src", "images/fenxiicon.png");
		// console.log(this);
		// importExcel(this);
	});

	// 点击分析按钮开始分析
	$("#upfileImg").click(function() {
    
    
		// console.log($("#upfileBtn__")[0]);
		layer.load(2, {
    
    
			shade: [0.1, '#fff'],
			time: 2000
		});
		// 等待前方的loading
		setTimeout(function() {
    
    
			$("#echartsContent").append(
				`<div id="demo" class="col-md-6" style="height: 500px;"></div>
										 <div id="demo1" class="col-md-6" style="height: 500px;"></div>`
			);
			importExcel($("#upfileBtn__")[0]);
		}, 2500);


	});

	var contentArray = [];
	var wb; //读取完成的数据
	var aa = [];
	var text = [];
	var rABS = false; //是否将文件读取为二进制字符串

	// 传递的参数
	var wraningError = 0,
		wraning = 0,
		noWraning = 0;

	var xDataArray = [];
	var zhuDataArray = [];

	//解析主程序
	function importExcel(obj) {
    
    
		// 饼图的存放的Dom
		var echartsBingDom = document.getElementById("demo");
		var echartsZhuDom = document.getElementById("demo1");

		// console.log(obj);
		if (!obj.files) {
    
    
			return;
		}
		const IMPORTFILE_MAXSIZE = 1 * 2048; //这里可以自定义控制导入文件大小
		var suffix = obj.files[0].name.split(".")[1]
		if (suffix != 'xls' && suffix != 'xlsx') {
    
    
			alert('导入的文件格式不正确!')
			return
		}
		if (obj.files[0].size / 1024 > IMPORTFILE_MAXSIZE) {
    
    
			alert('导入的表格文件不能大于2M')
			return
		}
		var f = obj.files[0];
		var reader = new FileReader();
		reader.onload = function(e) {
    
    
			var data = e.target.result;
			if (rABS) {
    
    
				wb = XLSX.read(btoa(fixdata(data)), {
    
     //手动转化
					type: 'base64'
				});
			} else {
    
    
				wb = XLSX.read(data, {
    
    
					type: 'binary'
				});
			}
			//wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
			//wb.Sheets[Sheet名]获取第一个Sheet的数据
			aa = JSON.stringify(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]));
			// console.log(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]));
			var u = eval('(' + aa + ')');
			//document.getElementById("demo").innerHTML = JSON.stringify(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]));
			contentArray = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]).slice(0);
			// console.log(contentArray[0]);
			for (let item in contentArray) {
    
    
				// 循环获取紧急不紧急的统计
				if (contentArray[item].priority == 1) {
    
    
					wraningError++;
				} else if (contentArray[item].priority == 2) {
    
    
					wraning++;
				} else if (contentArray[item].priority == 3) {
    
    
					noWraning++;
				}
				// 循环获取柱状图x轴数据
				let dataMoney = contentArray[item].money;
				let dataThing = contentArray[item].thing;
				// 插入x轴数据
				xDataArray.push(dataMoney);
				// 插入y轴数据
				zhuDataArray.push(dataThing);
			}

			// for(let ii=0; ii<contentArray.length;ii++){
    
    
			// 	let number = Number(contentArray[ii].money);
			// 	console.log(number)
			// 	// xDataArray = [...xDataArray, number];
			// 	xDataArray.push(number);
			// }
			// console.log(xDataArray);
			// console.log(zhuDataArray);

			// 建立饼状图
			echartsBing(echartsBingDom, wraningError, wraning, noWraning);

			// 建立柱状图
			echartsZhu(echartsZhuDom, xDataArray, zhuDataArray);

			//获取表格中为address的那列存入text中
			for (var i = 0; i < u.length; i++) {
    
    
				text.push(u[i].address);
			}

		};
		if (rABS) {
    
    
			reader.readAsArrayBuffer(f);
		} else {
    
    
			reader.readAsBinaryString(f);
		}
	}

	/**
	 * 饼状图
	 * dom:创建echarts的dom元素
	 * dataNumber:统计数据*/
	function echartsBing(echartsBingDom, wraningError, wraning, noWraning) {
    
    
		let myChart = echarts.init(echartsBingDom);
		let option = {
    
    
			color: ['#07c160', '#12b7f5', '#FF0036'],
			title: {
    
    
				text: '花费必要程度饼状图',
				left: 'center'
			},
			tooltip: {
    
    
				trigger: 'item',
				formatter: '{a} <br/>{b} : {c} ({d}%)'
			},
			legend: {
    
    
				orient: 'vertical',
				left: 'left',
				data: ['非常紧急', '紧急', '不必要']
			},
			series: [{
    
    
				name: '等级程度',
				type: 'pie',
				radius: '55%',
				center: ['50%', '60%'],
				data: [{
    
    
						value: wraningError,
						name: '非常紧急'
					},
					{
    
    
						value: wraning,
						name: '紧急'
					},
					{
    
    
						value: noWraning,
						name: '不必要'
					}
				],
				emphasis: {
    
    
					itemStyle: {
    
    
						shadowBlur: 10,
						shadowOffsetX: 0,
						shadowColor: 'rgba(0, 0, 0, 0.5)'
					}
				}
			}]
		};

		myChart.setOption(option);
	}

	/**
	 * 柱状图
	 * 展示全部的信息
	 * Dom:传递显示的Dom节点
	 * xData:传递x轴显示的数据
	 * zhuData:传递柱状图的数据*/
	function echartsZhu(echartsZhuDom, xData, zhuData) {
    
    
		console.log(xData);
		console.log(zhuData);
		let myChart = echarts.init(echartsZhuDom);
		let option = {
    
    
			title: {
    
    
				text: '花费项目柱状图',
				left: 'center'
			},
			tooltip: {
    
    
				trigger: 'axis',
				axisPointer: {
    
    
					type: 'shadow',
					label: {
    
    
						show: true
					}
				}
			},
			// 工具栏
			toolbox: {
    
    
				show: true,
				feature: {
    
    
					mark: {
    
    
						show: true
					},
					dataView: {
    
    
						show: true,
						readOnly: false
					},
					magicType: {
    
    
						show: true,
						type: ['line', 'bar']
					},
					restore: {
    
    
						show: true
					},
					saveAsImage: {
    
    
						show: true
					}
				}
			},
			// 距离边框位置
			grid: {
    
    
				top: '12%',
				left: '10%',
				right: '10%',
				containLabel: true
			},
			// x轴
			xAxis: [{
    
    
				name: '时间',
				// data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
				data: zhuData,
				axisLabel: {
    
    
					interval: 0,
					rotate: 40
				}
			}],
			// y轴
			yAxis: [{
    
    
				type: 'value',
				name: '金额'
			}],
			// 设置时间轴
			dataZoom: [{
    
    
				show: true,
				start: 0,
				end: 20
			}],
			// 设置柱状图图例内数据
			series: [{
    
    
				name: '金额:',
				type: 'bar',
				// data: [120, 200, 150, 80, 70, 110, 130],
				data: xData,
				itemStyle: {
    
    
					color: new echarts.graphic.LinearGradient(
						0, 0, 0, 1,
						[{
    
    
								offset: 0,
								color: '#83bff6'
							},
							{
    
    
								offset: 0.5,
								color: '#188df0'
							},
							{
    
    
								offset: 1,
								color: '#188df0'
							}
						]
					)
				},
				emphasis: {
    
    
					itemStyle: {
    
    
						color: new echarts.graphic.LinearGradient(
							0, 0, 0, 1,
							[{
    
    
									offset: 0,
									color: '#2378f7'
								},
								{
    
    
									offset: 0.7,
									color: '#2378f7'
								},
								{
    
    
									offset: 1,
									color: '#83bff6'
								}
							]
						)
					}
				}
			}]
		};

		myChart.setOption(option);

	};
})

这里注意,分析系统采用的excel表格式必须是下图所示样子,想要添加其他信息请在其他列中添加
在这里插入图片描述
ps:红框中必须照抄

有不想写的兄弟可以直接 下载

猜你喜欢

转载自blog.csdn.net/Feng_ye__/article/details/105848986