JS实现在线Excel的附件上传与下载

 更新时间:2023年08月16日 08:58:17   作者:葡萄城官网  
在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,今天小编将为大家介绍如何使用前端HTML+JS+CSS技术通过超链接单元格的形式实现在线Excel附件上传、下载和修改的操作,需要的可以参考下

前言

在本地使用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/

以上就是JS实现在线Excel的附件上传与下载的详细内容,更多关于JS Excel附件上传下载的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript中的Array对象使用说明

    JavaScript中的Array对象使用说明

    JavaScript中的Array对象是一个动态的数组,也是一个Stack,还是一个Dictionary
    2011-01-01
  • js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码

    js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码

    下面小编就为大家带来一篇js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • JS实现动画中的布局转换

    JS实现动画中的布局转换

    这篇文章主要为大家详细介绍了JS实现动画中的布局转换,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • JavaScript Reduce使用详解

    JavaScript Reduce使用详解

    这篇文章主要介绍了JavaScript Reduce使用的相关资料,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下
    2021-03-03
  • JavaScript在浏览器中的执行机制

    JavaScript在浏览器中的执行机制

    既然说到了JavaScript,那么就会绕不过去执行上下文,只有理解了执行上下文才能更好的理解JavaScript本身,不过本部分不是专门讲解 JavaScript的,主要从JavaScript的执行顺序开始介绍一下JavaScript是怎样运行的
    2023-09-09
  • 基于JavaScript实现简单的随机抽奖小程序

    基于JavaScript实现简单的随机抽奖小程序

    为了使抽奖程序能够无需配置平台直接可以在任何一台机器上运行,开发工具和编译运行工具也能够尽可能简单(诸如text文本即可编辑,window系统自带的浏览器即可编译运行的情况),决定尝试使用javascript来做
    2016-01-01
  • js实现class样式的修改、添加及删除的方法

    js实现class样式的修改、添加及删除的方法

    这篇文章主要介绍了js实现class样式的修改、添加及删除的方法,主要通过修改标签的className来实现这一功能,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • Mozilla 表达式 __noSuchMethod__

    Mozilla 表达式 __noSuchMethod__

    这是一个很特殊的方法,但是其存在的意义很大。不过很可惜只有firefox支持了。一个简单的例子解释一下它的用处
    2009-04-04
  • 浅谈JavaScript 代码整洁之道

    浅谈JavaScript 代码整洁之道

    这篇文章主要介绍了浅谈JavaScript 代码整洁之道,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • wx-charts 微信小程序图表插件的具体使用

    wx-charts 微信小程序图表插件的具体使用

    这篇文章主要介绍了wx-charts 微信小程序图表插件的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论