首页 > 编程语言 >JavaScript魔法:在线Excel附件上传与下载的完美解决方案

JavaScript魔法:在线Excel附件上传与下载的完美解决方案

时间:2024-08-13 11:28:36浏览次数:12  
标签:文件 JavaScript sheet 魔法 Excel 附件 上传 row

最新技术资源(建议收藏)
https://www.grapecity.com.cn/resources/

前言

在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Excel中附带一些Word,CAD图等等。同样的,类比到Web端,现在很多人用的在线Excel是否也可以像本地一样实现附件文件的操作呢?答案是肯定的,不过和本地不同的是,Web端不会直接打开附件,而是使用超链接单元格的形式来显示,今天小编将为大家介绍使用前端HTML+JS+CSS技术通过超链接单元格的形式实现在线Excel附件上传、下载和修改的操作。

使用JS实现附件上传

实现的方式分为四个步骤:

1.创建前端页面

2编写暂存附件信息的方法

3.编写附件文件清除的方法

4.编写文件保存和文件加载的方法

1.创建前端页面

核心代码:

<div style="margin-bottom: 8px">

<button id="uploadAttach">上传附件</button>

<button id="removeAttach">清除附件</button>

<button id="fileSaver">文件保存</button>

<button id="loadSubmitFile">加载文件</button>

<button id="loadPackage">打包下载</button>

</div>

<div id="fileOperate" style="visibility: hidden;position: absolute;top: 100px;left: 300px;z-index: 10; background-color: #eee;padding: 16px">

<label for="choseFile">选择文件\</label>

<input type="file" id="choseFile" name="choseFile"/>

<button id="submit">提交</button>

<button id="cancel">取消</button>

</div>

点击上传附件按钮可以把附件上传到对应的单元格,清除附件会清理掉所有已经上传过的附件信息,打包下载会对所有的附件进行统一下载。

2.暂存附件信息方法

这一步起始主要用来设置文件上传之后单元格超链接及tag信息。细心的同学会注意到,这里我注册了一个命令,超链接本身会有一个跳转的行为,写command之后,会阻止这个默认跳转,转去执行对应的命令。注册的命令主要就是用来做附件文件的下载。

核心代码:

function hasAttachFile(sheet,row,col,file){

\*\*

\* 附件文件暂存

\* 这里由于没有服务端,所以我直接存了File对象,但File对象只有在实际使用时才会去获取实际的文件内容。在demo中可行

\* 在实际项目中,需要将file对象上传到文件服务器中

\* 上传完成后tag中的fileInfo应该代表的是文件的访问地址,而不能再是File对象。

\*

sheet.setValue(row,col,file.name)

sheet.setTag(row,col,{

type: hyerlinkType,

fileInfo: file // 实际项目中fileInfo应该为上传完成文件的访问路径

})

sheet.setHyperlink(row, col, {

url: file.name,

linkColor: '#0066cc',

visitedLinkColor: '#3399ff',

drawUnderline: true,

command:'downloadAttachFile',

}, GC.Spread.Sheets.SheetArea.viewport);

}

在这里,我引入了三方组件库FileSaver,在点击超链接单元格时,可以支持当前附件文件的下载。

// 下载文件

spread.commandManager().register("downloadAttachFile",{

canUndo: false,

execute: function(context,options,isUndo){

let sheet = context.getActiveSheet()

let row = sheet.getActiveRowIndex()

let col = sheet.getActiveColumnIndex()

let cellTag = sheet.getTag(row,col)

console.log(sheet,row,col,cellTag)

if(cellTag && cellTag.type==hyerlinkType){

\*\*\*

\* 纯前端demo,文件存在于本地,fileInfo中存储的是File对象,可以直接获取到文件

\* 实际项目中,fileInfo应该是上传到文件服务器上的文件访问地址。

\* 因此这里需要发送请求,先获取文件blob,将获取的blob传递到saveAs的第二个参数中。

\*

saveAs(cellTag.fileInfo,cellTag.fileInfo.name)

}

}

})

3. 附件文件清除

document.getElementById("removeAttach").onclick = function(){

\*\*\*

\* 清除附件

\* 清除附件需要先删除远程文件服务器的文件,之后清除单元格的Tag信息。

\* 这里前端演示demo,只删除了tag。

\* 实际项目中tag中的fileInfo应该是文件上传后的路径

\*

let sheet = spread.getActiveSheet()

let row = sheet.getActiveRowIndex()

let col = sheet.getActiveColumnIndex()

spread.commandManager().execute({

cmd:"removeAttachFile",

sheet,row,col

})
}

4. 文件保存/加载

将文件保存成为JSON结构:

document.getElementById("fileSaver").onclick = function(){

// 保存文件

submitFile = spread.toJSON()

spread.clearSheets()

spread.addSheet(0)

}

加载已保存文件:

document.getElementById("loadSubmitFile").onclick = function(){

// 加载已保存文件

spread.fromJSON(submitFile)

}

实现功能和效果:

在需要在某个单元格中上传附件时,我们可以弹出一个模态框,在模态框中上传文件,点击提交之后,可以对文件做一个暂存,将文件信息存储在单元格的Tag中,点击单元格可以下载文件。

完整代码和在线Demo地址:

https://jscodemine.grapecity.com/share/VHlpNyuP-0CIBNleP5jtyA/

扩展链接:

Spring Boot框架下实现Excel服务端导入导出

项目实战:在线报价采购系统(React +SpreadJS+Echarts)

Svelte 框架结合 SpreadJS 实现纯前端类 Excel 在线报表设计

标签:文件,JavaScript,sheet,魔法,Excel,附件,上传,row
From: https://www.cnblogs.com/powertoolsteam/p/18356505

相关文章

  • 提升前端性能的JavaScript技巧
    1.前端JavaScript性能问题前端JavaScript的性能问题可以显著影响Web应用的用户体验和整体性能。以下是一些常见的前端JavaScript性能问题:1.1.频繁的DOM操作问题描述:JavaScript经常需要与DOM(文档对象模型)交互来更新页面内容。然而,每次DOM操作都可能触发浏览器的重绘(rep......
  • JavaScript数据类型
    JavaScript共有8种数据类型,可以分为两类:基本数据类型和复杂数据类型。1.基本数据类型(PrimitiveTypes)这些数据类型是不可变的,意味着一旦创建了它们的值,就无法更改。Number:用于表示整数和浮点数。例如:42,3.14,-7BigInt:用于表示任意精度的大整数。例如:1234567890123456......
  • JavaScript发展历史
    JavaScript作为一种编程语言,经历了多次发展与演变,以下是其主要历史里程碑:1.诞生与早期发展(1995-1999)1995年:JavaScript由BrendanEich在网景公司(Netscape)发明,最初被称为Mocha,后来改名为LiveScript,最终定名为JavaScript。这种命名是为了利用当时Java语言的流行。199......
  • 掌握JavaScript中的观察者模式:构建响应式编程的基石
    标题:掌握JavaScript中的观察者模式:构建响应式编程的基石在软件开发中,设计模式是解决特定问题的模板。其中,观察者模式是一种非常重要的设计模式,它允许多个对象监听另一个对象的状态变化,并在该对象状态变化时得到通知。这种模式在JavaScript中尤为有用,尤其是在构建响应式应用......
  • Excel工作表同类数据合并工具
    下载地址:https://pan.quark.cn/s/81b1aeb45e4c在Excel表格中,把多行同类数据合并为一行是件令人无比头痛的事情:首先,你得确定哪几条记录是可合并的同类数据,人工对比多个字段难免顾此失彼挂一漏万;其次,待合并的行可能分属多个分组,需要各自合并,但是同组的多行数据往往会分布在......
  • Excel
    1.插入行列excel只能选中多少行/列,就插入多少行/列,不能自定义2.移动列/行位置选中以后按shift移动位置3.快速跳转表格边界随便点击一个单元格,双击下框就是到最下面。双击右边就是到最右边4.快速备份数据按住ctrl鼠标点击最下面的sheet,拖拽,即可复制相应sheet5.状态栏右下......
  • 【Redis】掌握Java中的Redis魔法:Jedis与Spring Data Redis(实战指南)
    文章目录掌握Java中的Redis魔法:Jedis与SpringDataRedis实战文章简介为什么使用Redis为什么选择Jedis和SpringDataRedis一、引言1.1Redis简介1.1.1Redis的特点和优势1.1.2Redis的应用场景1.2Java与Redis的结合1.2.1为什么选择Java1.2.2Java开发中Redis的重要......
  • SAP EXCEL数据上传代码
    *---获取数据DATA:LT_EXCELTYPETABLEOFALSMEX_TABLINE,"具有Excel数据的表行LV_INDEXTYPEI."项目位置*&---读取EXCEL到内表CALLFUNCTION'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGFILENAME......
  • 打开Office(word、excel、ppt)显示操作系统当前的配置不能运行此应用程序最全解决方案
    我以前用过分区助手把office从c盘挪到d盘了,从那以后office就用不了了,然后我就删了(貌似没删干净)。最近由于有使用word的需求,所以我从学校官网找到正版软件的安装包,按照步骤重新卸载电脑中office残留并安装好之后,打开word会提示“操作系统当前的配置不能运行此应用程序”,ppt......
  • 装饰器模式的魔法:Python高级应用全解析
    装饰器模式的魔法:Python高级应用全解析在Python的世界里,装饰器模式以其独特的魅力,成为了函数式编程的一颗璀璨明珠。它不仅能够增强函数的功能,还能在不修改原有代码的前提下,注入新的活力。本文将深入探讨Python中的装饰器模式,从基础到高级,一探其究竟。装饰器模式的奥义装......