增强版 JavaScript 读取 Excel

功能:限制只能选 Excel、解析表头、过滤空行、返回干净数组、错误提示,直接复制就能用。

html

预览

复制代码
<input type="file" id="fileInput" accept=".xlsx,.xls" />
<script src="https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js"></script>

<script>
const fileInput = document.getElementById('fileInput');

fileInput.addEventListener('change', async function (e) {
    const file = e.target.files[0];
    if (!file) return;

    // 1. 校验文件格式
    const suffix = file.name.slice(-5).toLowerCase();
    if (!suffix.includes('.xlsx') && !suffix.includes('.xls')) {
        alert('请上传 xlsx 或 xls 格式的Excel文件');
        fileInput.value = '';
        return;
    }

    // 2. 读取文件
    const reader = new FileReader();
    reader.readAsArrayBuffer(file);

    reader.onload = function (ev) {
        try {
            // 解析Excel
            const data = new Uint8Array(ev.target.result);
            const workbook = XLSX.read(data, { type: 'array' });
            
            // 获取第一个工作表
            const firstSheet = workbook.SheetNames[0];
            const sheet = workbook.Sheets[firstSheet];

            // 3. 转JSON并自动识别表头
            let list = XLSX.utils.sheet_to_json(sheet, {
                header: 1   // 第一行作为表头
            });

            // 4. 过滤空行、空数据
            list = filterEmptyRow(list);

            console.log('解析后Excel数据:', list);
            // 在这里可以渲染表格、传给后端等
        } catch (err) {
            alert('文件解析失败,请检查Excel格式');
            console.error(err);
        }
    }

    reader.onerror = function () {
        alert('文件读取失败');
    }
});

// 过滤空行工具方法
function filterEmptyRow(arr) {
    return arr.filter(row => {
        // 去掉整行都是空的
        return row.some(item => item !== undefined && item !== '');
    });
}
</script>

增强功能亮点

  1. 限制只能上传 .xlsx/.xls,拦截其他文件
  2. 异常捕获,解析失败有弹窗提示
  3. 自动以第一行为表头解析
  4. 自动过滤空白行、无效空数据
  5. 兼容所有现代浏览器,无需后端

拿到的数据格式示例

js

复制代码
[
  ["姓名","年龄","性别"],
  ["张三",20,"男"],
  ["李四",22,"女"]
]
相关推荐
wuyk55539 分钟前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml1 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
萧瑟余晖2 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
ttod_qzstudio3 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖4 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
avi91115 小时前
[AI教做人]AI平台做2项目;一个3D模型展示,另一个框架多人
javascript·人工智能·ai·3d模型·3d引擎·顶点和法线
kyriewen5 小时前
我用Claude Code两天干完了团队两周的排期——周报发出去那一刻我就后悔了
前端·javascript·ai编程
用户938515635076 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
油丶酸萝卜别吃6 小时前
jquery-ajax.js 说明文档
前端·javascript·jquery
windliang6 小时前
Claude Code 源码分析(九):子 Agent 如何分叉、继续与回到父会话
前端·javascript·面试