作者:Wo-们是平行线 | 来源:互联网 | 2022-01-24 17:43
前言
这次记录的是昨晚一个想法:把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代码里的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内容的资料请关注其它相关文章!
推荐阅读
-
本文探讨了在较旧版本的Internet Explorer(如IE7)中使用AngularJS时遇到的问题及解决方法,包括HTML标签的正确书写方式以及如何添加对JSON的支持。 ...
[详细]
蜡笔小新 2024-12-16 13:05:07
-
本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ...
[详细]
蜡笔小新 2024-12-25 17:40:33
-
-
本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ...
[详细]
蜡笔小新 2024-12-28 04:11:47
-
本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ...
[详细]
蜡笔小新 2024-12-27 15:33:42
-
前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ...
[详细]
蜡笔小新 2024-12-27 15:19:01
-
本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ...
[详细]
蜡笔小新 2024-12-27 13:10:20
-
本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ...
[详细]
蜡笔小新 2024-12-27 11:39:44
-
本文详细介绍了如何在PHP中使用serialize()和unserialize()函数,以及它们在数据传输和存储中的应用。 ...
[详细]
蜡笔小新 2024-12-23 11:22:20
-
在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ...
[详细]
蜡笔小新 2024-12-22 17:14:01
-
本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ...
[详细]
蜡笔小新 2024-12-22 15:17:55
-
本文详细比较了CSS选择器和XPath在Selenium中通过页面结构定位元素的优劣,并提供了具体的代码示例,帮助读者理解两者在不同场景下的适用性。 ...
[详细]
蜡笔小新 2024-12-21 08:56:18
-
本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ...
[详细]
蜡笔小新 2024-12-20 18:36:06
-
本文介绍了如何使用 Vue 调试工具,包括克隆仓库、安装依赖包、构建项目以及在 Chrome 浏览器中加载扩展的详细步骤。 ...
[详细]
蜡笔小新 2024-12-20 16:28:04
-
预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ...
[详细]
蜡笔小新 2024-12-20 09:57:07
-
本文介绍了使用不同工具和方法来查看设置了密码保护的易语言源码的方法。不仅限于特定浏览器,还提供了使用Chrome等主流浏览器的解决方案。 ...
[详细]
蜡笔小新 2024-12-19 18:32:42
-