vue 表格组件 vxe-table 复制单元格时去掉末尾换行符

在使用 vxe-table 的复制粘贴功能时,复制到剪贴板的文本默认会在末尾附带一个换行符。这在某些场景下(例如直接粘贴到 Excel)会导致多出一个空行。通过 clipConfig.trailingNewline 配置项,可以灵活控制是否保留这个末尾换行符

概述

  • 复制粘贴:开启 keyboardConfig.isClip 后,表格支持区域选取与复制粘贴。
  • 末尾换行符:默认情况下,复制内容的末尾会带一个换行符。
  • 配置项:clipConfig.trailingNewline
    • true(默认):保留末尾换行符。
    • false:去掉末尾换行符。
  • 动态切换:可结合 vxe-switch 实时切换,观察复制效果。

核心配置

启用复制粘贴

keyboardConfig: {
  isClip: true // 开启复制粘贴
}

配置末尾换行符

clipConfig: {
  trailingNewline: false // 去掉复制内容末尾的换行符
}

注意:trailingNewline 表示“是否保留末尾换行符”,而非“是否去掉”。设为 true 时保留,设为 false 时去掉。

区域选取(复制的前提)

mouseConfig: {
  area: true // 开启区域选取
},
areaConfig: {
  multiple: true // 允许多区域选取
}

只有开启了区域选取,才能通过鼠标拖拽选择单元格区域进行复制。

代码

extend_cell_area_table_clip_trim_copy_content

<template>
  <div>
    <vxe-switch v-model="clipConfig.trailingNewline"></vxe-switch>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'
const sexEditRender = reactive({
  name: 'VxeSelect',
  options: [
    { label: '女', value: '0' },
    { label: '男', value: '1' }
  ]
})
const clipConfig = reactive({
  trailingNewline: true // 是否去掉复制内容的末尾换行符
})
const gridOptions = reactive({
  border: true,
  height: 500,
  showOverflow: true,
  columnConfig: {
    resizable: true
  },
  mouseConfig: {
    area: true // 是否开启区域选取
  },
  areaConfig: {
    multiple: true // 是否启用多区域选取功能
  },
  clipConfig,
  editConfig: {
    mode: 'cell', // 单元格编辑模式
    trigger: 'dblclick' // 双击单元格激活编辑状态
  },
  keyboardConfig: {
    isAll: true, // 是否启用快捷键全选
    isClip: true, // 是否开启复制粘贴
    isEdit: true, // 是否开启任意键进入编辑(功能键除外)
    isDel: true, // 是否开启删除键功能
    isEsc: true // 是否开启Esc键关闭编辑功能
  },
  columns: [
    { type: 'seq', fixed: 'left', width: 60 },
    { field: 'name', fixed: 'left', title: '名字', editRender: { name: 'input' } },
    { field: 'role', title: '角色', editRender: { name: 'input' } },
    { field: 'sex', title: '性别', editRender: sexEditRender },
    { field: 'num', title: '分数', editRender: { name: 'VxeNumberInput' } },
    { field: 'age', title: '年龄', editRender: { name: 'VxeNumberInput' } },
    { field: 'address', title: '地址', width: 200, editRender: { name: 'input' } }
  ],
  data: [
    { id: 10001, name: '张三', role: '前端开发', sex: '0', num: 23, age: 28, address: '北京市17号' },
    { id: 10002, name: '李四', role: '测试人员', sex: '1', num: 23, age: 22, address: '江苏省27号' },
    { id: 10003, name: '老六', role: '项目经理', sex: '0', num: 23, age: 32, address: '深圳市19号' },
    { id: 10004, name: '小李', role: '后端开发', sex: '1', num: 456, age: 24, address: '江苏省47号' },
    { id: 10005, name: '老万', role: '设计师', sex: '1', num: 23, age: 42, address: '北京市18号' },
    { id: 10006, name: '小刘', role: '前端开发', sex: '0', num: 23, age: 38, address: '上海市17号' },
    { id: 10007, name: '老徐', role: '测试人员', sex: '1', num: 100, age: 24, address: '北京市19号' },
    { id: 10008, name: '老二', role: '设计师', sex: '0', num: 345, age: 34, address: '上海市11号' },
    { id: 10009, name: '小牛', role: '前端开发', sex: '1', num: 67, age: 52, address: '深圳市29号' },
    { id: 10010, name: '小帅', role: '测试人员', sex: '1', num: 23, age: 44, address: '北京市37号' },
    { id: 10011, name: '老魏', role: '后端开发', sex: '0', num: 56, age: 52, address: '深圳市12号' },
    { id: 10012, name: '小徐', role: '测试人员', sex: '1', num: 23, age: 16, address: '广州市16号' },
    { id: 10013, name: '小张', role: '设计师', sex: '1', num: 69, age: 16, address: '广州市46号' },
    { id: 10014, name: '老冯', role: '前端开发', sex: '0', num: 36, age: 36, address: '广州市66号' },
    { id: 10015, name: '小哥', role: '后端开发', sex: '0', num: 33, age: 47, address: '广州市56号' },
    { id: 10016, name: '李哥', role: '测试人员', sex: '1', num: 2, age: 42, address: '深圳市16号' }
  ]
})
</script>

注意事项

  • 与多行复制的关系
    • 复制多行时,行与行之间本身有换行符分隔;trailingNewline 仅控制最后一行之后是否再多一个换行符。
  • 其他剪贴板配置
    • clipConfig 还可能包含其他选项(如 copy、paste 等),可根据需要查阅官方文档进行扩展

通过 clipConfig.trailingNewline,可以轻松控制复制到剪贴板的文本末尾是否带换行符。结合 vxe-switch 动态切换,能够适配不同粘贴目标(如 Excel、文本编辑器)的需求,提升数据复制体验。

https://vxetable.cn

posted @ 2026-09-30 10:50  你个老六  阅读(7)  评论(0)    收藏  举报