js使用xlsx读取excel文件的详细步骤

目录
  • 下载安装插件
  • 文件基础
    • 获取文件对象
    • 读取文件数据
  • 读取Excel
    • 通过xlsx获取workbook
    • WorkBook介绍
    • 读取WorkBook
  • 导出Excel
    • 生成sheet
  • 总结

下载安装插件

npm install xlsx
or
yarn add xlsx

此时,在项目的node_modules文件夹和package.json文件中可以找到xlsx依赖。

文件基础

获取文件对象

我比较推荐使用h5的原生文件上传项

<input type="file" id="uploadExcel" multiple />

其中multiple属性允许上传多个文件,通过Ctrl按键来实现。

在选择文件的过程中,触发事件的流程是下面这样的:

  • mousedown
  • focus
  • mouseup
  • click
  • blur
  • focus
  • change

首先触发的是鼠标按下事件,然后就是焦点到了input上面,然后鼠标抬起事件,触发click事件,失去焦点以后弹出文件选择框,选中文件以后触发焦点,最后触发change事件。

所以监听input的文件内容变更事件的话,我推荐用change事件去监听。

添加事件监听:

window.document.getElementdById("uploadExcel").addEventListener("change", function(e){
    let fileList = e.target.files;
})

其中,打印fileList信息,可以发现fileList是一个类数组,由传入的file对象组成。每个file对象包含一下属性:


lastModified


Number


表示最近一次的修改时间的时间戳


lastModeifiedDate


Object


表示最后一次修改时间的Date对象,可以在其中调用Date对象的有关方法。


name


文件上传时的文件名


size


文件的字节大小


type


String


文件的MIME类型


weblitRelativePath


当在input上添加webkitdirectory属性时,可选文件夹,此时weblitRelativePath表示文件夹中文件的相对路径。未加时为空

读取文件数据

首先创建一个FileReader实例:

let reader = new FileReader();

FileReader提供了如下方法:


readAsArrayBuffer(file)


将文件读取为ArrayBuffer对象


readAsDataURL(file)


将文件读取为DataURL,因此可以读取图片。


readAsText(file, encoding)


将文件读取为文本,第二个参数是文本的编码方式,默认为utf-8


abort()


终止文件读取操作


注:无论读取成功或失败,方法并不会返回读取结果,这一结果存储都在result属性中。

FileReader事件:


onabort


当读取操作被终止时调用


onerror


当读取操作发生错误时调用


onload


当读取操作成功完成时调用


onloaded


当读取操作完成时调用,无论成功或失败


onloadstart


当读取操作开始时调用


onprogress


在读取数据过程中周期性调用

我们使用readAsDataURL(file)来读取文件数据,并使用onload事件来输出读取成功后result中的数据:

reader.onload = function(e){
    let data = e.target.result;
};
reader.readAsDataURL(file);

读取Excel

通过xlsx获取workbook

读取excel主要是通过以下语句实现:

XLSX.read(data, { type: type });

返回一个叫WordBook的对象。

其中,这里type的类型要与处理文件时读的data一致,FileReader方法对应的type取值如下:


base64


以base64方法读取


binary


BinatyString格式(byte n is data.charCodeAt (n))


string


UTF-8编码的字符串


buffer


nodejs Buffer


array


Uint8Array,8位无符号数组


file


文件的路径(仅nodejs下支持)

所以,全部代码如下:

let wb;  // 读取完成的数据
let rABS = false; // 是否将文件读取为二进制字符串
document.getElementById("excel").addEventListener("change",function (e) {
  if(!e.target.files) return;
  var f = e.target.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的数据
    document.getElementById("demo").innerHTML= JSON.stringify( XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]) );
  };
  if(rABS) {reader.readAsArrayBuffer(f);}
  else {reader.readAsBinaryString(f);}
  });

function fixdata(data) { //文件流转BinaryString
  var o = "",
  l = 0,
  w = 10240;
  for(; l < data.byteLength / w; ++l)
    o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
    o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
  return o;
}

WorkBook介绍

SheetNames保存了所有Sheet的名字

Sheets保存了每个Sheet的具体内容

Sheet Object

每个sheet Object表示一张表格,通过类似A1这样的键值保存每个单元格的内容。只要不是"!"开头的都表示普通的cell。特殊cell有:


sheet['!ref']


表示所有单元格的范围,例如A1到F8则记录为A1: F8


sheet[!merges]


存放单元格合并信息,是一个数组。每个数组由包含s和e构成的对象组成。s表示start,e表示end,r表示row,c表示col。

例如:

sheet1:{
    !merge: [
    {
        e: { c: 5, r: 0 },
      s: { c: 0, r: 0 }  // 表示A1到F1单元格合并
    },
    {
        e: { c: 5, r: 9 },
      s: { c: 0, r: 9 }  // 表示A10到F10单元格合并
    }
  ]
}

Cell Object


t


内容类型


s


String


n


Number


b


Boolean


d


Date


v


原始值


f


公式


如:B2 + B3


h


HTML内容


w


格式化后的内容


r


富文本内容


......

读取WorkBook

普通方法:

// 读取 excel文件
function outputWorkbook(workbook) {
  var sheetNames = workbook.SheetNames; // 工作表名称集合
  sheetNames.forEach(name => {
    var worksheet = Workbook.Sheets[name]; // 只能通过工作表名称来获取指定工作表
    for(var key in worksheet) {            // v是读取单元格的原始值
        console.log(key, key[0] === '!' ? worksheet[key] : worksheet[key].v);
    }
   });
}

根据!ref确定excel的范围,再根据!merges确定单元格合并,最后输出整个table。插件zi'shen已经写好工具类XLSX.utils给我们用:


sheet_to_html


转csv会忽略格式、单元格合并等信息


sheet_to_txt


sheet_to_csv


会保留单元格合并,但是生成的是HTML代码,不是<table>


sheet_to_json


sheet_to_formulae

导出Excel

生成sheet


aoa_to_sheet


将一个二维数组转成sheet


json_to_sheet


将由对象组成的数组转化成sheet


table_to_sheet


将table的dom直接转成sheet


sheet_add_aoa


将二维数组添加到现有工作表中


sheet_add_json


将js对象数组添加到现有工作表中

  • format_cell 生成单元格的文本值(使用数字格式)
  • encode_row / decode_row 在0索引行和1索引行之间转换
  • encode_col / decode_col 在0索引的列和列名之间转换
  • encode_cell / decode_cell 转换单元格地址
  • encode_range / decode_range 转换单元格范围

总结

到此这篇关于js使用xlsx读取excel文件的文章就介绍到这了,更多相关js用xlsx读取excel内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript实现导入导出excel的示例代码

    目录 Excel导入 html代码 js代码 Excel导出 html代码 js代码 Excel导入 html代码 <button style={{ color: '#1890ff', fontSize: '14px', cursor: 'pointer' }} onClick={() => { upFile(); }} > 导入 </button> <input id="upFile" type="file" style={{

  • 使用JS解析excel文件的完整实现步骤

    目录 前言 excel 表格文件到底是什么 JS 实现步骤 ZIP 解压 XML 解析 总结 前言 今天来聊一聊如何使用 JS 来解析 excel 文件,当然不是直接使用 exceljs.sheetjs 之类的库,那就没意思了,而是主要说一下 JS 解析 excel 表格是如何实现的. 注意本文主要讨论 xlsx 格式的 excel 表格,其它格式未探究并不清楚. excel 表格文件到底是什么 首先要解析 excel 文件,得先了解他是如何存储数据的,经过我百般搜索,终于在 GG 中找到了答案

  • js前端实现word excel pdf ppt mp4图片文本等文件预览

    目录 前言 实现方案 docx文件实现前端预览 代码实现 实现效果 pdf实现前端预览 代码实现 实现效果 excel实现前端预览 代码实现 实现效果 pptx的前端预览 实现效果 总结 前言 因为业务需要,很多文件需要在前端实现预览,今天就来了解一下吧. 可以点击下面地址体验喔 git仓库地址以及在线demo地址 实现方案 找了网上的实现方案,效果看起来不错,放在下面的表格里,里面有一些是可以直接通过npm在vue中引入使用. 文档格式 老的开源组件 替代开源组件 word(docx) mam

  • JavaScript 中使用SpreadJS导入和导出 Excel 文件的方法

    目录 设置 JavaScript 电子表格项目 添加 Excel 导入代码 将数据添加到导入的 Excel 文件 添加迷你图 添加 Excel 导出代码 JavaScript在前端领域占据着绝对的统治地位,目前更是从浏览器到服务端,移动端,嵌入式,几乎所有的所有的应用领域都可以使用它.技术圈有一句很经典的话“凡是能用JavaScript实现的东西,最后都会用JavaScript实现”.Excel 电子表格自 1980 年代以来一直为各行业所广泛使用,至今已拥有超过3亿用户,大多数人都熟悉 Exc

  • JS前端模拟Excel条件格式实现数据条效果

    目录 需求背景 需求分析 实现逻辑 完整代码实现 template 部分 style 部分 script 部分 最终实现效果 需求背景 最近业务中遇到一个有意思的需求,是要在现有的表格中实现类似 Excel 中的数据条的效果,在数据比较多的时候单纯看表格里的数字会比较密集且不容易对比,加上数据条之后就比较明显的看出数据的对比情况,也让表格看起来生动了一些,这算是融合了表格和柱状图的优点. 先来看下 Excel 的效果 下面记录下实现过程和原理. 需求分析 通过图片可以看出共有几种情况: 只有正值

  • javascript 实现纯前端将数据导出excel两种方式

    目录 前言 方法一 方法二 前言 修改之前项目代码的时候,发现前人导出excel是用纯javascript实现的.并没有调用后台接口. 之前从来没这么用过,记录一下.以备不时之需. 方法一 将table标签,包括tr.td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html, 代码如下: <html> <head>     <p style="font-size: 20p

  • js使用xlsx读取excel文件的详细步骤

    目录 下载安装插件 文件基础 获取文件对象 读取文件数据 读取Excel 通过xlsx获取workbook WorkBook介绍 读取WorkBook 导出Excel 生成sheet 总结 下载安装插件 npm install xlsx or yarn add xlsx 此时,在项目的node_modules文件夹和package.json文件中可以找到xlsx依赖. 文件基础 获取文件对象 我比较推荐使用h5的原生文件上传项 <input type="file" id=&quo

  • 纯JS实现的读取excel文件内容功能示例【支持所有浏览器】

    本文实例讲述了纯JS实现的读取excel文件内容功能.分享给大家供大家参考,具体如下: template.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JS-XLSX Live Demo</title> <link href="../css/boots

  • Python安装xarray库读取.nc文件的详细步骤

    目录 第一步: 第二步: 第三步: 附:Python使用xarray读取.nc文件并画出平均值 总结 太坑了,安装之前一定要关掉VPN!!!!!!我的python是3.8版本的. 第一步: 在命令行中输入以下代码安装xarray: conda install xarray 此时直接打开.nc文件可能会报错误,如果错误显示与IO有关,那么必须手动安装scipy和netCDF4,这两个库是用于支持xarray输出的库,如果不添加,就无法输出.nc文件. 第二步: 在命令行中输入以下代码安装scipy

  • 数据驱动测试DDT之Selenium读取Excel文件

    (1)安装xlrd pip3 install xlrd (2)示例脚本 ​import pytest import xlrd def get_data(): filename="F:\\学习\\自动化测试\\selenium自动化测试\\selenium_test\\data\\test.xls" # 读取工作簿 wb=xlrd.open_workbook(filename) # 读取第一个sheet页 sheet=wb.sheet_by_index(0) # 读取行 rows=she

  • 如何利用js读取excel文件并绘制echarts图形

    目录 1.场景描述 2.需求描述 3.功能实现 4.尾言 1.场景描述 通常来说,前端要拿到excel数据,都是先上传存储数据库,然后再请求后端接口,获取数据. 但有100个产品经理,就会有101个不同的需求. 本文以自己的vue项目为例. 2.需求描述 现有一张excel财务报表,需要根据这张excel表绘制成各种echarts图形,用于年度汇报. 不经过后端,前端独立完成. 3.功能实现 首先,为了将excel数据绘制成echarts图表,前端得拿到excel数据. 这里我们借助js-xls

  • JS实现读取Excel文件内容并生成二维码

    目录 需求 实现方案 puppeteer node-canvas 浏览器 问题分解 具体实现 启动一个本地服务器 创建html,引入资源库 解析xls文件 写入中间logo 写入底部文字 canvas转化为图片,并下载到本地 递归调用 最终效果 需求 一次普通的技术需求会议 ​ 项目经理首先发言 我们技术这边需要将xls表格中的几千条数据变成二维码,并且中间镶嵌logo,图片底部放置编号,由于xls表格数据私密,不能通过第三方完成 ​ 平常这个事情都是后端处理的,前端就是来摸鱼的,但是这次一反常

  • 可以读取EXCEL文件的js代码第1/2页

    首页给个有中文说明的例子,下面的例子很多大家可以多测试. 复制代码 代码如下: <script language="javascript" type="text/javascript"><!-- function readExcel() { var excelApp; var excelWorkBook; var excelSheet; try{ excelApp = new ActiveXObject("Excel.Applicatio

  • Node.js利用js-xlsx处理Excel文件的方法详解

    简介 本文介绍用 Node.js 中的 js-xlsx 库来处理 Excel 文件. js-xlsx 库是目前 Github 上 star 数量最多的处理 Excel 的库,功能强大,但上手难度稍大.文档有些乱,不适合快速上手. 本文对 js-xlsx 库进行一定的总结,并提供几个实用的例子供读者测试,学习,交流. 安装 $ npm install xlsx 一些概念 在使用这个库之前,先介绍库中的一些概念. workbook 对象,指的是整份 Excel 文档.我们在使用 js-xlsx 读取

  • Java 读取excel 文件流代码实例

    这篇文章主要介绍了Java 读取excel 文件流代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 public static void initType(String path) { try { //1 获取excel文件流 excel xls 文件 暂不支持xlsx if (path.contains("xlsx") || path.contains("XLSX")) { System.err.

  • 通过openpyxl读取excel文件过程解析

    这篇文章主要介绍了通过openpyxl读取excel文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.环境准备 python3环境.安装openpyxl模块 2.excel文件数据准备 3.为方便直接调用,本代码直接封装成类 from openpyxl import load_workbook class DoExcel: def __init__(self,filename): ''' :param filename: exce

随机推荐