基于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(
				`
`
); 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 // 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}
{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表格式必须是下图所示样子,想要添加其他信息请在其他列中添加
基于js-xlsx插件的echarts账单分析系统_第1张图片
ps:红框中必须照抄

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

你可能感兴趣的:(javascript,js,jquery,excel,js-xsls,echarts)