前端读取本地表格数据

news2024/11/25 18:38:35

vue3+ts+vite


无后端提供数据的情况下,前端读取本地表格数据,并将数据放入页面结构中 展示在网页中
记得先安装npm install xlsx
在这里插入图片描述
目录
在这里插入图片描述
read_xlsx.ts

import * as XLSX from 'xlsx';
//将行,列转换
function transformSheets(sheets: { [key: string]: any }): any[] {
  var content: any[][]  = []
  var content1: any[][] = []
  var tmplist = []
  for (let key in sheets){
    //读出来的workbook数据很难读,转换为json格式,参考https://github.com/SheetJS/js-xlsx#utility-functions
    tmplist.push(XLSX.utils.sheet_to_json(sheets[key]).length)
    content1.push(XLSX.utils.sheet_to_json(sheets[key]))
  }
  var maxLength = Math.max.apply(Math, tmplist)
  //进行行列转换
  for (let y in [...Array(maxLength)]){
    content.push([])
    for (let x in [...Array(tmplist.length)]) {
      try {
        for (let z in content1[x][y] as { [key: string]: any }){
          content[y].push(content1[x][y][z])
        }
      } catch (error) {
        content[y].push('')
      }
    }
  }
  content.unshift([])
  for (let key in sheets){
    content[0].push(key)
  }
  return content

}
export {transformSheets}
// export {transformSheets as default}

.vue文件

<template>
				 <el-table 
                        stripe 
                        ref="multipleTableRef"
                        :data="sheetTableData"
                        style="width: 100%"
                    >
                        <el-table-column property="number" label="染色体" width="70">
                          <template #default="scope">
                              <div class="common_cell" @click="getCellDetail('all')">{{ scope.row.number }}</div>
                          </template>
                        </el-table-column>
                        <el-table-column property="validCount" label="有效位点数量/比列">
                          <template #default="scope">
                              <div class="common_cell" @click="getCellDetail('all')">{{ scope.row.validCount }}</div>
                          </template>
                        </el-table-column>
                        <el-table-column property="referCount" label="Refer位点数量/比列" >
                          <template #default="scope">
                              <div class="common_cell" @click="getCellDetail('refer')">{{ scope.row.referCount }}</div>
                          </template>
                        </el-table-column>
                        <el-table-column property="altCount" label="Alt位点数量/比列" >
                          <template #default="scope">
                              <div class="common_cell" @click="getCellDetail('alt')">{{ scope.row.altCount }}</div>
                          </template>
                        </el-table-column>
                        <el-table-column property="mixCount" label="杂合位点数量/比列" >
                          <template #default="scope">
                              <div class="common_cell" @click="getCellDetail('hybrid')">{{ scope.row.mixCount }}</div>
                          </template>
                        </el-table-column>
                    </el-table>
</template>				
<script setup lang="ts">
  import axios from 'axios'
  import * as XLSX from 'xlsx';
  import {transformSheets} from '../../utils/read_xlsx'
  interface ChromosomeInfo {
    number:string,
    validCount:string,
    referCount:string,
    altCount:string,
    mixCount:string,
  }
  const sheetTableData = ref<ChromosomeInfo[]>([])
  onMounted(() => {
    let url = "/chrom.xlsx" //放在public目录下的文件可以直接访问
   //读取二进制excel文件
     axios.get(url, {responseType:'arraybuffer'}).then((res) => {
       let data = new Uint8Array(res.data)
       let wb = XLSX.read(data, {type:"array"})
       let sheets = wb.Sheets
       let sheetData = transformSheets(sheets).slice(1, 11)
       sheetData.forEach(item => {
        sheetTableData.value.push({
          number: item[0],
          validCount: item[2]+'/'+Number(item[6]*100).toFixed(2)+'%',
          referCount: item[3]+'/'+Number(item[7]*100).toFixed(2)+'%',
          altCount: item[4]+'/'+Number(item[8]*100).toFixed(2)+'%',
          mixCount: item[5]+'/'+Number(item[9]*100).toFixed(2)+'%',
       })
      })
       console.log(sheetTableData.value)
     }).catch(err =>{
      console.log(err)
    })
  })
  </script>

备注:灵感来源于https://www.jb51.net/article/162144.htm

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术架构的演进之路

技术架构的演进之路 我们以电商系统的技术架构发展为例 文章目录 1. 单体架构2. 应用数据分离架构3. 应用服务集群架构4. 读写分离、主从分离架构5. 冷热分离架构6. 垂直分库架构7. 微服务架构8. 容器编排架构 1. 单体架构 在前期用户访问量很少的时候,没有对性能、安全等提出…

自然语言处理(NLP)论文数量的十年趋势:2014-2024

引言 近年来&#xff0c;自然语言处理&#xff08;NLP&#xff09;已成为人工智能&#xff08;AI&#xff09;和数据科学领域中的关键技术之一。随着数据规模的不断扩大和计算能力的提升&#xff0c;NLP技术从学术研究走向了广泛的实际应用。通过观察过去十年&#xff08;2014…

uniapp中添加colorUI的过程

1、先将colorUI文件粘到项目中去 2、common中添加两个文件 3、App文件中引入这两个文件

毕业设计选题:基于ssm+vue+uniapp的健身管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

2024年软件设计师中级(软考中级)详细笔记【5】软件工程基础知识下(分值10+)

第5章软件工程 目录 前言第5章 软件工程基础知识&#xff08;下&#xff09;5.5 系统测试5.5.1 系统测试与调试5.5.2 传统软件的测试策略5.5.5 测试方法5.5.5.1 黑盒测试5.5.5.2 白盒测试白盒测试McCabe度量法伪代码白盒测试McCabe 5.6 运行和维护知识【以背为主】5.6.2 系统维…

Asahi Linux通过大量变通方法实现在M系列Mac上支持AAA级游戏

如果您正在运行 Asahi Linux 并希望在您的 M 系列 Mac 上玩游戏&#xff0c;那么有一个好消息要告诉您&#xff0c;Asahi Linux 项目将继续推出新功能。 2 月份它在 Mac 上Apple Silicon 实现了OpenGL 4.6 和 OpenGL ES 3.2 兼容&#xff0c;现在又在游戏方面取得了进展。但您可…

WRN: 宽度残差网络(论文复现)

WRN: 宽度残差网络&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 WRN: 宽度残差网络&#xff08;论文复现&#xff09;概述模型结构核心逻辑实验训练与测试在线部署使用方式 概述 本文复现论文 Wide Residual Networks提出的深度神经网…

软件狗加密的高安全性

软件狗加密&#xff0c;即使用软件加密狗对软件进行加密保护的过程&#xff0c;是一种软硬件结合的加密方式。以下是对软件狗加密的详细解析&#xff1a; 一、软件加密狗的基本概念 软件加密狗&#xff0c;也称为硬件加密锁或USB密钥&#xff0c;是一种用于保护软件和数据安全的…

IEC104规约的秘密之十----令人眼花缭乱的各种限定词,品质描述词

当我们已经能用104通讯完成各种通讯也能解决帧序号等各种问题后&#xff0c;我们就更加关心报文的细节。 各种报文中的限定词就可以进行仔细分析了。 下面以单点遥信做为例子进行分析&#xff1a; SIQ是英文Single-point information with quality descriptor的缩写&#xff0…

HTML+CSS排行榜实现代码,复制粘贴可使用

如何用HTML和CSS创建一个具有吸引力的创作者排行榜 在数字化时代&#xff0c;排行榜是吸引用户注意的绝佳方式。无论是展示最受欢迎的产品、文章还是创作者&#xff0c;一个设计精良的排行榜都能提升用户的参与度和兴趣。本文将指导你如何使用HTML和CSS创建一个具有吸引力的创…

Rider + xmake DX12 开发环境

Rider xmake DX12 开发环境 背景 如题&#xff0c;想要接近 UE 的开发流程 正文 大的流程就是 xmake 生成 vs 的 sln&#xff0c;用 Rider 进行开发 intellisense&#xff0c;断点调试 加了个脚本手动刷新 sln xmake project -k vsxmake -m "debug;release" -…

msvcr100.dll丢失的解决方法,如何安全下载 msvcr100.dll 文件:完全指南

在使用 Windows 操作系统的电脑上运行某些程序或游戏时&#xff0c;可能会遇到一个常见的错误消息&#xff0c;提示缺少 msvcr100.dll 文件。这个 DLL 文件是 Microsoft Visual C 2010 Redistributable Package 的一部分&#xff0c;对于运行依赖于 C 的软件来说至关重要。如果…

Linux等保测评与加固

Linux三级系统测评及加固方法 身份鉴别 应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换 测评方法&#xff1a; ①一般采用用户名口令进行身份鉴别&#xff0c;身份标识具有唯一性无法创建相同用户名 通…

WPF 手撸插件 八 操作数据库一

1、本文将使用SqlSugar创建Sqlite数据库&#xff0c;进行入门的增删改查等操作。擦&#xff0c;咋写着写着凌乱起来了。 SqlSugar官方文档&#xff1a;简单示例&#xff0c;1分钟入门 - SqlSugar 5x - .NET果糖网 2、环境SqlSugar V5.0版本需要.Net Framework 4.6 &#xff0…

MySQL 创建子账号

1. 使用 root 账号登录 MySQL 使用 root 账号登录 MySQL&#xff0c;登录成功如图所示&#xff1a; 新建一个 MySQL 子账号&#xff0c;新建子账号命令如下&#xff1a; 命令 : CREATE USER testlocalhost IDENTIFIED BY 123456;若出现如下图所示&#xff0c;则表示新建 MySQL…

技术总结(三)

Checked Exception 和 Unchecked Exception 有什么区别&#xff1f; Checked Exception 即 受检查异常 &#xff0c;Java 代码在编译过程中&#xff0c;如果受检查异常没有被 catch或者throws 关键字处理的话&#xff0c;就没办法通过编译。 比如下面这段 IO 操作的代码&…

设计模式---责任链模式快速demo

Handler&#xff08;处理者&#xff09;&#xff1a; 定义一个处理请求的接口。通常包括一个处理请求的方法。它可以是抽象类或接口&#xff0c;也可以是具体类&#xff0c;具体类中包含了对请求的处理逻辑。处理者通常包含一个指向下一个处理者的引用。ConcreteHandler&#x…

esp32-c3 Supermini 模块下载

1.此模块自带usb 功能&#xff0c;可以直接利用数据线连接模块与pc进行下载。此模块不带uart to usb 集成块。 2. 此模块下载只能用自带type c 数据口与pc usb 连接进行。不能用usb 转 uart 对模块下载&#xff0c;但可以通讯 3. 利用idf.py 对模块下载前&#xff0c;必…

Thread类的用法练习

目录 1.继承 Thread, 重写 run 2.实现 Runnable, 重写 run 3.继承 Thread, 重写 run, 使用匿名内部类 4.实现 Runnable, 重写 run, 使用匿名内部类 5.使用 lambda 表达式 6.请回答以下代码的输出, 并解释原因 1.继承 Thread, 重写 run 2.实现 Runnable, 重写 run 3.继承 Th…

四、远程登录到Linux服务器

说明 linux 服务器是开发小组共享&#xff0c;正式上线的项目是运行在公网&#xff0c;因此需要远程登录到 Linux 进行项目管理或者开发 Xshell 1、特点 Xshell 是目前最好的远程登录到 Linux 操作的软件&#xff0c;流畅的速度并且完美解决了中文乱码的问题&#xff0c; 是目…