vue3 使用@vue-office/excel预览本地excel文件 demo

news2024/12/27 14:00:41

vue3 使用@vue-office/excel预览excel文件 demo

显示如下:
请添加图片描述
请添加图片描述

npm地址:https://www.npmjs.com/package/@vue-office/excel
@vue-office还有pdf和docx,按需下载对应插件

npm install @vue-office/excel vue-demi

vue代码如下

app.vue

<template>
  <div class="download">
      <h1>下载及回显相关</h1>
      <div class="box">
          <h2>vue-office / excel回显</h2>
          <input type="file" id="input"
              accept=".xls,.xlsx,.csv"
              ref="inputFileRef"
              @change="openExcelHandle"
              multiple
          />
          <el-table
              v-if="tableData.length"
              ref="tableRef"
              :data="tableData"
          >
              <el-table-column
                  label="文件名称"
                  prop="name"
                  align="left"
                  >
                  <template #default="scope">
                      {{ scope.row.name }}
                  </template>
              </el-table-column>
              <el-table-column label="文件大小" prop="size"/>
              <el-table-column label="最后修改时间" prop="lastModified" />
              <el-table-column label="预览">
                  <template #default="{ row }">
                      <el-button @click="singleReview(row)">预览</el-button>
                  </template>
              </el-table-column>
          </el-table>
      </div>
      <excel ref="excelReviewRef" :propsUrl="vueOfficeExcel"/>
  </div>
</template>

<script setup name="Download">
import { ref, reactive } from 'vue'
import Excel from './components/vueOfficeExcelReview.vue'

const excelReviewRef = ref(null)
let vueOfficeExcel = reactive({})
const inputFileRef = ref(null)
const tableData = ref([])

// el-input中change事件中的event只是文件地址
// input change事件中的event有file对象
function openExcelHandle(event) {
  for(let i = 0; i < event.target.files.length; i++) {
      tableData.value.push(event.target.files[i])
  }
}
function singleReview(row) {
  if (!row) {
      excelReviewRef.value.showHandle('', true)
      return
  }
  excelReviewRef.value.showHandle(row)
}


</script>

<style scoped>
.logo {
  height: 6em;
  padding: 1.5em;
  will-change: filter;
  transition: filter 300ms;
}
.logo:hover {
  filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
  filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

vueofficeExcelReview.vue(主要页面)

<template>
    <div class="excel-review">
        <!-- 不使用dialog弹框是可以直接在页面下方显示的 -->
        <el-dialog
            v-model="visibility"
            :title="title"
            width="98%"
            :closeOnClickModal="false"
            :closeOnPressEscape="false"
            customClass="first-login-dialog"
            @close="closeHandle"
        >
            <VueOfficeExcel
                v-if="fileUrl"
                :src="fileUrl"
                @rendered="renderedHandler"
                @error="errorHandler"/>
        </el-dialog>
    </div>
</template>

<script setup>
import VueOfficeExcel from '@vue-office/excel'
import '@vue-office/excel/lib/index.css'
import { ref, reactive } from 'vue'

const visibility = ref(false)


const fileUrl = ref(null)
function renderedHandler() {
    console.log("渲染完成")
}
function errorHandler() {
    console.log("渲染失败")
}
let file = reactive({})
const title = ref('excel预览')
function showHandle(argFile) { // 下方使用的是arraybuffer的方式,
    file = argFile
    let fileReader = new FileReader()
    fileReader.readAsArrayBuffer(file)
    fileReader.onload =  (e) => {
        fileUrl.value = fileReader.result
    }
    title.value += file.name
    visibility.value = true
}
function closeHandle() {
    title.value = 'excel预览'
    fileUrl.value = null
    visibility.value = false
}
defineExpose({
    showHandle
})

</script>
<style lang="scss" scoped>
.excel-review {
    :deep(.el-dialog) {
        margin-top: 0;
        margin-bottom: 0;
        padding: 0;
        height: 100vh;
        .el-dialog__body {
            padding: 0;
            .vue-office-excel {
                height: calc(100vh - 60px);
            }
        }
    }
}
</style>

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

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

相关文章

2.Model、ModelMap和ModelAndView的使用详解

1.前言 最近SSM框架开发web项目&#xff0c;用得比较火热。spring-MVC肯定用过&#xff0c;在请求处理方法可出现和返回的参数类型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;对于MVC框架&#xff0c;控制器Controller执行业务逻辑&#xff0c;用于产生模型数据…

腾讯云国际站代充-阿里云ECS怎么一键迁移到腾讯云cvm?

今天主要来介绍一下如何通过阿里云国际ECS控制台一键迁移至腾讯云国际CVM。腾讯云国际站云服务器CVM提供全面广泛的服务内容。无-需-绑-定PayPal&#xff0c;代-充-值腾讯云国际站、阿里云国际站、AWS亚马逊云、GCP谷歌云&#xff0c;官方授权经销商&#xff01;靠谱&#xff0…

嵌入式Qt开发—Excel表格数据导出

有一个嵌入式Excel表格数据导出的需求&#xff1a;应用软件运行于嵌入式Linux平台上&#xff0c;在设备运行过程中&#xff0c;存储了许多数据&#xff0c;这些数据想以表格的形式导出。考虑到Windows平台的普遍性&#xff0c;需要将数据以excel表格形式导出&#xff0c;故选择…

基于机器学习的假新闻检测 -- 机器学习项目基础篇(14)

不同平台上的假新闻正在广泛传播&#xff0c;这是一个令人严重关切的问题&#xff0c;因为它导致社会稳定和人们之间建立的纽带的永久破裂。很多研究已经开始关注假新闻的分类。 在这里&#xff0c;我们将尝试在Python中的机器学习的帮助下解决这个问题。 主要步骤 导入库和数…

一生一芯4——使用星火应用商店在ubuntu下载QQ、微信、百度网盘

星火应用商店可以非常方便的完成一些应用的下载&#xff0c;下面是官方网址 http://spark-app.store/download 我使用的是intel处理器&#xff0c;无需下载依赖项&#xff0c;直接点击软件本体 我这里下载amd64,根据自己的处理器下载对应版本 sudo apt install ./spark-stor…

影响股票数据接口l2传输数据快慢因素有哪些?(l2数据接口)

股票数据接口l2是一种用于获取股票市场相关数据的编程接口。它允许开发者通过编程的方式获取、查询、订阅和更新股票相关数据&#xff0c;如股票价格、成交量、财务数据等&#xff0c;并将这些数据用于自己的应用或系统中。l2数据接口通常提供实时行情数据、历史行情数据、财务…

如何批量替换文件名称的一部分?

如何批量替换文件名称的一部分&#xff1f;在工作和生活中&#xff0c;我们经常需要对一些文件和文件夹进行批量修改操作&#xff0c;其中最常见的是对文件名进行部分更改&#xff0c;例如批量替换文件名中的一部分分子。这些操作不仅可以提高工作效率&#xff0c;还能帮助我们…

elementUI 的上传组件<el-upload>,自定义上传按钮样式

方法一&#xff1a; 原理&#xff1a;调用<el-upload>组件的方法唤起选择文件事件 效果&#xff1a; 页面代码&#xff1a; 1、选择图片按钮 <div class"flex_row_spacebetween btn" click"chooseImg"><span class"el-icon-plus ic…

Boost开发指南-4.4assign

assign 许多情况下我们都需要为容器初始化或者赋值&#xff0c;填入大量的数据&#xff0c;比如初始错误代码和错误信息&#xff0c;或者是一些测试用的数据。在C98中标准容器仅提供了容纳这些数据的方法&#xff0c;但填充的步骤却是相当地麻烦&#xff0c;必须重复调用inser…

财报解读:继续押注Disney+,迪士尼距离盈利还有多远?

迪士尼最新一季的“答卷”&#xff0c;透露着不小的寒气。 近日&#xff0c;迪士尼披露了2023财年第三季度&#xff08;自然年2023年Q2&#xff09;业绩报告&#xff0c;营收223.3亿美元&#xff0c;同比仅增长4%&#xff0c;低于市场预期的225.1亿美元&#xff1b;归母净亏损…

Python第三方库 - Pandas库

文章目录 1. Pandas介绍2. Pandas基础2.1 引入2.2 数据结构2.2.1 Series2.3 DataFrame2.3.1 概念 3 Pandas CSV 文件3.1 语法3.2 遇到的问题 参考文档 1. Pandas介绍 概念: Pandas 是 Python 的核心数据分析支持库&#xff0c;提供了快速、灵活、明确的数据结构&#xff0c;旨…

【Vue-Router】重定向

First.vue <template><h1>First Seciton</h1> </template>Second.vue&#xff0c;Third.vue代码同理 UserSettings.vue <template><h1>UserSettings</h1><router-link to"/settings/children1">children1</ro…

41、可靠传输——停等ARQ

前面两节内容我们学习了传输层的基本概况的一些知识&#xff0c;包括传输层在TCP/IP协议栈中负责的任务、传输层的两大协议&#xff0c;以及端口号、套接字等一些基本的概念。从这一节开始&#xff0c;我们将开启两大协议中TCP协议的学习。 但是&#xff0c;经过之前的学习&am…

企望制造ERP系统 RCE漏洞复现(HW0day)

0x01 产品简介 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专家打造&#xff0c;具有国际先进的管理方式&#xff0c;将现代化的管理方式融入erp软件中&#xff0c;让企业分分钟就拥有科学的管理经验。 erp的功能包括成本核算、报价定价、订单下达、生产下单、…

上传excel文件

文件上传&#xff0c;其实就是用el-upload组件来实现上传&#xff0c;只是换了样式&#xff0c;和图片上传一样 <el-form-item label"选择文件"><el-input placeholder"请选择文件" v-model"form.file" disabled style"width: 45…

自定义批量修改图像位深度

什么是图像位深度&#xff1f;&#xff1f;&#xff1f; 图像位深度(Bit Depth)是指图像中每个像素所占的比特数,它决定了图像能够表示的颜色数量和亮度层级。 简单来说: 位深度越高,每个像素所能表示的颜色数和亮度等级越多。位深度越低,每个像素所能表示的颜色数和亮度等级…

【设备树笔记整理4】内核对设备树的处理

1 从源头分析_内核head.S对dtb的简单处理 1.1 bootloader向内核传递的参数 &#xff08;1&#xff09;bootloader启动内核时&#xff0c;会设置r0&#xff0c;r1&#xff0c;r2三个寄存器&#xff1a; r0一般设置为0;r1一般设置为machine_id (在使用设备树时该参数没有被使用…

809协议nodejs编写笔记(还在更新)

一、总体流程 数据首先通过receiver接受层接收&#xff0c;去掉标识头和标识尾&#xff1b;再进入depacker解包层进行解包&#xff0c;把标识头分解出来并解析&#xff1b;之后发给handler处理层根据不同的消息id选择使用不同的业务逻辑&#xff1b;如果有应答&#xff0c;则通…

Vue2(组件开发)

目录 前言一&#xff0c;组件的使用二&#xff0c;插槽slot三&#xff0c;refs和parent四&#xff0c;父子组件间的通信4.1&#xff0c;父传子 &#xff1a;父传子的时候&#xff0c;通过属性传递4.2&#xff0c;父组件监听自定义事件 五&#xff0c;非父子组件的通信六&#x…

JL701N编译后查看内存使用情况

编译之后&#xff0c;可以在 cpu/br28/tools/sdk.map 中查看实际的使用情况.