JS实现在线Excel的附件上传与下载
本文介绍如何利用前端HTML、JS和CSS技术,在在线Excel中实现附件的上传、下载与修改功能。通过创建前端页面、编写暂存与清除方法,以及保存加载逻辑,结合FileSaver库实现文件操作。重点讲解如何通过超链接单元格拦截默认跳转,执行自定义命令以完成文件下载,并提供完整代码与Demo地址供参考。
前言
在使用本地Excel软件时,用户常需要在表格中插入Word文档、CAD图纸等附件文件。类比到Web端,在线Excel是否也能实现类似的文件附件操作?答案是肯定的。但与本地Excel不同,Web端无法直接打开附件,而是采用超链接单元格的形式来展示。本文将详细介绍如何利用前端HTML、JavaScript和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/

以上就是JS实现在线Excel的附件上传与下载的详细内容,更多关于JS Excel附件上传下载的资料请关注本站其它相关文章!
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
