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

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

  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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用North自部署图床服务

图床 图床可以把图片转为链接&#xff0c;从而方便我们书写、分享博客&#xff0c;目前图床主要分为以下几类: 利用 Git 仓库存储对象存储&#xff08;OSS、COS、七牛云等&#xff09;免费公共图床&#xff08;SM.MS、聚合图床、ImgTP、Postimage等&#xff09; 但上述图床都…

2024软件设计师笔记之考点版(一考就过):11-25

软件设计师之一考就过:成绩版 考点11:防火墙、入侵检测 真题1:(专家系统、模型检测、简单匹配)属于入侵检测;而漏洞扫描不属于。 真题2:防火墙特性包括(控制进出网络的数据包和数据流向、提供流量信息的日志和审计、隐藏内部IP以及网络结构细节),但不包括提供漏洞扫…

恋爱脑?No,爱情保镖还得靠AI!

本文由 ChatMoney团队出品 你是否曾经想过&#xff0c;为什么我们会在恋爱中变得如此“上头”&#xff0c;仿佛整个世界都围绕着那个TA旋转? 恋爱脑&#xff0c;通常是指一个人在恋爱中过度投入、过度依赖对方&#xff0c;甚至无法自拔的心理状态。 你会发现自己时时刻刻都在…

屏幕翻译下载哪个软件好?好用的屏幕翻译推荐

想象一下&#xff0c;当我们在阅读外文文档或是观看外语电影时&#xff0c;如果能有一款翻译工具同步提供译文&#xff0c;那将是多么令人愉悦的体验&#xff01; 如果这种翻译服务能够在不影响其他应用的情况下进行&#xff0c;那就是double快乐了。 其实&#xff0c;现在要…

分享一套基于SSM的美食推荐管理系统(源码+文档+部署)

大家好&#xff0c;今天给大家分享一套基于SSM的美食推荐管理系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMvcMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 博主介绍&#xff1a; 一名Java全栈工程师&#xff0c;专注于Jav…

各大广告商竞相厮杀下,诞生了一个偏门的副业方式

前段时间&#xff0c;想买摩托车&#xff0c;但是媳妇不让买&#xff0c;所以我打算偷偷买&#xff0c;然后萌生了去摆摊赚钱的想法&#xff0c;但是还没有实施就在网上接触到了“某赚”APP&#xff0c;于是一发不可收拾&#xff0c;用我的话来说&#xff0c;我做的不是副业&am…

腾讯云 轻量应用服务器 部署私有化大模型

1. 进入控制台后,找到我们购买的服务器,然后点击登录 服务器 - 轻量云 - 控制台 (tencent.com) 2. 安装系统 面板输入 curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh 命令解释: 从F…

解密城市酷选为何异军突起!打造消费新潮流的排队免单模式

一、城市酷选平台简介 在数字化浪潮席卷全球的今天&#xff0c;城市酷选作为一个前沿的消费平台&#xff0c;凭借其独特的排队免单模式&#xff0c;成功吸引了众多消费者和商家的目光。该平台不仅整合了线上线下的资源&#xff0c;更通过数字化手段&#xff0c;为消费者提供了…

一文读懂RSTP流媒体传输原理

什么是流&#xff1f; 流&#xff08;Streaming&#xff09;&#xff1a;近年在Internet上出现的新概念&#xff0c;定义非常广泛&#xff0c;主要是指通过网络传输多媒体数据的技术总称。 流式传输分为两种&#xff1a;顺序流式传输 (Progressive Streaming)和实时流式传输 (R…

408数据结构-图的应用1-最小生成树 自学知识点整理

前置知识&#xff1a;图的遍历 图的应用是408初试历年考查的重点。不过一般而言&#xff0c;这部分内容直接以算法设计题形式考查的可能性极小&#xff0c;更多的是结合图的实例来考查算法的具体操作过程&#xff0c;要求掌握的是手推模拟给定图的各个算法执行过程。此外&#…

华为Pura70支持5G功能吗?看完你就清楚了

随着 5G 技术的普及&#xff0c;现在智能手机市场中的大部分新品都已经支持 5G 网络。相较于 4G&#xff0c;5G 不仅带来了更快的网速&#xff0c;更为用户带来了全新的使用体验。 然而&#xff0c;华为作为智能手机市场的佼佼者&#xff0c;其产品线中的部分手机在配置上却有…

程序运行包与源码的区别

在软件开发和信息技术领域&#xff0c;程序运行包&#xff08;Executable Package&#xff09;与源码&#xff08;Source Code&#xff09;是两个至关重要的概念。它们各自在软件开发、部署和维护过程中扮演着不同的角色&#xff0c;且有着显著的区别。本文旨在深入探讨程序运行…

数字图像分析(第二部分)

文章目录 第8章 图像分割图像分割定义阈值分割依赖像素的阈值选取Otsus方法依赖区域的阈值选取依赖坐标的阈值选取变化阈值法区域生长法分裂合并方法分水岭算法聚类分割算法K-meansAP算法Graph cut第9章 图像特征表达基于全局特征的图像表达直方图GIST基于局部特征的图像表达简…

【ppt技巧】有哪些方法可以实现?PPT转换为图片!

将ppt文件转换为图片都有哪些方法可以实现&#xff1f;其实很简单&#xff0c;一起来看一下如何操作吧&#xff01; 方法一&#xff1a; 使用格式转换器&#xff0c;有些文件格式转换器&#xff0c;支持ppt转换为图片。 方法二&#xff1a; 不需要转换器&#xff0c;直接在…

最长上升子序列模型——AcWing 272. 最长公共上升子序列

最长上升子序列模型 定义 给定一个序列&#xff0c;如整数序列或字符序列&#xff0c;最长上升子序列是指其中最长的子序列&#xff0c;满足子序列中的元素依次递增。最长上升子序列模型是一种在给定序列中寻找最长上升子序列的问题模型。 运用情况 该模型常用于解决与序列…

44岁过气港姐晚晚熬通宵开直播,情路坎坷生两胎老公身份成迷

曾经的「9料」港姐冠军杨思琦近年将工作重心转向内地&#xff0c;狠心抛下一儿一女在香港&#xff0c;只身一人定居广州靠当主播维持生计。 相信有不少网友都留意到&#xff0c;杨思琦几乎晚晚都通宵直播&#xff0c;睡觉前看她在卖力劲歌热舞与其他直播主PK赚钱&#xff0c;一…

jenkins环境搭建--关于jenkins在Ubuntu下的安装篇(一)

在ubuntu下使用命令进行下载安装包&#xff1a; 关于jenkins的安装有多种&#xff0c;可以借助docker容器进行安装&#xff0c;也可以通过传统方法手动一步步的进行安装&#xff0c;以下介绍手动一步步的安装方法&#xff0c;后续我们将解释关于jenkins的相关配置以及实战使用…

Linux系统中文件权限详解

一、Linux文件权限设计 Linux系统中任何内容都可以用文件表示&#xff0c;其对文件设计了一套权限进行管理&#xff1b;文件权限共有11个字符&#xff0c;从左向右共分为5段&#xff08;每段的具体说明如下表Linux权限设计说明所示&#xff09;&#xff1a; Linux权限设计说明 …

基于SSM+Jsp的雅博书城在线系统

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

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4141(SPI接口)的数字电位器Proteus仿真

一、仿真原理图: 二、运行效果: 三、软件部分: 1)、SPI读写: 2)、初始化部分: void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB busses clocks …