网页版Excel如何实现?收下这份指南!

AdminPi, 前端, 2021-06-07 20:35:00

在线表格协作平台有很多,但大部分都有一些限制;对于程序员来说,解决限制最好的办法永远不是花钱,而是自己动手搞一套!

今天要介绍的这款插件名叫:Jspreadsheet;它的前身是:Jexcel;采用的授权协议是:MIT license。

Jspreadsheet是一款非常轻量级的javascript电子表格插件,可以创建与Excel兼容的电子表格,数据不仅可以直接从Excel复制粘贴,也可以从JS数组、JSON、CSV和XSLX文件导入;还可以很方便的与jQuery、VUE等框架集成在一起使用。

她的主要特性有:

1.支持多种单元格类型:文本、数字、下拉菜单、日期时间、图片和富文本等;
2.支持公式计算;
3.支持排序、筛选;
4.支持窗口冻结;
5.单元格合并;
6.延时加载;
7.更多等待发现的功能!

官网地址:

https://bossanova.uk/jspreadsheet/v4/

快速参考API:

https://bossanova.uk/jspreadsheet/v4/docs/quick-reference

一个简单的demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jExcel</title>
<script src="https://bossanova.uk/jspreadsheet/v4/jexcel.js"></script>
<link rel="stylesheet" href="https://bossanova.uk/jspreadsheet/v4/jexcel.css" type="text/css" />
<script src="https://jsuites.net/v4/jsuites.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v4/jsuites.css" type="text/css" />
</head>
<body style="margin:0; padding:0;">
	<div id='my-sheet' style="margin:0; padding:0;"></div><br />
	
	<input type="button" value="添加一行" onclick="mySpreadsheet.insertRow()" />
	<input type="button" value="添加一列" onclick="mySpreadsheet.insertColumn()" />
	<input type="button" value="获取数据" onclick="alert(mySpreadsheet.getData());" /><br />
	<script>
	data = [
		['Q1', '100', '10000'],
		['Q2', '200', '20000'],
		['Q3', '300', '30000'],
		['Q4', '200', '20000']
	];

	mySpreadsheet = jspreadsheet(document.getElementById('my-sheet'), {
		data:data,
		columns:[
			{ title:'季度', width:100 },
			{ title:'销量', width:80 },
			{ title:'销售额', width:100 }
		]
	});
	</script>
</body>
</html>

带公式计算的demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jExcel</title>
<script src="https://bossanova.uk/jspreadsheet/v4/jexcel.js"></script>
<link rel="stylesheet" href="https://bossanova.uk/jspreadsheet/v4/jexcel.css" type="text/css" />
<script src="https://jsuites.net/v4/jsuites.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v4/jsuites.css" type="text/css" />
</head>
<body style="margin:0; padding:0;">
	<div id='my-sheet1' style="margin:0; padding:0;"></div><br />
	
	<input type="button" value="添加一行" onclick="mySpreadsheet1.insertRow()" />
	<input type="button" value="添加一列" onclick="mySpreadsheet1.insertColumn()" />
	<input type="button" value="获取数据" onclick="alert(mySpreadsheet1.getData());" /><br />
	<script>
	data = [
		['Q1', '100', '100', '=B1*C1'],
		['Q2', '200', '100', '=B2*C2'],
		['Q3', '300', '100', '=B3*C3'],
		['Q4', '200', '100', '=B4*C4']
	];

	mySpreadsheet1 = jspreadsheet(document.getElementById('my-sheet1'), {
		data:data,
		columns:[
			{ title:'季度', width:60 },
			{ title:'销量', width:80 },
			{ title:'单价', width:80 },
			{ title:'销售额', width:100 }
		]
	});
	</script>
</body>
</html>

带工具栏的demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jExcel</title>
<script src="https://bossanova.uk/jspreadsheet/v4/jexcel.js"></script>
<link rel="stylesheet" href="https://bossanova.uk/jspreadsheet/v4/jexcel.css" type="text/css" />
<script src="https://jsuites.net/v4/jsuites.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v4/jsuites.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Material+Icons" />
</head>
<body style="margin:0; padding:0;">
	<div id='my-sheet2' style="margin:0; padding:0;"></div><br />
	
	<input type="button" value="添加一行" onclick="mySpreadsheet2.insertRow()" />
	<input type="button" value="添加一列" onclick="mySpreadsheet2.insertColumn()" />
	<input type="button" value="获取数据" onclick="alert(mySpreadsheet2.getData());" /><br />
	<script>
	data = [
		['Q1', '100', '100', '=B1*C1'],
		['Q2', '200', '100', '=B2*C2'],
		['Q3', '300', '100', '=B3*C3'],
		['Q4', '200', '100', '=B4*C4']
	];

	mySpreadsheet2 = jspreadsheet(document.getElementById('my-sheet2'), {
		data:data,
		columns:[
			{ title:'季度', width:60 },
			{ title:'销量', width:80 },
			{ title:'单价', width:80 },
			{ title:'销售额', width:100 }
		],
		toolbar:[
			{
				type: 'i',
				content: 'undo',
				onclick: function() {
					mySpreadsheet2.undo();
				}
			},
			{
				type: 'i',
				content: 'redo',
				onclick: function() {
					mySpreadsheet2.redo();
				}
			},
			{
				type: 'i',
				content: 'save',
				onclick: function () {
					mySpreadsheet2.download();
				}
			},
			{
				type: 'select',
				k: 'font-family',
				v: ['Arial','Verdana']
			},
			{
				type: 'select',
				k: 'font-size',
				v: ['9px','10px','11px','12px','13px','14px','15px','16px','17px','18px','19px','20px']
			},
			{
				type: 'i',
				content: 'format_align_left',
				k: 'text-align',
				v: 'left'
			},
			{
				type:'i',
				content:'format_align_center',
				k:'text-align',
				v:'center'
			},
			{
				type: 'i',
				content: 'format_align_right', 
				k: 'text-align',
				v: 'right'
			},
			{
				type: 'i',
				content: 'format_bold',
				k: 'font-weight',
				v: 'bold'
			},
			{
				type: 'color',
				content: 'format_color_text',
				k: 'color'
			},
			{
				type: 'color',
				content: 'format_color_fill',
				k: 'background-color'
			},
		],
	});
	</script>
</body>
</html>
注意引用图标样式表!

其他更多实用功能,可以参考官网给出的例子。

此文章于  2021-06-08 14:10:06  进行了更新!

© 2024