html实现粘贴excel数据,在页面表格中复制

录入数据时,有时候需要把excel中的数据一条条粘贴到页面中,当数据量过多时,这种操作很令人崩溃。本篇文章实现了从excel复制好多行数据后,可在页面粘贴的功能

具体实现代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>可编辑表格</title>
<style>
  #textarea {
    width: 80%;
    min-height: 100px;
    border: 1px solid #ccc;
  }
  table {
    width: 100%;
    border-collapse: collapse;
  }
  th, td {
    border: 1px solid #ccc;
    padding: 8px;
    text-align: left;
  }
  th {
    background-color: #f2f2f2;
  }
</style>
</head>
<body>
  <textarea id="textarea"></textarea>
  <table id="myTable">
    <thead>
      <tr>
        <th>姓名</th>
        <th>年龄</th>
        <th>职业</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>张三</td>
        <td>30</td>
        <td>程序员</td>
      </tr>
      <tr>
        <td>李四</td>
        <td>28</td>
        <td>设计师</td>
      </tr>
    </tbody>
  </table>

  <script>
    document.addEventListener('DOMContentLoaded', function() {
      const inputElement = document.getElementById('textarea');

      function handlePasteEvent(event) {
        // event.preventDefault(); // 可选:阻止默认粘贴行为

        // 获取粘贴板数据
        const clipboardData = event.clipboardData || window.clipboardData;
        const pastedData = clipboardData.getData('Text');

        // 初始化用于存储解析后的数据的数组
        let arr = [];
        try {
          arr = pastedData.split('\n')
            .filter(item => item !== '') // 兼容Excel行末\n,防止出现多余空行
            .map(item => item.split('\t')) // 将每行按制表符分割成列
            .map(item => {
              // 去掉每列中的\r字符,使用模板字符串
              return item.map(str => str.replace(/\r/g, ''));
            });
        } catch (error) {
          console.error("Error parsing pasted data:", error);
          return; // 在遇到异常时终止处理
        }
        if (arr.length === 0) {
          console.warn("Pasted data is empty or in an unrecognized format.");
          return;
        }

        const table = document.getElementById("myTable");
        const cells = table.rows.item(0).cells.length; // 表格的列数

        // 创建一个文档片段,用于批量添加新行到DOM中,减少重绘次数
        const fragment = document.createDocumentFragment();

        arr.forEach(item => {
          const newRow = document.createElement("tr");
          for (let i = 0; i < cells; i++) {
            const newCell = document.createElement("td");
            newCell.textContent = item[i] || '';
            newRow.appendChild(newCell);
          }
          fragment.appendChild(newRow); // 先将新行添加到文档片段中
        });

        table.appendChild(fragment); // 最后将整个文档片段一次性添加到表格中
      }
      // 添加粘贴事件监听器
      inputElement.addEventListener('paste', handlePasteEvent);
    });
  </script>
</body>
</html>

效果图

相关推荐
前端大卫32 分钟前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘1 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare1 小时前
浅浅看一下设计模式
前端
Lee川1 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
Ticnix1 小时前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人1 小时前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl1 小时前
OpenClaw 深度技术解析
前端
崔庆才丨静觅1 小时前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人2 小时前
vue3使用jsx语法详解
前端·vue.js
天蓝色的鱼鱼2 小时前
shadcn/ui,给你一个真正可控的UI组件库
前端