如果通过 vxe-table 实现 Excel,可以和 Excel、WPS 复制粘贴

news/2025/1/18 21:01:30/文章来源:https://www.cnblogs.com/qaz666/p/18678861

如果通过 vxe-table 实现 Excel,可以和 Excel、WPS 复制粘贴

官网:https://vxetable.cn

<template><div><vxe-gridref="gridRef"v-bind="gridOptions"@cell-area-selection-end="cellAreaSelectionEndEvent"@cell-area-extension-end="cellAreaExtensionEndEvent"@clear-cell-area-selection="clearCellAreaSelectionEvent"><template #toolbarButtons><span>数据:</span><vxe-select v-model="rowSize" :options="dataOptions" @change="changeRowSizeEvent"></vxe-select></template><template #bottom><div>统计信息:{{ countText }}</div></template></vxe-grid></div>
</template><script>
import XEUtils from 'xe-utils'
export default {data () {const rowSize = 50const countText = ''const dataOptions = [{ label: '加载 3 行', value: 3 },{ label: '加载 20 行', value: 20 },{ label: '加载 50 行', value: 50 },{ label: '加载 100 行', value: 100 },{ label: '加载 500 行', value: 500 },{ label: '加载 1000 行', value: 1000 },{ label: '加载 5000 行', value: 5000 },{ label: '加载 10000 行', value: 10000 },{ label: '加载 50000 行', value: 50000 }]const gridOptions = {border: true,height: 800,showOverflow: true,columnConfig: {resizable: true,width: 160},rowConfig: {keyField: 'id',resizable: true},resizableConfig: {isSyncAutoWidth: true,isDblclickAutoWidth: true,isSyncAutoHeight: true,isDblclickAutoHeight: true // 启用双击自适应行高},exportConfig: {types: ['xlsx']},toolbarConfig: {custom: true,zoom: true,export: true,slots: {buttons: 'toolbarButtons'}},mouseConfig: {area: true // 是否开启区域选取},areaConfig: {multiple: true,showColumnStatus: true,showRowStatus: true,selectCellToRow: true,extendByCalc: true,extendByCopy: true // 是否启用扩展区域自动填充,当选取一个单元格时,自动将当前内容填充到扩展区域的所有单元格中(同时按住 ctrl 键可取消值自动识别数字功能)},editConfig: {mode: 'cell',trigger: 'dblclick' // 双击单元格激活编辑状态},menuConfig: {header: {options: [// 引入 plugin-menu 扩展插件之后可以直接使用以下内置 code,使用最简单[{ code: 'COPY_TITLE', name: '复制列标题' },{ code: 'EXPORT_ALL', name: '导出 CSV', prefixIcon: 'vxe-icon-download', params: { filename: '导出数据', type: 'csv' } }]]},body: {options: [// 自行自定义 code 的功能,自己实现更灵活[{ code: 'myCode', name: '自定义的菜单' }],// 引入 plugin-menu 扩展插件之后可以直接使用以下内置 code,使用最简单[{ code: 'CLEAR_CELL', name: '清除单元格值 (Del)' },{ code: 'COPY_CELL', name: '页面内复制 (Ctrl+C)', prefixIcon: 'vxe-icon-copy' },{ code: 'CUT_CELL', name: '页面内剪贴 (Ctrl+X)', prefixIcon: 'vxe-icon-cut' },{ code: 'PASTE_CELL', name: '页面内粘贴 (Ctrl+V)', prefixIcon: 'vxe-icon-paste' }],[{ code: 'OPEN_FIND', name: '查找 (Ctrl+F)' },{ code: 'OPEN_REPLACE', name: '替换 (Ctrl+H)' },{ code: 'MERGE_OR_CLEAR', name: '合并/取消 (Ctrl+M)', prefixIcon: 'vxe-icon-merge-cells' }],[{name: '插入数据',children: [{ code: 'INSERT_AT_ROW', name: '插入' },{ code: 'INSERT_NEXT_AT_ROW', name: '插入 next' },{ code: 'INSERT_AT_EDIT_ROW', name: '插入并编辑' },{ code: 'INSERT_NEXT_AT_EDIT_ROW', name: '插入并编辑 next' }]}],[{name: '删除数据',children: [{ code: 'DELETE_ROW', name: '删除行' },{ code: 'DELETE_AREA_ROW', name: '删除选取范围内的行' },{ code: 'DELETE_CHECKBOX_ROW', name: '删除复选框勾选行' }]}],[{ code: 'EDIT_CELL', name: '编辑' },{ code: 'REVERT_CELL', name: '还原值', prefixIcon: 'vxe-icon-repeat' }],[{ code: 'CLEAR_FILTER', name: '清除筛选' },{ code: 'CLEAR_ALL_FILTER', name: '清除所有筛选' },{name: '排序',children: [{ code: 'CLEAR_SORT', name: '清除排序' },{ code: 'SORT_ASC', name: '升序', prefixIcon: 'vxe-icon-sort-alpha-asc' },{ code: 'SORT_DESC', name: '倒序', prefixIcon: 'vxe-icon-sort-alpha-desc' }]}],// 引入 plugin-menu 扩展插件之后可以直接使用以下内置 code,使用最简单[{ code: 'PRINT_ALL', name: '打印', prefixIcon: 'vxe-icon-print', params: { columns: ['name', 'role', 'sex', 'num', 'age'] } },{ code: 'EXPORT_ALL', name: '导出 CSV', prefixIcon: 'vxe-icon-download', params: { filename: '导出数据', type: 'csv' } }]]},footer: {options: [[{ code: 'PRINT_ALL', name: '打印', prefixIcon: 'vxe-icon-print', params: { columns: ['name', 'role', 'sex', 'num', 'age'] } }]]}},keyboardConfig: {arrowCursorLock: true,isClip: true,isArrow: true,isShift: true,isTab: true,isEnter: true,isEdit: true,isBack: true,isDel: true,isEsc: true,isFNR: true,isMerge: true // 是否开启单元格合并功能},virtualXConfig: {enabled: true,gt: 0},virtualYConfig: {enabled: true,gt: 0},columns: [{ field: 'seq', type: 'seq', fixed: 'left', width: 80, rowResize: true },{ field: 'a', title: 'A', editRender: { name: 'input' } },{ field: 'b', title: 'B', editRender: { name: 'input' } },{ field: 'c', title: 'C', editRender: { name: 'input' } },{ field: 'd', title: 'D', editRender: { name: 'input' } },{ field: 'e', title: 'E', editRender: { name: 'input' } },{ field: 'f', title: 'F', editRender: { name: 'input' } },{ field: 'g', title: 'G', editRender: { name: 'input' } },{ field: 'h', title: 'H', editRender: { name: 'input' } },{ field: 'i', title: 'I', editRender: { name: 'input' } },{ field: 'j', title: 'J', editRender: { name: 'input' } },{ field: 'k', title: 'K', editRender: { name: 'input' } },{ field: 'l', title: 'I', editRender: { name: 'input' } },{ field: 'm', title: 'M', editRender: { name: 'input' } },{ field: 'n', title: 'N', editRender: { name: 'input' } },{ field: 'o', title: 'O', editRender: { name: 'input' } },{ field: 'p', title: 'p', editRender: { name: 'input' } },{ field: 'q', title: 'Q', editRender: { name: 'input' } }]}return {rowSize,countText,dataOptions,gridOptions}},methods: {loadData (size) {// 模拟后台接口this.gridOptions.loading = truesetTimeout(async () => {const list = []for (let i = 0; i < size; i++) {const item = {id: i + 1,a: '9',b: '2',c: '7',d: '6',e: '6',f: '3',g: '5',h: '5',i: '4',j: '0',k: '7',l: '8',m: '8',n: '5',o: '8',p: '1',q: '9',r: '3',s: '4',t: '1'}list.push(item)}this.gridOptions.loading = falseconst $grid = this.$refs.gridRefif ($grid) {await $grid.loadData(list)this.updateFooterInfo()}}, 200)},updateFooterInfo () {const $grid = this.$refs.gridRefif ($grid) {const cellAreas = $grid.getCellAreas() // 获取选取的区域const firstItem = cellAreas[0]let countNum = 0if (firstItem) {firstItem.rows.forEach(row => {firstItem.cols.forEach(column => {const cellValue = row[column.field]countNum += XEUtils.toNumber(cellValue)})})}this.countText = firstItem ? `当前已选择 ${firstItem.rows.length} 行 ${firstItem.cols.length} 列;合计:${countNum}` : ''}},// 单元格选取结束事件cellAreaSelectionEndEvent () {this.updateFooterInfo()},// 单元格扩展结束事件cellAreaExtensionEndEvent () {this.updateFooterInfo()},// 点击表格之外选取区域被清除时clearCellAreaSelectionEvent () {this.updateFooterInfo()},changeRowSizeEvent () {this.loadData(this.rowSize)}},mounted () {this.loadData(this.rowSize)}
}
</script>

https://gitee.com/x-extends/vxe-table

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/871429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树(基础)

树 1 定义 1.1 树是什么 树是一种数据结构,因为形似倒着的树而得名. 1.2 树的定义 递归定义 1.2.1 有根树的定义 形象化的,如图1,有根树存在根节点这一定义,从根节点可以分出任意个分支,这任意个分支又可以继续细分,分出的节点称为“子节点”。抽象化的,树也是\(N\)…

Java五子棋源码联网版+Socket+Swing+大学生练手项目

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 Java五子棋源码联网版 源码,看图: 实现了服务端和客户端。是联网版游戏基础模型。环境 JDK1.8代码采用原生java类库编写,界面采用swing,完整源码获取地址: gitee.com/hadluo/java_game01.git整体代码结构服务器采…

Java源码:实现斗地主游戏+大学生练手项目

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 斗地主 源码,看图:视频演示效果 https://githubs.xyz/show/5.mp4 环境 JDK1.8代码采用原生java类库编写,界面采用swing,完整源码获取地址: gitee.com/hadluo/java_game01.git项目结构 代码十分简洁,只有简单的7个…

文件蜈蚣 后台偷跑流量

我已经好久没有打开这个软件了,期间重启了很多次,他有一个服务应该开机时就启动,后台偷跑流量 filec.exe文件。 因为我没什么什么上传流量也很大,最终定位到这个文件在偷跑了。

windows安装ffmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。 ffmpeg安装 打开 FFmpeg 官网,选择下载。 选择 Windows 平台,下面有两个链接,都是可以的,选择其一。 本文以点…

Java源码:坦克大战+swing界面+大学生练手项目

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 坦克大战 源码,看图: 演示视频 https://githubs.xyz/show/22.mp4 环境 JDK1.8 实现步骤代码采用原生java类库编写,界面采用swing,完整源码获取地址: gitee.com/hadluo/java_game01.git启动类 启动类是 TankCline…

免费下载CapCut海外版,解锁剪映VIP功能无广告

大家好,今天给大家带来一个超级实用的教程——剪映海外版 CapCut 下载:免费解锁剪映 VIP 功能的完整步骤!剪映是目前非常流行的视频编辑软件,它让我们的短视频创作变得更加简单和高效。不管是记录生活点滴、制作旅行回忆,还是做一些创意短视频,剪映都提供了非常强大的功能…

Java源码:植物大战僵尸 + 大学生练手项目

前言 学Java的朋友们,福利来了,今天小编给大家带来了一款 植物大战僵尸源码,看图:视频演示 https://githubs.xyz/show/175.mp4 环境 JDK1.8代码采用原生java类库编写,完整源码获取地址: gitee.com/hadluo/java_game01.git类继承UML图源码实现 我们先从main函数看起,继承了…

Linux搭建Slurm和pbs单机版

SlurmSlurm 是高性能计算集群的出色工作调度工具。此外,当你需要同时运行多个程序并将它们排成队列,同时确保计算机或服务器不超载时,它也是本地台式机或单台服务器上的重要工具。此外,在与其他用户共享服务器或需要通宵或连续数周运行多个工作时,它也非常有用!在这里,我…

Java游戏源码:天天酷跑+大学生学习源码

学习java朋友们,福利来了,今天小编给大家带来了一款天天酷跑源码。注意:此源码仅供学习使用!!视频演示 https://githubs.xyz/show/209.mp4 源码搭建和讲解 代码采用原生java类库编写, 利用java swing作为界面框架,完整源码获取地址: gitee.com/hadluo/java_game01.git 启…

2024春秋杯冬季赛day2writeup_cyi

2024春秋杯冬季赛day2 misc wp 解题过程 misc Weevils Whisper 操作内容: 筛选http流,一开始就把马上传了搜索可知这是weevely的webshell 这篇讲的很详细了 https://xz.aliyun.com/t/11246?time__1311=Cq0xRD0Q0QD%3DdGNeeeqk75YitmczLbD#toc-5 拿了这篇的解密脚本 https:/…

长期更新IntelliJ IDEA安装永久破解教程

IntelliJ IDEA版本亲测IntelliJ IDEA 2024.3.2 ✔ IntelliJ IDEA 2024.3.1 ✔ IntelliJ IDEA 2024.2.* ✔ 介绍 JetBrains是一家专注于创建智能开发工具的前沿软件公司, 旗下常用的软件有IntelliJ IDEA、PhpStorm、PyCharm、Rider、RubyMine、RustRover、WebStorm、Goland、CLi…