Excel读取/导出——SheetJS简单使用

获取SheetJS插件

SheetJS官方文档

// 安装
# yarn add https://cdn.sheetjs.com/xlsx-0.18.10/xlsx-0.18.10.tgz

简单使用

注:表格导出有多种方式,如果无法获取Table Dom,如Element UI 会将table最终转换为div套div的形式,这样的话只能用数据转换成excel进行导出(略显麻烦);如果可以拿到Table Dom,则可以用Dom 转为Excel方式导出。

Dom转换为Excel

三步:

  1. 引入XLSX
  2. 获取table Dom
  3. 导出
<template>
  <div>
    <button @click="exportExcel"><b>导出excel</b></button><br/><br/>
    <table id="table1">
      <tr><td>A2</td><td>B2</td></tr>
      <tr><td>A3</td><td>B3</td></tr>
    </table>
  </div>
</template>
<!-- 页面中直接引用 -->
<script>
  import XLSX from "xlsx/dist/xlsx.full.min.js"
  export default{
  	methods:{
      exportExcel(){
        const table = document.getElementsByClassName("table1")[0]
        //将table转成工作簿
        //raw:true
        //表示类型都为文字类型即无需自动转换各种类型,这里仅为处理100%转换成数字100的问题
        const wb = XLSX.utils.table_to_book(table,{raw:true})
        //导出
        XLSX.writeFile(wb,"SheetJS.xlsx")
      }
    }
  }
</script>

对象转换成Excel

<template>
	<div>
		<button @click="exportExcel"><b>导出excel</b></button><br/><br/>
	</div>
</template>
<script>
import XLSX from "xlsx/dist/xlsx.full.min.js"
export default{
	data(){
		return {
			tableData:[
				{A:'A1',B:'B1',C:'C1'},
				{A:'A2',B:'B2',C:'C2'},
				{A:'A3',B:'B3',C:'C3'}
			]
		}
	},	
	methods:{
		exportExcel(){
			//创建工作簿
			var workbook = XLSX.utils.book_new()
			//将数据添加到工作表
			var worksheet = XLSX.utils.json_to_sheet(this.tableData,{header:['A','B','C'],skipHeader:true})
			//插入一行数据到第一行
			//模拟一条数据
			const data=[
				{A:'A4',B:'B4',C:'C4'}
			]
			XLSX.utils.sheet_add_json(worksheet,data,{header:header:['A','B','C']})
			//工作簿、工作表、工作表名
			XLSX.utils.book_append_sheet(workbook,worksheet,"sheet1")
			XLSX.writeFile(workbook,"sheetJS.xlsx`在这里插入代码片`")
		}	
	}
}
</script>

读取file并分析excel数据

header固定值:

headerDescription
1Generate an array of arrays
“A”Row object keys are literal column labels
array of stringsUse specified strings as keys in row objects
(default)Read and disambiguate first row as keys

range取值:

rangeDescription
(number)Use worksheet range but set starting row to the value
(string)Use specified range (A1-Style bounded range string)
(default)Use worksheet range (ws[‘!ref’])

async function readExcel(event){
//获取arraybuffer
			let data = await event.target.files[0].arrayBuffer();
			//读取数据并获得工作簿
			let workbook = XLSX.read(data);
			//拿到工作簿中的工作表
			let sheet = workbook.Sheets.事件;
			//读取工作表并获取表头
			let header = XLSX.utils.sheet_to_json(sheet,{
				/*
					读取工作簿范围
					取值范围:
					number:起始行,如果设置为10,那么就从第十行开始读
				*/
			    range:'A1:I2',//读取范围
			    /*
					设置表头,如果不设置,可能读不出来数据
					1:每一行都是按照数组生成,
					'A':每一行都是对象,且对象属性命名按照A、B、C...排列,
					['测试1','测试2','测试3']:每一行都是对象,如果设置成数组,那么对象属性命名将会按照该数组的顺序进行依次排列,注意列中的空格,将会计算在内,如果这列数据为空,则这个属性不显示;如果固定数组,那么只会按照该数组大小排列,比如在excel中,这一行有8列,而数组却只有6个,那么每行数据最多只展示6个,若这8列数据中有两个空,那么最终结果这行会展示4个数据。
					默认:按照第一行数据命名
					//
				*/
			    header:1,//表头
			})
			let datas = XLSX.utils.sheet_to_json(sheet,{
			    range:'A1:I24',
			    header:header[0],
			})
			console.log(datas);
}
file.addEventListener('change',readExcel);

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,您想了解关于easyexcel的流返回的内容。那么,首先,您需要了解easyexcel中的一些基本概念: 1. ExcelWriter:用于生成Excel文件的对象。 2. Sheet:Excel文件中的一个表单。 3. Row:表单中的一行。 4. Cell:行中的一个单元格。 接下来,我们就可以通过使用ExcelWriter对象来将数据写入Excel文件,并将生成的文件以流的形式返回给用户。 示例代码如下: ```java //创建ExcelWriter对象 ExcelWriter writer = new ExcelWriter(response.getOutputStream(), ExcelTypeEnum.XLSX); //创建Sheet对象 Sheet sheet = new Sheet(1, 0); //设置表头 List<String> head = new ArrayList<>(); head.add("姓名"); head.add("年龄"); head.add("性别"); sheet.setHead(head); //写入数据 List<List<Object>> data = new ArrayList<>(); List<Object> rowData = new ArrayList<>(); rowData.add("张三"); rowData.add(18); rowData.add("男"); data.add(rowData); sheet.setClazz(Student.class); writer.write(data, sheet); //关闭流 writer.finish(); ``` 在上面的示例代码中,我们首先创建了一个ExcelWriter对象,并将其绑定到输出流response.getOutputStream()上。然后,我们创建了一个Sheet对象,并设置了表头和数据。最后,我们通过调用ExcelWriter对象的write()方法将数据写入Excel文件中,并最终通过调用finish()方法关闭输出流。 至此,我们已经实现了将数据写入Excel文件,并将生成的文件以流的形式返回给用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值