读取excel表格

1-js-xlsx 介绍

由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。

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

1.2. 如何使用

dist目录下有很多个JS文件,一般情况下用xlsx.core.min.js就够了,xlsx.full.min.js则是包含了所有功能模块。直接script标签引入即可:

<script type="text/javascript" src="./js/xlsx.core.min.js"></script>

2读取excel

读取excel主要是通过XLSX.read(data, {type: type});方法来实现,返回一个叫WorkBook的对象,type主要取值如下

  • base64: 以base64方式读取;
  • binary: BinaryString格式(byte n is data.charCodeAt(n))
  • string: UTF8编码的字符串;
  • buffer: nodejs Buffer;
  • array: Uint8Array,8位无符号数组;
  • file: 文件的路径(仅nodejs下支持);

2.1.1. 读取本地文件

// 读取本地excel文件
let aForm = document.getElementsByClassName("input")[0]

aForm.onchange=function(event){
      readWorkbookFromLocalFile(this.files[0],function(value){
        console.log(value);
      })
}

function readWorkbookFromLocalFile(file, callback) {
	var reader = new FileReader();
	reader.onload = function(e) {
		var data = e.target.result;
		var workbook = XLSX.read(data, {type: 'binary'});
		if(callback) callback(workbook);
	};
	reader.readAsBinaryString(file);
}

2.1.2. 读取网络文件

// 从网络上读取某个excel文件,url必须同域,否则报错
function readWorkbookFromRemoteFile(url, callback) {
	var xhr = new XMLHttpRequest();
	xhr.open('get', url, true);
	xhr.responseType = 'arraybuffer';
	xhr.onload = function(e) {
		if(xhr.status == 200) {
			var data = new Uint8Array(xhr.response)
			var workbook = XLSX.read(data, {type: 'array'});
			if(callback) callback(workbook);
		}
	};
	xhr.send();
}

Workbook Object

workbook里面有什么东西呢
SheetNames里面保存了所有的sheet名字,然后Sheets则保存了每个sheet的具体内容(我们称之为Sheet Object)。每一个sheet是通过类似A1这样的键值保存每个单元格的内容,我们称之为单元格对象(Cell Object)

2.2.4. 读取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);
		}
	});
}

采用转csv方式输出结果的简单示例

// 处理数据
function readWorkbook(workbook){
    let sheetNames = workbook.SheetNames; // 工作表名称集合
    let worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
    let csv = XLSX.utils.sheet_to_csv(worksheet);
    // 得到数据
    csv2table(csv);
}

// 将csv转换对应格式

function csv2table(csv) {
    let rows = csv.split('\n');
    rows.pop(); // 最后一行没用的
    let html="";
    let ap="";
    rows.forEach(function (row, idx) {
        let columns = row.split(',');
        columns.forEach(function (column,index) {
            if(index){
                html += '<p>' + column + '</p>';
                newArr.push(column)
            }else{
                ap +='<p>' + column + '</p>';
                newArr1.push(column)
            }
        });
    });
    aNickname.innerHTML=ap;
    aNumber.innerHTML=html
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值