在做项目的时候,需要上传一些excel文件内容到服务器。但是,用户没有点击提交的时候,或者刷新到其他页面的时候,需要放弃本次操作。本来是想着用redis来做缓存,暂时存储。但由于用户未点击提交的情况比较负责,不太适合此场景。SO,推荐一个比较成熟的解决方案: js-xlsx

话不多说,直接上代码:
1. 定义一个文件上传项:

<input type="file" id="excel-file">
  1. 下载js-xlsx的相应 xlsx.core.min.js 文件后引入
$('#excel-file').change(function(e) {
            var files = e.target.files;
            var fileReader = new FileReader();
            fileReader.onload = function(ev) {
                try {
                    var data = ev.target.result,
                        workbook = XLSX.read(data, {
                            type: 'binary'
                        }), // 以二进制流方式读取得到整份excel表格对象
                        persons = []; // 存储获取到的数据
                } catch (e) {
                    console.log('文件类型不正确');
                    return;
                // 表格的表格范围,可用于判断表头是否数量是否正确
                var fromTo = '';
                // 遍历每张表读取
                for (var sheet in workbook.Sheets) {
                    if (workbook.Sheets.hasOwnProperty(sheet)) {
                        fromTo = workbook.Sheets[sheet]['!ref'];
                        console.log(fromTo);
                        persons = persons.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
                        // break; // 如果只取第一张表,就取消注释这行
                console.log(persons);
            // 以二进制方式打开文件
            fileReader.readAsBinaryString(files[0]);

PS:这个是正常使用jquery解决的。But,我的就比较坑了,项目用的是angularjs 2,导致我有调试了半天,很坑,记录一下:
1. 定义一个文件上传项:

<input ng-model="agentIds" type="file" style="margin-left: 480px;" id="excel-file" onchange="angular.element(this).scope().readExcel(this.files)" >
  1. 下载js-xlsx的相应xlsx.core.min.js 文件后引入
// 读取excel内容
    $scope.readExcel = function(e) {
        var files = e;
        console.log(e);
        var fileReader = new FileReader();
        fileReader.onload = function(ev) {
            try {
                var data = ev.target.result,
                    workbook = XLSX.read(data, {
                        type: 'binary'
                    }), // 以二进制流方式读取得到整份excel表格对象
                    persons = []; // 存储获取到的数据
            } catch (e) {
                console.log('文件类型不正确');
                return;
            // 表格的表格范围,可用于判断表头是否数量是否正确
            var fromTo = '';
            // 遍历每张表读取
            for (var sheet in workbook.Sheets) {
                if (workbook.Sheets.hasOwnProperty(sheet)) {
                    fromTo = workbook.Sheets[sheet]['!ref'];
                    console.log(fromTo);
                    persons = persons.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
                    // break; // 如果只取第一张表,就取消注释这行
            // 定义自己需要的返回值
            var res = "";
            for(var i = 0; i < persons.length; i++) {
                res += persons[i].agentId + ",";
            if(res.endWith(",")) {
                res = res.substr(0, res.length-1);
            $scope.agentIds = res;
            console.log("------>"+ $scope.agentIds);
        String.prototype.endWith=function(endStr){
            var d=this.length-endStr.length;
            return (d>=0&&this.lastIndexOf(endStr)==d)
        // 以二进制方式打开文件
        fileReader.readAsBinaryString(files[0]);

官方地址:https://github.com/SheetJS/js-xlsx

最后,推荐一篇博客,对我帮助很大:前端读取Excel报表文件

在做项目的时候,需要上传一些excel文件内容到服务器。但是,用户没有点击提交的时候,或者刷新到其他页面的时候,需要放弃本次操作。本来是想着用redis来做缓存,暂时存储。但由于用户未点击提交的情况比较负责,不太适合此场景。SO,推荐一个比较成熟的解决方案:js-xlsx。话不多说,直接上代码: 1. 定义一个文件上传项:&amp;lt;input type=&quot;file&quot; id=&quot;excel-f...
我们在做项目的时候可能会遇到一些需要导入导出excel数据的功能,网上看到一个开源的插件可以实现相关的功能,于是今天就花了点时间看了下这个插件的一些使用。 插件github地址:https://github.com/SheetJS/js-xlsx/ 参考文章:https://www.cnblogs.com/liuxianan/p/js-excel.html 代码如下: <!DOCT...
代码如下: [removed] function readThis(){ var tempStr = “”; var filePath= document.all.upfile.value; var oXL = new ActiveXObject(“Excel.application”); var oWB = oXL.Workbooks.open(filePath); oWB.worksheets(1).select(); var oSheet = oWB.ActiveSheet; try{ for(var i=2;i<46;i++){ if(oSheet.Cells(i,2).value ==
var reader = new FileReader(); var file = file_obj.files[0]; reader.readAsBinaryString(file); reader.onload = function (e) { var data = e.target.result; var wb = XLSX.read(data, {type: 'binary'}); sheetName = wb.SheetNames[0] // 获取文档中第一个sheet页签的名字 sheets = wb.Sheets[sheetName] // 获sheet名页签下的数据 var array=XLSX.utils.sheet_to_json(sheets)
js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。 官方github:GitHub - SheetJS/sheetjs: SheetJS Community Edition -- Spreadsheet Data Toolkit 本文配套demo在线演示地址:JS读取和导出excel示例
网上看了很多前端导入Excel的文章,都不支持IE,所以打算记录一下。 使用js-xlsx前端读取Excel文件,把读取的表格数据放到页面的table中。例子如下 <!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=UTF...
excel表格导入到数据库,有多种办法,可以使用数据库管理工具,可以使用python写个脚本,也可以用java开发个小功能,还可以用php来开发。但是当条件受限的时候,没有工具,没有脚本运行环境,这几个现成的方法都无法施展。唯独javascript还能自由的运行,只能基于JavaScript来写脚本,读取excel文件,然后导入到数据库。 1、先准备两个知识点: H5赋予了JavaScript读取本地文件的能力。 HTML5技术出现以后,提供了从本地读取文件的API,因此可以在前端使用JavaScr
项目下引入:npm install xlsx --save 需要调用组件处:import xlsx from 'xlsx' 页面添加:<input type="file" @change="changeFile" /> methods中添加函数: changeFile(e) { var files = e.target.files; var fileReader = n...
要使用JavaScript读取Excel文件,您可以使用一些库或API来帮助解析和提取Excel数据。以下是两种常用的方法: 1. 使用第三方库:通过使用像`SheetJS`或`xlsx`这样的JavaScript库,您可以在浏览器中解析和读取Excel文件。这些库提供了一组API,可以将Excel文件转换为JavaScript对象或数组,以便进一步处理和使用。您可以通过在HTML页面中引入相关库的脚本文件,并使用其提供的API来读取Excel文件。例如,使用SheetJS库的示例代码如下: ```javascript // 引入SheetJS库 <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> // 选择文件读取Excel数据 var fileInput = document.getElementById('fileInput'); fileInput.addEventListener('change', function(e) { var file = e.target.files[0]; var reader = new FileReader(); reader.onload = function(e) { var data = new Uint8Array(e.target.result); var workbook = XLSX.read(data, { type: 'array' }); var sheetName = workbook.SheetNames[0]; var worksheet = workbook.Sheets[sheetName]; var jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); console.log(jsonData); reader.readAsArrayBuffer(file); 请注意,上述示例代码假设您已经在HTML页面中定义了一个文件输入框,并具有ID为`fileInput`。 2. 使用HTML5 File API:HTML5 File API提供了一些功能,可以直接在浏览器中读取文件。您可以使用`FileReader`对象读取Excel文件,并按照需要解析和处理数据。以下是一个简单的示例: ```javascript var fileInput = document.getElementById('fileInput'); fileInput.addEventListener('change', function(e) { var file = e.target.files[0]; var reader = new FileReader(); reader.onload = function(e) { var data = new Uint8Array(e.target.result); // 在这里对data进行解析和处理 console.log(data); reader.readAsArrayBuffer(file); 上述示例代码假设您已经在HTML页面中定义了一个文件输入框,并具有ID为`fileInput`。 请注意,这两种方法都依赖于浏览器的支持,并且可能有一些限制或兼容性问题。仔细阅读相关库或API的文档,并在使用之前进行适当的测试和兼容性检查。