zoukankan      html  css  js  c++  java
  • 上传excel文件并绘制成图表

    通过input上传xlsx文件,并绘制成图表,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <script src="js/jquery.js"></script>
        <script src="js/xlsx.core.min.js"></script>
        <script src="js/echarts.min.js"></script>
        <title>上传excel文件并绘制成图表</title>
    </head>
    
    <body>
        <input type="file" id="file">
        <div id="container" style=" 400px; height: 400px;"></div>
        <script>
            $('#file').change(function (e) {
                var files = e.target.files;
    
                var fileReader = new FileReader(); // 将文件内容读入内存
                fileReader.onload = function (ev) { // 当读取操作成功完成时调用
                    // console.log(this.result); // 查看文件输出内容
                    try {
                        var data = ev.target.result,
    
                            //以二进制流方式读取得到表格中数据  
                            workbook = XLSX.read(data, { type: 'binary' }),
                            info = [];//存储获取到的数据  
                    } catch (e) {
                        alert('文件类型不正确');
                        return;
                    }
    
                    var fromTo = '';
                    //遍历每张表读取  
                    for (var sheet in workbook.Sheets) {
                        if (workbook.Sheets.hasOwnProperty(sheet)) {
                            fromTo = workbook.Sheets[sheet]['!ref'];
                            info = info.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
                        }
                    }
    
                    // 添加代码
                    var chart = echarts.init(document.getElementById('container'));
    
                    var info2 = [];
                    for (var i = 0; i < info.length; i++) {
                        var dataX = info[i].date;
                        var dataY = info[i].data;
                        var data1 = [dataX, dataY];
                        info2.push(data1);
                    }
                    var infoListX = info2.map(function (item) {
                        return item[0];
                    });
                    var infoListY = info2.map(function (item) {
                        return item[1];
                    });
                    option = {
                        visualMap: [{ // 视觉映射组件
                            show: false,
                            type: 'continuous',
                            seriesIndex: 0,
                            min: 0,
                            max: 400
                        }],
                        title: [{
                            left: 'center',
                            text: '柱状图'
                        }],
                        tooltip: { // 是否显示提示框组件
                            trigger: 'item' // 触发类型
                        },
                        xAxis: [{
                            data: infoListX.sort()
                        }],
                        yAxis: [{
                            splitLine: { show: false }
                        }],
                        grid: [{
                            bottom: '40',
                            right: '40',
                            left: '40',
                            top: '60'
                        }],
                        series: [{ // 系列列表
                            type: 'bar', // 图表类型
                            showSymbol: false,
                            data: infoListY
                        }]
                    };
                    chart.setOption(option);
                };
                //以二进制方式打开文件  
                fileReader.readAsBinaryString(files[0]);
            });  
        </script>
    </body>
    
    </html>

    1.jquery.js的下载地址:http://www.bootcdn.cn/jquery/

    2. xlsx.core.min.js的下载地址:https://github.com/SheetJS/js-xlsx/tree/master/dist

    3. echarts.min.js的下载地址:http://echarts.baidu.com/download.html

    其中echarts是一个图表插件,也可以使用highcharts插件,至于哪个插件比较好?我只能说仁者见仁智者见智吧,看个人爱好吧

  • 相关阅读:
    通过注册表实现开机自启的取消
    数据库为什么要使用B+树
    PHP的一种缓存方案静态化
    wordpress源码阅读
    最近在搞的东西有点多Gradle,Python,java,groove搞的脑子都要炸了,还得了流感。满满的负能量。
    编写一个自己的PHP框架(一)写在前面
    cookie,session机制
    __autoload和spl_autoload_register区别
    _initialize()和__construct()
    在往数据库中插入复杂的字符串时,单双引号混用经常会搞的很乱
  • 原文地址:https://www.cnblogs.com/-bingyan/p/8066650.html
Copyright © 2011-2022 走看看