如何用JS解析剪切板里的excel内容

 更新时间:2021年04月30日 10:17:06   投稿:zhanglei  
这篇文章主要介绍了如何用JS解析剪切板里的excel内容,对解析excel感兴趣的同学,可以参考下

前言

这次记录的是昨晚一个想法:把excel内容复制到剪切板并转成自己想要的json格式,核心是要把excel内容转json,这部分主要看excel的格式和json如何业务的映射,不展开。倒是通过实践,收获了剪切板的一些知识点。

注:因为只是为了自己的小工具实现,不考虑兼容,在chrome下实践

整个步骤是:

  • 从一封有内容的excel里,选中内容,ctrl+c复制到剪切板(刚好我的内容就是整张表,ctrl+A就可以选中内容)
  • 粘贴到web页面,js监听paste事件,从剪切板对象里获得复制的excel内容(含格式)
  • 将内容解析处理成自己的格式【扩展补充】

这里主要可以分为三点:

1. 粘贴事件和剪切板

document.addEventListener('paste', event => {
    // event里的clipboardData对象
   console.log(event.clipboardData)
})

粘贴事件触发时,可以从event里获取到clipboardData

不过里面使用时还用了window.clipboardData,我在chrome和codepen下试验,都没获取到内容。

2. 剪切板里的内容格式

在上一部分的代码打印到控制台,会有个疑惑,就是控制台打出来一个DataTransfer对象,但其实这个对象在控制台展开时属性不是没有值就是空数组,很懵逼。

直到我往里面console属性内容,才找到。

在这个对象里,getData是它的常用方法,用于获取数据内容,它需要接受一个DOMString的参数。

一般常用的是粘贴纯文本,纯文本 getData('text') 即可获得。

但我要的是excel的格式,一开始并不知道excel是啥格式,但是从excel拷贝再粘贴回excel,格式依然保留,所以想着剪切板应该还保留原内容的格式,所以就尝试下。

通过遍历打印出DataTransfer对象的types属性,可以能知晓

document.addEventListener('paste', event => {
      event.clipboardData.types.map(type=>{console.log(type)})
})

types有三个值:text/plain,text/html,Files

于是用types的‘text/html',和getData一试,果然拿到了带格式的内容,实际上是一段html代码字符串
大致如下

<html  xmlns:o="urn:schemas-microsoft-com:office:office"  xmlns:x="urn:schemas-microsoft-com:office:excel"  xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta  http-equiv=Content-Type  content="text/html; charset=utf-8">
<style>
...
<table>
...

通过观察得知,想要的内容就是html代码里的table,接下来要转格式就好办了,搞定解析html字符串,用选择器的方式获取单元格内容就差不多了。

3. 如何解析html字符串

这里着实耗费了我不少时间,后面找到了DOMParser,原来原生就支持解析html字符串>>

通过 (new DOMParser()).parseFromString,将字符串转为DOM

const html = event.clipboardData.getData('text/html');
const $doc = new DOMParser().parseFromString(html,'text/html');
// 加载所有的行
const $trs = Array.from($doc.querySelectorAll('table tr'));

于是就可以愉快的querySelectorAll了。

以上就是如何用JS解析剪切板里的excel内容的详细内容,更多关于JS解析剪切板里的excel内容的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript实现简单进度条效果

    JavaScript实现简单进度条效果

    这篇文章主要为大家详细介绍了JavaScript实现简单进度条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • List Installed Hot Fixes

    List Installed Hot Fixes

    List Installed Hot Fixes...
    2007-06-06
  • javascript实现复选框选中属性

    javascript实现复选框选中属性

    本文给大家介绍的是一篇国外网友写的博客,讲解的是关于实现复选框选中属性的问题,感觉非常不错,翻译过来推荐给大家,希望小伙伴们能够喜欢。
    2015-03-03
  • 关于layui表单中按钮自动提交的解决方法

    关于layui表单中按钮自动提交的解决方法

    今天小编就为大家分享一篇关于layui表单中按钮自动提交的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • Kindeditor在线文本编辑器如何过滤HTML

    Kindeditor在线文本编辑器如何过滤HTML

    KindEditor使用JavaScript编写,可以无缝的与Java、.NET、PHP、ASP等程序接合。本文给大家介绍Kindeditor在线文本编辑器如何过滤HTML,需要的朋友参考下吧
    2016-04-04
  • javascript判断数组内是否重复的方法

    javascript判断数组内是否重复的方法

    这篇文章主要介绍了javascript判断数组内是否重复的方法,涉及javascript针对数组的相关操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • js控制的回到页面顶端goTop的代码实现

    js控制的回到页面顶端goTop的代码实现

    在浏览网页的时候应该会经常见到右下角有个【回到顶端】的悬浮东东,本文也要使用js实现一下,感兴趣的朋友可以参考下哈,希望可以帮助到你
    2013-03-03
  • JavaScript基于面向对象实现的猜拳游戏

    JavaScript基于面向对象实现的猜拳游戏

    这篇文章主要介绍了JavaScript基于面向对象实现的猜拳游戏,结合完整实例形式分析了javascript基于面向对象实现猜拳游戏的具体页面布局、样式及功能相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • 使用layer模态框给新页面传值的方法

    使用layer模态框给新页面传值的方法

    今天小编就为大家分享一篇使用layer模态框给新页面传值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • 小程序云开发获取不到数据库记录的解决方法

    小程序云开发获取不到数据库记录的解决方法

    这篇文章主要为大家详细介绍了小程序云开发获取不到数据库记录的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论