vue实现在线Excel表格功能

目录

1.安装x-data-spreadsheet xlsx

2.引入 

3.使用


1.安装x-data-spreadsheet xlsx

npm i x-data-spreadsheet xlsx

2.引入 

import zhCN from "x-data-spreadsheet/src/locale/zh-cn";
import Spreadsheet from "x-data-spreadsheet";
import * as XLSX from "xlsx";
Spreadsheet.locale("zh-cn", zhCN);

3.使用

<template><div class="CptOutbox"><div class="ToolOutbox"><input type="file" @change="chageFile" ref="inputFile" /><button @click="exportExcel">导出xlsx</button><button @click="SaveExcel">批量保存</button></div><div class="ExcelOutbox"><!--web spreadsheet组件--><divclass="sheetContainerbox"ref="sheetContainer"id="x-spreadsheet-demo"></div></div></div>
</template><script>
//引入依赖包
import zhCN from "x-data-spreadsheet/src/locale/zh-cn";
import Spreadsheet from "x-data-spreadsheet";
import * as XLSX from "xlsx";
Spreadsheet.locale("zh-cn", zhCN);
export default {name: "XspreadsheetDemo",data() {return {xs: null,};},mounted() {this.init();},methods: {init() {this.xs = new Spreadsheet("#x-spreadsheet-demo", {mode: "edit",showToolbar: true,showGrid: true,showContextmenu: true,showBottomBar: true,view: {height: () => this.$refs.sheetContainer.offsetHeight,width: () => this.$refs.sheetContainer.offsetWidth,},style: {bgcolor: "#ffffff",align: "left",valign: "middle",textwrap: false,strike: false,underline: false,color: "#0a0a0a",font: {name: "Helvetica",size: 10,bold: false,italic: false,},},row: {len: 10000,height: 25,},col: {len: 26,width: 100,indexWidth: 60,minWidth: 60,},});let excelData = localStorage.getItem("WebExcelData");if (excelData) {this.xs.loadData(excelData); // load data}this.xs.change((data) => {localStorage.setItem("WebExcelData", data);});// data validationthis.xs.validate();import('./data.json').then((res) => {console.log(`res`, res);localStorage.setItem("WebExcelData", res.Data);this.xs.loadData(res.Data)})},exportExcel() {var new_wb = this.xtos(this.xs.getData());console.log(`new_wb`, new_wb);XLSX.writeFile(new_wb, "SheetJS.xlsx");},xtos(sdata) {console.log(sdata);var out = XLSX.utils.book_new();sdata.forEach((xws) => {var aoa = [[]];var rowobj = xws.rows;for (var ri = 0; ri < rowobj.len; ++ri) {var row = rowobj[ri];if (!row) continue;aoa[ri] = [];Object.keys(row.cells).forEach((k) => {var idx = +k;if (isNaN(idx)) return;aoa[ri][idx] = row.cells[k].text;});}var ws = XLSX.utils.aoa_to_sheet(aoa);/** 读取在线中的合并单元格,并写入导出的数据中* merges: Array(19)0: "A16:P16"1: "A17:P17"2: "O2:P2"3: "F2:G2"*/ws["!merges"] = [];xws.merges.forEach((merge) => {ws["!merges"].push(XLSX.utils.decode_range(merge));});XLSX.utils.book_append_sheet(out, ws, xws.name);});return out;},chageFile() {this.importExcel(this.$refs.inputFile.files[0]);},importExcel(file) {let reader = new FileReader();reader.onload = (e) => {let data = e.target.result;let fixedData = this.fixData(data);let workbook = XLSX.read(btoa(fixedData), { type: "base64" });console.log(workbook);console.log("this.stox(workbook)",this.stox(workbook));this.xs.loadData(this.stox(workbook));};reader.readAsArrayBuffer(file);// return workbook},fixData(data) {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;},stox(wb) {console.log(`wb`, wb);var out = [];wb.SheetNames.forEach((name) => {var o = { name: name, rows: {}, merges: [] };var ws = wb.Sheets[name];var aoa = XLSX.utils.sheet_to_json(ws, { raw: false, header: 1 });aoa.forEach((r, i) => {var cells = {};r.forEach((c, j) => {cells[j] = { text: c };});o.rows[i] = { cells: cells };});///console.log(`ws`, ws);// 设置合并单元格if (ws["!merges"]) {ws["!merges"].forEach((merge) => {/** merge = {*  s: {c: 0, r: 15}*  e: {c: 15, r: 15}* }*/// 修改 cell 中 merge [合并行数,合并列数]let cell = o.rows[merge.s.r].cells[merge.s.c];//无内容单元格处理if (!cell) {cell = { text: "" };}cell.merge = [merge.e.r - merge.s.r, merge.e.c - merge.s.c];o.rows[merge.s.r].cells[merge.s.c] = cell;// 修改 mergeso.merges.push(XLSX.utils.encode_range(merge));});}out.push(o);});return out;},///SaveExcel() {},},
};
</script><style lang="scss" scoped>
.CptOutbox {width: 100%;height: 100%;.ToolOutbox {display: flex;flex-flow: row nowrap;align-items: center;width: 100%;height: 50px;}.ExcelOutbox {display: flex;flex-flow: row nowrap;align-items: center;width: 100%;height: calc(100% - 50px);.sheetContainerbox {width: 100%;height: 100%;}}
}
</style>

 

原Excel样式如下

导入到 x-data-spreadsheet 如下图

x-spreadsheet-doc文档

x-spreadsheet在线示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/246065.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…

mybatis基础知识

title: mybatis的基础知识创建mybatis数据库&#xff0c;创建user表&#xff0c;在里面添加数据 创建空项目&#xff0c;创建maven模块 导入相关的依赖 在pom.xml文件中导入mysql&#xff0c;junit测试&#xff0c;mybatis依赖。 <!--导入mysql依赖--><dependency&g…

四步搞定国赛!快速入门大小模型融合的AI产品开发

前不久&#xff0c;2024中国大学生服务外包创新创业大赛正式启动&#xff01;作为中国高等教育学会“全国普通高校学科竞赛排行榜”竞赛&#xff0c;飞桨赛道已经吸引了超过200位选手报名参赛。 本文旨在助力“A01-基于文心大模型智能阅卷平台设计”赛道选手&#xff0c;更快地…

7.【SpringBoot3】项目部署、属性配置、多环境开发

1. SpringBoot 项目部署 项目完成后&#xff0c;需要部署到服务器上。 SpringBoot 项目需要经过编译打包生成一个 jar 包&#xff08;借助打包插件 spring-boot-maven-plugin&#xff09;&#xff0c;再将该 jar 包发送或拷贝到服务器上&#xff0c;然后就可以通过执行 java …

手机视频压缩怎么压缩?一键瘦身~

现在手机已经成为我们日常生活中必不可少的工具&#xff0c;而在手机的应用领域中&#xff0c;文件的传输和存储是一个非常重要的问题。很多用户都会遇到这样一个问题&#xff0c;那就是在手机上存储的文件太多太大&#xff0c;导致手机存储空间不足&#xff0c;那么怎么在手机…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下&#xff0c;以前&#xff08;Windows 11&#xff09; Typora 可以顺利较快地由 .md 导出 .pdf 文件&#xff0c;此功能当然非常实用与重要。 然而&#xff0c;有一次电脑因故重装了系统&#xff08;刷机&#xff09;…

SpringMVC 环境搭建入门

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架&#xff0c;属于SpringFrameWork 的后续产品&#xff0c;已经融合在 Spring Web Flow 中。 SpringMVC 已经成为目前最主流的MVC框架之一&#xff0c;并且随着Spring3.0 的发布&#xff0c;全面…

论述Python中列表、元组、字典和集合的概念

Python列表是用于存储任意数目、任意类型的数据集合&#xff0c;包含多个元素的有序连续的内存空间&#xff0c;是内置可变序列&#xff0c;或者说可以任意修改。在Python中&#xff0c;列表以方括号&#xff08;[ ]&#xff09;形式编写。 Python元组与Python列表类似&#x…

Flink 集成 Debezium Confluent Avro ( format=debezium-avro-confluent )

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

docker生命周期管理命令

文章目录 前言1、docker create2、docker run2.1、常用选项2.2、系统2.3、网络2.4、健康检查 3、docker start/stop/restart4、docker kill5、docker rm6、docker pause/unpause总结 前言 在云原生时代&#xff0c;Docker已成为必不可少的容器管理工具。通过掌握Docker常用的容…

[UE]无法接收OnInputTouchBegin事件

遇到问题 想做一个鼠标按住左键选中Actor拖动而旋转的功能&#xff0c;想法是通过OnInputTouchBeginOnInputTouchEndTick实现。但是却无法接收OnInputTouchBegin与OnInputTouchEnd事件。 解决方案 想要触发OnInputTouchBegin事件 1.需要设置勾选ProjectSettings->Input-&…

.net访问oracle数据库性能问题

问题&#xff1a; 生产环境相同的inser语句在别的非.NET程序相应明显快于.NET程序&#xff0c;执行时间相差比较大&#xff0c;影响正常业务运行&#xff0c;测试环境反而正常。 问题详细诊断过程 问题初步判断诊断过程&#xff1a; 查询插入慢的sql_id 检查对应的执行计划…

Python zip函数

在Python编程中&#xff0c;zip()函数是一个功能强大而灵活的工具&#xff0c;用于将多个可迭代对象&#xff08;如列表、元组、字符串等&#xff09;组合成一个元组的序列。本文将深入探讨zip()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的应用场景。 什么…

HNU-数据挖掘-实验2-数据降维与可视化

数据挖掘课程实验实验2 数据降维与可视化 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验2 数据降维与可视化实验背景实验目标实验数据集说明实验参考步骤实验过程1.对数据进行初步降维2.使用无监督数据降维方法&#xff0c;比如PCA&#xff0c;I…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

Django开发_20_form表单前后端关联(2)

根据上一篇文章的代码,进一步了解掌握GET,POST的运行机制 一、实例代码 views.py: def show_reverse(request):if request.method "GET":return redirect(reverse("work4:fill"))if request.method "POST":hobby request.POST.get("h…

kafka summary

最近整体梳理之前用到的一些东西&#xff0c;回顾Kafka的时候好多东西都忘记了&#xff0c;把一些自己记的比较模糊并且感觉有用的东西整理一遍并且记忆一遍&#xff0c;仅用于记录以备后续回顾 Kafka的哪些场景中使用了零拷贝 生产者发送消息&#xff1a;在 Kafka 生产者发送…

暴力破解

暴力破解工具使用汇总 1.查看密码加密方式 在线网站&#xff1a;https://cmd5.com/ http://www.158566.com/ https://encode.chahuo.com/kali&#xff1a;hash-identifier2.hydra 用于各种服务的账号密码爆破&#xff1a;FTP/Mysql/SSH/RDP...常用参数 -l name 指定破解登录…

windows定时任务的查看、取消、启动和创建

一、查看 Windows 自动执行的指令 1.使用任务计划程序&#xff1a;任务计划程序是 Windows 内置的工具&#xff0c;可以用于创建、编辑和管理计划任务。您可以按照以下步骤查看已设置的计划任务&#xff1a; 1.1 按下 Win R 键&#xff0c;然后输入 “taskschd.msc”&#xff…

Bitbucket第一次代码仓库创建/提交/创建新分支/合并分支/忽略ignore

1. 首先要在bitbucket上创建一个项目&#xff0c;这个我没有权限创建&#xff0c;是找的管理员创建的。 管理员创建之后&#xff0c;这个项目给了我权限&#xff0c;我就可以创建我的代码仓库了。 2. 点击这个Projects下的具体项目名字&#xff0c;就会进入这样一个页面&#…