VTable导出当前页和导出所有页数据

news2024/11/19 5:44:35

表格导出的是当前显示的表格,如果是分页表格想导出全部的数据话。有两种方法可以实现

  1. 表格先显示的全量数据,导出后再恢复当前页。
  2. 新建一个隐藏的表格实例显示全量数据导出这个隐藏的表格实例。
    在这里插入图片描述
    下面是全量代码:
<template>
    <div>
        <div ref="listTableExport" id = "CONTAINER_ID" style="width: 1580px; height: 800px"></div>
        <div id = "CONTAINER_HiDE" style="display : none"></div>
        <div style="width: 1580px; height: 50px" class="right-align">
            <button id="first-buttom" > 首页</button>
            <button id="prev-buttom" > 上一页</button>
            <span id="page-namber">1</span>
            <input id="cpnr" type="hidden">
            <span>/</span>
            <span id="total-page">共 页</span>
            <input id="mpnr" type="hidden">
            <button id="next-buttom">下一页</button>
            <button id="tail-buttom" > 尾页</button>
            <span id="total-num">共 条</span>
            <input  id="spn" type="number" >
            <button id="skip-buttom"> 跳转</button>
        </div>
    </div>
  </template>
  
  <script setup>
   import * as VTable from '@visactor/vtable';
// 使用时需要引入插件包@visactor/vtable-export
import {
  downloadCsv,
  exportVTableToCsv,
  downloadExcel,
  exportVTableToExcel,
} from "@visactor/vtable-export";
// umd引入时导出工具会挂载到VTable.export

let tableInstance;
let tableInstance_hide;
fetch('https://lf9-dp-fe-cms-tos.byteorg.com/obj/bit-cloud/VTable/North_American_Superstore_Pivot_data.json')
  .then(res => res.json())
  .then(data => {
    const option = {
      records: data,
      rows: [
        {
          dimensionKey: 'City',
          title: 'City',
          headerStyle: {
            textStick: true
          },
          width: 'auto'
        }
      ],
      columns: [
        {
          dimensionKey: 'Category',
          title: 'Category',
          headerStyle: {
            textStick: true
          },
          width: 'auto'
        }
      ],
      indicators: [
        {
          indicatorKey: 'Quantity',
          title: 'Quantity',
          width: 'auto',
          showSort: false,
          headerStyle: {
            fontWeight: 'normal'
          },
          style: {
            padding: [16, 28, 16, 28],
            color(args) {
              if (args.dataValue >= 0) return '#000000';
              return 'red';
            }
          }
        },
        {
          indicatorKey: 'Sales',
          title: 'Sales',
          width: 'auto',
          showSort: false,
          headerStyle: {
            fontWeight: 'normal'
          },
          format: rec => {
            return '$' + Number(rec).toFixed(2);
          },
          style: {
            padding: [16, 28, 16, 28],
            color(args) {
              if (args.dataValue >= 0) return '#000000';
              return 'red';
            }
          }
        },
        {
          indicatorKey: 'Profit',
          title: 'Profit',
          width: 'auto',
          showSort: false,
          headerStyle: {
            fontWeight: 'normal'
          },
          format: rec => {
            return '$' + Number(rec).toFixed(2);
          },
          style: {
            padding: [16, 28, 16, 28],
            color(args) {
              if (args.dataValue >= 0) return '#000000';
              return 'red';
            }
          }
        }
      ],
      corner: {
        titleOnDimension: 'row',
        headerStyle: {
          textStick: true
        }
      },
      dataConfig: {
        sortRules: [
          {
            sortField: 'Category',
            sortBy: ['Office Supplies', 'Technology', 'Furniture']
          }
        ]
      },
      widthMode: 'standard',
      pagination:{
        perPageCount:10,
        currentPage:0,
        },
    };
    
    tableInstance = new VTable.PivotTable(document.getElementById("CONTAINER_ID"), option);
    const option_hide = {
      records: data,
      rows: [
        {
          dimensionKey: 'City',
          title: 'City',
        }
      ],
      columns: [
        {
          dimensionKey: 'Category',
          title: 'Category',
        }
      ],
      indicators: [
        {
          indicatorKey: 'Quantity',
          title: 'Quantity',
        },
        {
          indicatorKey: 'Sales',
          title: 'Sales',
        },
        {
          indicatorKey: 'Profit',
          title: 'Profit',
        }
      ],
      
      dataConfig: {
        sortRules: [
          {
            sortField: 'Category',
            sortBy: ['Office Supplies', 'Technology', 'Furniture']
          }
        ]
      },
    };  
    tableInstance_hide = new VTable.PivotTable(document.getElementById("CONTAINER_HiDE"), option_hide);
    //分页相关代码
    let pageNumber = 0;
    // const totalNum = option.records.length;
    const totalNum = option.pagination.totalCount;
    const pageSize =option.pagination.perPageCount;
    const pageNumberSpan = document.getElementById("page-namber");
    const totalPageSpan = document.getElementById("total-page");
    const totalNumSpan = document.getElementById("total-num");

    const totalPg = Math.ceil(totalNum/pageSize);//总页数
    totalPageSpan.innerHTML='共'+totalPg+'页';
    totalNumSpan.innerHTML='共'+totalNum+'条';


    document.getElementById("prev-buttom").addEventListener("click", () => {
    if (pageNumber === 0) {
        return;
    }
    pageNumber--;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    });
    document.getElementById("first-buttom").addEventListener("click", () => {
    pageNumber=1;
    pageNumber--;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    document.getElementById("spn").value ='';
    });

    document.getElementById("tail-buttom").addEventListener("click", () => {
    pageNumber=totalPg-1;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    document.getElementById("spn").value ='';
    });


    document.getElementById("next-buttom").addEventListener("click", () => {
    if (pageNumber === (totalPg-1)) {
        return;
    }
    pageNumber++;
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    });
    document.getElementById("skip-buttom").addEventListener("click", () => {
    let specificPageNum = document.getElementById("spn").value;//要跳转的页
    if (specificPageNum > totalPg) {
        pageNumber=totalPg-1;
        document.getElementById("spn").value=totalPg;
    }else{
        pageNumber = specificPageNum-1
    }
    if (specificPageNum <= 0) {
        pageNumber=0;
        document.getElementById("spn").value =1;
    }
    
    tableInstance.updatePagination({
        currentPage: pageNumber
    });
    pageNumberSpan.innerHTML = '第'+(pageNumber+1)+'页';
    });
    window['tableInstance'] = tableInstance;
    window['tableInstance_hide'] = tableInstance_hide;


    bindExport(totalNum,pageNumber);
  });

function bindExport(totalNum,pageNumber) {
  let exportContainer = document.getElementById('export-buttom');
  if (exportContainer) {
    exportContainer.parentElement.removeChild(exportContainer);
  }

  exportContainer = document.createElement('div');
  exportContainer.id = 'export-buttom';
  exportContainer.style.position = 'absolute';
  exportContainer.style.bottom = '0';
  exportContainer.style.right = '0';

  
  window['tableInstance'].getContainer().appendChild(exportContainer);

  const exportCsvButton = document.createElement('button');
  exportCsvButton.innerHTML = '全量CSV-export';
  const exportExcelButton = document.createElement('button');
  exportExcelButton.innerHTML = '全量Excel-export';
  exportContainer.appendChild(exportCsvButton);
  exportContainer.appendChild(exportExcelButton);

  const exportCsvButton_currentPage = document.createElement('button');
  exportCsvButton_currentPage.innerHTML = '当页CSV-export';
  const exportExcelButton_currentPage = document.createElement('button');
  exportExcelButton_currentPage.innerHTML = '当页Excel-export';
  exportContainer.appendChild(exportCsvButton_currentPage);
  exportContainer.appendChild(exportExcelButton_currentPage);

  const exportCsvButton_hide = document.createElement('button');
  exportCsvButton_hide.innerHTML = '隐藏全量CSV-export';
  const exportExcelButton_hide = document.createElement('button');
  exportExcelButton_hide.innerHTML = '隐藏全量Excel-export';
  exportContainer.appendChild(exportCsvButton_hide);
  exportContainer.appendChild(exportExcelButton_hide);

  exportCsvButton.addEventListener('click', () => {
    window.tableInstance.updatePagination({
        perPageCount:totalNum,
        currentPage: pageNumber
    });
    if (window.tableInstance) {
      downloadCsv(exportVTableToCsv(window.tableInstance), 'export');
    }
    window.tableInstance.updatePagination({
        perPageCount:10,
        currentPage: pageNumber
    });
  });

  exportExcelButton.addEventListener('click', async () => {
    window.tableInstance.updatePagination({
        perPageCount:totalNum,
        currentPage: 0
    });
    if (window.tableInstance) {
      downloadExcel(await exportVTableToExcel(window.tableInstance, {
        formatExportOutput: ({ cellType, cellValue, table, col, row }) => {          
        }
} ), 'export');
    }
    window.tableInstance.updatePagination({
        perPageCount:10,
        currentPage: pageNumber
    });
  });

  exportCsvButton_currentPage.addEventListener('click', () => {
    if (window.tableInstance) {
      downloadCsv(exportVTableToCsv(window.tableInstance), 'export');
    }
  });

  exportExcelButton_currentPage.addEventListener('click', async () => {
    if (window.tableInstance) {
      downloadExcel(await exportVTableToExcel(window.tableInstance, {
        formatExportOutput: ({ cellType, cellValue, table, col, row }) => {           
        }
} ), 'export');
    }
  });

  exportCsvButton_hide.addEventListener('click', () => {
    if (window.tableInstance_hide) {
      downloadCsv(exportVTableToCsv(window.tableInstance_hide), 'export');
    }
  });

  exportExcelButton_hide.addEventListener('click', async () => {
    if (window.tableInstance_hide) {
      downloadExcel(await exportVTableToExcel(window.tableInstance_hide, {
        formatExportOutput: ({ cellType, cellValue, table, col, row }) => {         
        }
} ), 'export');
    }
  });
}
</script>

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

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

相关文章

【笔记】从零开始做一个精灵龙女-拆uv阶段

目录 先回顾一下拆uv的基础流程吧 肩部盔甲分UV示例 手环UV部分 腰带UV部分 其它也差不多&#xff0c;需要删掉一半的就先提前删掉一半&#xff0c;然后把不需要的被遮挡的面也删掉 龙角UV 胸甲UV 侧边碎发UV 马尾UV 脸部/耳朵UV 特殊情况&#xff1a;如果要删一半再…

2024南京国际自有品牌产品博览会

展会名称&#xff1a;2024南京国际自有品牌产品博览会 展会时间&#xff1a;2024年10月11-13日 展会地点&#xff1a;南京国际博览中心 展览规模&#xff1a;36000平米 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

Opencv+python模板匹配

我们经常玩匹配图像或者找相似&#xff0c;opencv可以很好实现这个简单的小功能。 模板是被查找目标的图像&#xff0c;查找模板在原始图像中的哪个位置的过程就叫模板匹配。OpenCV提供的matchTemplate()方法就是模板匹配方法&#xff0c;其语法如下&#xff1a; result cv2.…

智能小家电的跨境渠道有哪些,美国商超入驻选百思买如何?

智能小家电是现代家庭生活的重要部分&#xff0c;提升了生活品质&#xff0c;体现消费者追求个性化、智能化生活。跨境电商发展快速&#xff0c;智能小家电跨境渠道多样化&#xff0c;为品牌提供广阔市场。本文将深入探讨智能小家电的跨境渠道&#xff0c;并分析选择百思买作为…

记录 Bonobo Git 服务器 SMTP 设置

Bonobo 使用标准的 .NET SMTP 设置&#xff0c;可以在 web.config 中指定这些设置。 <system.net><mailSettings><smtp deliveryMethod"network" from"bonobobonoserver.your.domain"><network host"accessible.smtp.host"…

B端组件:穿梭框—可不是简单的左口袋放右口袋

B端组件穿梭框&#xff08;Transfer&#xff09;是一种常见的界面组件&#xff0c;用于在两个列表之间进行数据交互。它通常由两个列表和一些操作按钮组成&#xff0c;其中一个列表用于展示可选数据&#xff0c;另一个列表用于展示已选数据&#xff0c;操作按钮用于将数据从一个…

LeetCode刷题之HOT100之打家劫舍

2024/6/26 大家早上好呀&#xff01;今天不热诶&#xff0c;昨天跟镔哥跑了五公里&#xff0c;配速515简直不要太爽啊&#xff0c;跑完后在操场走一圈&#xff0c;正好发小发了群视频过来&#xff0c;聊了半小时。发小一考研二战失利&#xff0c;去干测试&#xff0c;天天累得不…

基于springboot实现机动车号牌管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现机动车号牌管理系统演示 摘要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&am…

Mybatis插入操作 主键自增 返回成功 但是数据库没有数据

插入操作成功&#xff0c;消耗了一个主键&#xff0c;但是数据库没有看到相关数据。一般这种情况说明可能事务没有执行成功&#xff0c;事务回滚了。数据库操作要通过 ACID规则来约束事务&#xff0c;即原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistenc…

日语培训日语等级考试柯桥小语种学习语言学校

什么是外来语 外来语是指在日本的国语中使用的来源于外国语言的词汇。但狭义上的外来语则是指来源于欧美国家语言的词汇&#xff0c;其中大部分是来源于英美语系的词汇。日语中的汉语词汇很多&#xff0c;大多是自古以来从中国引进的&#xff0c;从外来语的定义看&#xff0c;汉…

使用git在GitHub上克隆指定版本的项目

以pytorch3d为例 先查看想克隆的版本号&#xff0c;我选择v0.7.4版的 再使用git命令进行克隆&#xff0c;只要在clone后面加上--branch 版本号 git clone --branch v0.7.4 https://github.com/facebookresearch/pytorch3d.git

解决msvcp120.dll问题的详细步骤,分析msvcp120.dll文件

msvcp120.dll文件是Microsoft Visual C Redistributable Package for Visual Studio 2013中的一个组件。如果提示你丢失该文件&#xff0c;通常意味着程序试图调用一个未在你电脑上安装的Visual C版本。下面是解决此问题的详细步骤。 msvcp120.dll丢失的解决方法 方法 1&#…

三大关键技术看RAG如何提升LLM的能力

大语言模型表现出色&#xff0c;但是在处理幻觉、使用过时的知识、进行不透明推理等方面存在挑战。检索增强生成&#xff08;RAG&#xff09;作为一个新兴的解决方案&#xff0c;通过整合外部知识库的数据&#xff0c;提高了模型在知识密集型任务中的准确性和可信度&#xff0c…

PointCloudLib (多线程)快速双边滤波 C++版本

0.实现效果 原始点云 和滤波后的点云对比 1.算法原理 PCL(Point Cloud Library)快速双边滤波是一种高效的点云数据滤波方法,它基于传统双边滤波算法进行了改进,通过引入近似方法加速计算过程。以下是关于PCL快速双边滤波的详细回答: 1. 基本原理 空间滤波:在点云中,相…

团队协同渗透测试报告输入输出平台部署

目录 简介 文章来源 部署环境 文件下载 开始安装 系统初始化 免责声明 结语 简介 因应监管部需求&#xff0c;国内访问Docker源pull镜像开始变得复杂且困难起来了&#xff0c;大佬github给的在线/离线安装脚本跑了很久也无法拉取到镜像&#xff0c;所以将以前的镜像打…

COMSOL -电力输电线的电场和磁场仿真

为确保电力输电线周围人员和环境的安全&#xff0c;工程师必须对电力线产生的电场和磁场进行监控。通过多物理场仿真&#xff0c;工程师能够预测电力线产生的场如何从电力线中扩散&#xff0c;以及如何影响其辐射至地面的强度。这篇文章&#xff0c;我们将使用两个示例模型来说…

性能评测系列:云架构扩展演进横向对比

原始测评报告 性能评测系列&#xff08;PT-010&#xff09;&#xff1a;Spring Boot RDS for MySQL&#xff0c;高并发insert 性能评测系列&#xff08;PT-012&#xff09;&#xff1a;Spring Boot(K8s多实例) RDS for MySQL&#xff0c;高并发insert 性能评测系列&#xff…

一年Java转GO|19K|腾讯 CSIG 一二面经

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 背景 学历&#xff1a;本科工作经验&#xff1a;一年(不算实习)当前语言&#xff1a;Javabase&#xff1a;武汉部门\岗位&#xff1a;腾讯云‍ 一…

Verilog刷题笔记48——FSM1型异步复位

题目: 解题&#xff1a; module top_module(input clk,input areset, // Asynchronous reset to state Binput in,output out);// parameter A0, B1; reg state, next_state;always (*) begin // This is a combinational always block// State transition logiccase(…