以showExcel为例学html(html获取excel数据)

boyanx6天前技术教程9

1. HTML 基础结构

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生信息管理系统</title>
</head>
<body>
    <!-- 页面内容 -->
</body>
</html>
  • <!DOCTYPE html> 声明文档类型为 HTML5
  • <html> 是根元素,lang="zh-CN" 指定中文语言
  • <head> 包含元数据和引用的外部资源
  • <body> 包含页面可见内容

2. 引入外部资源

<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js"></script>
  • Tailwind CSS: 实用优先的 CSS 框架
  • SheetJS (xlsx): 处理 Excel 文件的 JavaScript 库

3. 页面布局与组件

3.1 容器与标题

<div class="max-w-4xl mx-auto bg-white rounded-lg shadow-md p-6">
    <h1 class="text-2xl font-bold mb-6 text-gray-800">
        <i class="fa fa-users mr-2"></i>学生信息管理系统
    </h1>
</div>
  • max-w-4xl mx-auto: 设置最大宽度并居中
  • bg-white rounded-lg shadow-md: 白色背景、圆角和阴影
  • p-6: 内边距

3.2 文件上传区域

<div class="mb-6 border-2 border-dashed border-gray-300 rounded-lg p-8 text-center hover:border-blue-500 transition-colors" 
     id="drop-zone"
     ondragover="event.preventDefault(); this.classList.add('border-blue-500')"
     ondragleave="this.classList.remove('border-blue-500')"
     ondrop="handleFileDrop(event)">
    <input type="file" id="file-input" class="hidden" accept=".xls,.xlsx" />
    <label for="file-input" class="cursor-pointer">
        <!-- SVG 图标和提示文字 -->
    </label>
</div>
  • 实现了拖放文件上传功能
  • hidden 类隐藏原生文件输入
  • accept=".xls,.xlsx" 限制文件类型

3.3 数据表格

<table class="min-w-full divide-y divide-gray-200" id="data-table">
    <thead class="bg-gray-50">
        <tr>
            <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">姓名</th>
            <!-- 其他表头 -->
        </tr>
    </thead>
    <tbody class="bg-white divide-y divide-gray-200">
        <!-- 动态内容 -->
    </tbody>
</table>
  • divide-y 添加行间分隔线
  • 表头(thead)和表体(tbody)分离

4. JavaScript 功能实现

4.1 文件处理逻辑

function processExcel(file) {
    const reader = new FileReader();
    
    reader.onload = function(e) {
        const data = new Uint8Array(e.target.result);
        const workbook = XLSX.read(data, { type: 'array' });
        const worksheet = workbook.Sheets[workbook.SheetNames[0]];
        const jsonData = XLSX.utils.sheet_to_json(worksheet);
        
        // 处理数据...
    };
    
    reader.readAsArrayBuffer(file);
}
  1. 使用 FileReader 读取文件
  2. 通过 SheetJS 解析 Excel 文件
  3. 将工作表转换为 JSON 数据

4.2 动态生成表格内容

const tbody = document.querySelector('#data-table tbody');
tbody.innerHTML = jsonData.map(item => `
    <tr class="hover:bg-gray-50">
        <td class="px-6 py-4 whitespace-nowrap">${item[columns.name] || ''}</td>
        <!-- 其他单元格 -->
    </tr>
`).join('');
  • 使用 map() 遍历数据
  • 模板字符串生成 HTML
  • join('') 将数组转换为字符串

4.3 自动检测列名

function findColumn(data, possibleNames) {
    const keys = Object.keys(data[0]);
    return possibleNames.find(name => 
        keys.some(k => k.toLowerCase() === name.toLowerCase())
    ) || null;
}
  • 支持多种可能的列名
  • 不区分大小写匹配

5. 响应式设计

Tailwind CSS 提供了响应式设计类,例如:

  • md: 中等屏幕及以上
  • lg: 大屏幕及以上

6. 交互效果

6.1 拖放反馈

ondragover="event.preventDefault(); this.classList.add('border-blue-500')"
ondragleave="this.classList.remove('border-blue-500')"
  • 拖拽时添加蓝色边框
  • 拖拽离开时移除

6.2 状态提示

function showStatus(message, type = 'info') {
    const status = document.getElementById('status');
    status.textContent = message;
    status.className = `mt-4 text-sm ${
        info: 'text-blue-600',
        success: 'text-green-600',
        error: 'text-red-600'
    }[type]} transition-colors`;
}
  • 根据类型显示不同颜色
  • 使用对象查找简化条件逻辑
标签: dropzone.js

相关文章

《正当防卫3》mod正确使用图文教程

《正当防卫3》中的mod怎么用?很多玩家都想下载一些mod使用,今天介绍的是游戏中的mod正确使用教程,有需要的玩家不妨参考一下。首先在设定启动选项里 加入 如下方括号内的代码 【--vfs-fs d...

《星球大战:前线》将取消单机模式:没人爱玩

IT之家讯 8月15日消息,《星球大战:前线》(Star Wars Battlefront)将由《战地》系列制作组DICE打造。在游戏中,玩家可以扮演包括风暴士兵、绝地武士等在内的多种角色,还能搭乘陆...

《星球大战:前线》公布新截图!全新模式即将揭晓

今日官方Twitter透漏DICE即将在美国时间7月30日为《星球大战:前线(Star Wars: Battlefront)》公布一个新的游戏模式,而且官方还称这个模式将在玩家间引起爆炸性轰动。官方T...

《星球大战:前线》曝光新玩法“坠落之地”

近日,EA继续为大家曝光了《星球大战:前线》的一个新模式“坠落之地(Drop Zone)”玩法内容介绍。据悉该模式为8V8的PVP对战,反抗军和帝国军需要要抢夺并控制从大气层掉落至地图中心的驾驶舱(p...

Playwright 自动化测试3 第二阶段:核心技能与调试 交互操作大全

一、交互操作核心:从基础到高级1. 点击与输入操作精准点击click():基础点击,支持自动等待元素可操作(可见、未禁用)。进阶控制:# 强制超时(非必要不推荐) page.click('bu...

《星球大战:前线》十月初测试 或不限号

EA今日宣布《星球大战:前线》将于十月初展开技术测试,平台为PC/PS4/Xbox One,或为不限号开放测试。在此次技术测试中玩家将能在Hoth地图上体验到大型40人对战模式——步行者突袭模式。星战...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。