jjzjj

angular框架表格自定义导出,ui组件库为【devExpress by devExtreme】导出插件为exceljs、file-saver

百事可口 2023-09-01 原文

前言

  • 使用的ui组件库为devExtreme
  • 注意:如果你没有使用这个组件库,那后续的代码可能对你不适用!!!,因为devExtreme和exceljs是结合着来的


其地址如下:
devexpress
https://js.devexpress.com/

  • 导出使用的是ExcelJS


其地址如下:
exceljs
https://github.com/exceljs/exceljs/blob/master/README_zh.md

正文

安装exceljs

直接npm 或者yarn安装即可

引入到项目中

注意这里引入Workbook会报错,所以换了种引入方法引入exceljs.min.js,见下面代码
本项目版本

  • angular版本为8版本,
  • exceljs版本为^4.3.0,
  • devextreme版本为19.2.5",
  • “devextreme-angular”: “19.2.5”,
  • “file-saver”: “^2.0.5”,
  • “xlsx”: “^0.16.9”,
// import { Workbook } from 'exceljs';
import * as Excel from "exceljs/dist/exceljs.min.js";
import { saveAs } from 'file-saver';
import { exportDataGrid } from 'devextreme/exporter/exceljs/excelExporter';

引入好了之后 表格正常写 html 伪代码如下

<div class="data-grid-wrapper">
    <dx-data-grid #listInstance height="100%" id="gridContainer" [(dataSource)]="tableList" keyExpr="sowPigID"
        [columnAutoWidth]="true" [allowColumnReordering]="true" [showBorders]="true" [showRowLines]='true'
        [remoteOperations]="true" (onExporting)="onExporting($event)">
        <dxo-export [enabled]="true"></dxo-export>
        
        <dxi-column [fixed]="true" caption="xx号" dataField="sowEarNumber"></dxi-column>
        <dxi-column caption="xx状态" dataField="pigState"></dxi-column>
        
        <dxo-search-panel [visible]="false"></dxo-search-panel>
        <dxo-paging [pageIndex]="0" [enabled]="true" [pageSize]="20"></dxo-paging>
        <dxo-pager [allowedPageSizes]="[10, 15, 20, 50, 100]" infoText='当前为第{0}页 共{1}页 {2}条数据' [showInfo]="true"
            [showNavigationButtons]="true" [showPageSizeSelector]="true" [visible]="true">
        </dxo-pager>
    </dx-data-grid>
</div>

在html里有onExporting这个回调函数里写你的逻辑 具体配置项详见文档
伪代码如下,需要结合你自己的业务来

  /**
   * ExcelJs导出 配置项详见
   * https://github.com/exceljs/exceljs/blob/master/README_zh.md
   */
  onExporting(e) {
    const workbook = new Excel.Workbook();
    const worksheet = workbook.addWorksheet(this.row.PlanName);

    exportDataGrid({
      component: e.component,
      worksheet,
      topLeftCell: { row: 2, column: 1 },//用作导出起始位置的单元格。表格的位置 在下面第x行,第x列
      customizeCell: ({ gridCell, excelCell }) => {//表格内容,当前excel实例
        if (gridCell.rowType === 'data') {
          if (this.boarIdList.includes(gridCell.column.dataField)) {//动态列的id
            excelCell.value = parseInt(gridCell.value);

            //业务:xx值超过某个特定阈值后,用颜色高亮表示
            if ((parseInt(gridCell.value)) > (this.row.Threshold * 100)) {
              excelCell.font = {
                color: { argb: 'FFC0000' }, //一个包含 ARGB 值的对象
                bgColor: { argb: 'FF0000FF' }
              };
            }
            excelCell.alignment = { horizontal: 'left' };
          }
        }
      },
    }).then((cellRange) => {
      // header
      const headerRow = worksheet.getRow(1);// 获取一个行对象。如果尚不存在,则将返回一个新的空对象
      headerRow.height = 30;
      /**
       * 单元格合并函数(单元格的列号和行号都是从0开始计)
       * 按开始行,开始列,结束行,结束列合并(相当于 K10:M12)
        a 单元格的列号
        b 单元格的行号
        c 从单元格[a,b]起,向“右”合并的列数 注意c不是合并列的数量,而是列的下标数
        d 从单元格[a,b]起,向下合并到d行
       */
      worksheet.mergeCells(0, 0, 0, 10);

      headerRow.getCell(1).value = `温馨提示:日期为${this.row._DataDate},xxxxx伪代码xxxx自己业务`;
      headerRow.getCell(1).font = { name: '宋体', size: 11, 'color': { 'theme': 1 }, };
      headerRow.getCell(1).alignment = { horizontal: 'left', vertical: 'middle', };
    }).then(() => {
      workbook.xlsx.writeBuffer().then((buffer) => {
        saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `${this.row.PlanName}.xlsx`);
      });
    });
    this.isLoadPanelVisible = false
    e.cancel = true;
  }

有关angular框架表格自定义导出,ui组件库为【devExpress by devExtreme】导出插件为exceljs、file-saver的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  3. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  4. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  5. ruby CSV : How can I read a tab-delimited file? - 2

    CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|

  6. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  7. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  8. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  9. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  10. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

随机推荐