基于纯前端类Excel表格控件实现在线损益表应用

基于,前端,excel,表格,控件,实现,在线,损益表,应用 · 浏览次数 : 789

小编点评

**步骤 1:准备数据** * 收集要绘制数据的列名称。 * 创建一个数据表格对象,并将其赋值数据。 **步骤 2:添加数据字段** * 使用 `pivotTable.addColumn()` 方法添加数据字段。 * 设置字段格式,例如设置数据类型。 **步骤 3:添加数据源** * 使用 `pivotTable.setDataProvider()` 方法添加数据源。 * 设置数据源的格式,例如设置数据类型。 **步骤 4:添加图表类型** * 选择图表类型,例如图表类型。 * 设置图表属性,例如数据源、格式等。 **步骤 5:设置数据格式** * 使用 `pivotTable.options` 对象设置图表格式。 * 例如,设置字体、颜色等。 **步骤 6:设置条件格式** * 使用 `pivotTable.options` 对象设置条件格式。 * 例如,根据单元格的值设置颜色或格式。 **步骤 7:添加切片器** * 使用 `pivotTable.addSlicer()` 方法添加切片器。 * 设置切片器的属性,例如地区、时间等。 **步骤 8:生成报告** * 使用 `pivotTable.render()` 方法绘制图表。 * 可以使用 `pivotTable.toImage()` 方法导出图表为图片。 **示例代码** ```javascript // 获取数据列名称 const fieldNames = ['日期', '客户名称', '商品名称', '价格']; // 创建数据表格对象 const pivotTable = new GC.Spread.PivotTable({ data: data, fieldNames: fieldNames, // 设置图表类型 type: 'line', // 设置数据源 dataProvider: dataProvider, // 设置数据格式 options: { width: 600, height: 400, pointSize: 5, }, }); // 添加数据字段 pivotTable.addColumn({ field: '日期', dataIndex: 0, dataType: 'date', }); // 添加数据字段 pivotTable.addColumn({ field: '客户名称', dataIndex: 1, dataType: 'string', }); // 添加数据字段 pivotTable.addColumn({ field: '商品名称', dataIndex: 2, dataType: 'string', }); // 添加数据字段 pivotTable.addColumn({ field: '价格', dataIndex: 3, dataType: 'number', }); // 添加图表类型 pivotTable.addType({ type: 'line', label: '价格 vs 日期', }); // 设置数据格式 pivotTable.options.displayLegend = false; // 设置条件格式 pivotTable.options.filters = [ { field: '价格', operator: 'gt', value: 100, }, ]; // 添加切片器 pivotTable.addSlicer({ field: '地区', type: 'dropdown', choices: ['地区1', '地区2', '地区3'], }); // 添加切片器 pivotTable.addSlicer({ field: '日期', type: 'dateRange', start: '2023-01-01', end: '2023-12-31', }); // 生成报告 pivotTable.render(); ```

正文

财务报表也称对外会计报表,是会计主体对外提供的反映企业或预算单位一定时期资金、利润状况的会计报表,由资产负债表、损益表、现金流量表或财务状况变动表、附表和附注构成。财务报表是财务报告的主要部分,不包括董事报告、管理分析及财务情况说明书等列入财务报告或年度报告的资料。

为了全面系统地揭示企业一定时期的财务状况、经营成果和现金流量,财务报表需按财政部会计准则的标准格式设计,因此,财务报表的典型特征是数据更新频繁、分析维度多、数据来源复杂,常规的报表工具很难同时满足上述所有需求。
而借助控件设计财务报表模板,可以在满足财务数据展示、计算、决策分析的同时,提供如 Excel 一般的使用体验,并可直接复用财务系统原始的 Excel 报表模板,减少从本地到线上的数据迁移工作量。

下面将会给大家展示如何在纯前端环境中,利用纯前端表格控件创建损益表,并将其添加到你的Web项目中。本文将使用 PivotTables(数据透视表)和 PivotTables Slicer(数据透视表切片器)来创建动态的损益表报告并与之交互。最终效果如图:

创建损益表大致步骤如下,文中针对每一步操作,都提供了可视化交互和编码两种实现方式:

  1. 设置数据
  2. 插入数据透视表
  3. 构建数据透视表
  4. 添加计算项
  5. 添加计算字段
  6. 添加切片器
  7. 进行一些外观调整
  8. 生成报告

点击此处下载完整Demo

设置数据

我们需要做的第一件事就是确保原始数据采用表格格式。这表示数据符合以下条件:

  1. 把原始数据整理成标准的表格;
  2. 每个列代表一个字段;
  3. 没有空白行或列;
  4. 数据中没有小计、总计这类二次计算的内容。

在此示例中,我们添加了 Account Group 列来表示报告的不同部分,并将包含数据的表命名为 tblIncome。

插入数据透视表

使用设计器组件可以实现可视化操作,下载完成后,从“\SpreadJS.Release.x.x.x\Designer\Designer Runtime”文件夹安装设计器,然后按照以下步骤插入数据透视表:

  1. 选择 tblIncome 表
  2. 在插入选项卡上单击数据透视表
  3. 选择“新工作表”
  4. 最后确定

或者,以上操作也可以通过编写javascript代码实现,参考以下代码:

let pivotTable = sheet.pivotTables.add("myPivotTable", "tblIncome", 1, 1);

构建数据透视表

为了准确构建数据透视表,我们将使用数据透视表面板。如果这里使用的是SpreadJS设计器,则每次单击数据透视表时,面板都会显示在工作表的右侧。

使用以下代码将其添加到 javascript 实例中:

var pt = spread.getActiveSheet().pivotTables.all()[0]; 
var panel = new GC.Spread.Pivot.PivotPanel('myPivotPanel', pt, document.getElementById("panel")); 
panel.sectionVisibility(GC.Spread.Pivot.PivotPanelSection.fields |GC.Spread.Pivot.PivotPanelSection.area);

现在拖放右侧区域的字段以构建数据透视表。在我们的示例中:将 Account Group 和 Account 字段添加到 Rows,并将 Actual 和 Budget 添加到 Values。

注意:数据透视表可以在没有数据透视面板的情况下工作,我们只是添加了它以方便使用。

添加计算项

除了数据透视表字段中的现有项目外,这里还支持使用自定义公式创建一个或多个计算项目。

  1. 单击数据透视表分析
  2. 字段、项目和集合 → 计算项目
  3. 设置名称 3. Gross Profit 并作为公式:='Account Group'['1.收入']-'账户组'['2.销货成本']

或者使用一行代码就可以添加计算项目:

pivotTable.addCalcItem("Account Group", "3. Gross Profit","='Account Group'['1. Revenue']-'Account Group'['2. COGS']");

按照上述步骤添加其他计算项。这些公式如下表所示:

这将使我们的损益表可读性更好。

添加计算字段

损益表经常使用方差分析进行业绩比较。当实际收入回报高于预算预测或费用低于预算时,预算变化是积极的或有利的。

我们将使用计算字段功能在数据透视表中添加差异和差异百分比。

  1. 单击数据透视表分析。
  2. 字段、项目和集合 → 计算字段。
  3. 设置计算字段的名称差异。
  4. 要在公式中添加字段,请选择该字段,然后单击“插入字段”。
  5. 单击添加按钮。

或用JavaScript实现:

pivotTable.addCalcField('diff', '=Actual-Budget'); 
pivotTable.add("diff", "Difference", GC.Spread.Pivot.PivotTableFieldType.valueField); 

pivotTable.addCalcField('diff%', '=Actual/Budget-1'); 
pivotTable.add("diff%", "Difference %", GC.Spread.Pivot.PivotTableFieldType.valueField);

我们添加的两个字段是差异和差异 %。使用的公式如下:

添加切片器

切片器作为用于过滤数据透视表的新功能。使用此功能按地区和财政年度过滤数据。

如果使用的是设计器,执行以下操作:

  1. 单击数据透视表分析
  2. 插入切片器
  3. 选择地区和财政年度

或使用JavaScript实现:

var regionSlicer = sheet.slicers.add("Region", pivotTable.name(), "Region", GC.Spread.Sheets.Slicers.SlicerStyles.dark1(), GC.Spread.Sheets.Slicers.SlicerType.pivotTable); 
var yearSlicer = sheet.slicers.add("Financial Year", pivotTable.name(), "Financial Year", GC.Spread.Sheets.Slicers.SlicerStyles.dark4(), GC.Spread.Sheets.Slicers.SlicerType.pivotTable);

进行一些外观调整

为了使数据透视表更易于阅读,这里进行了一些调整,例如:

折叠计算项

这将隐藏汇总的帐户以显示计算项目的值。

在组顶部显示小计

  1. 转到设计选项卡
  2. 单击小计
  3. 选择“在组顶部显示所有小计”

在每个项目后插入空行

  1. 转到设计选项卡
  2. 单击空白行
  3. 选择“在每个项目后插入空白行”

隐藏按钮和字段标题

  1. 转到数据透视表分析选项卡
  2. 单击按钮和字段标题

更改枢轴布局

  1. 转到设计选项卡
  2. 单击报告布局
  3. 选择“以大纲形式显示”

上面提到的修改可以通过代码轻松更改。 SpreadJS 提供了许多不同的选项来根据应用程序的需要自定义数据透视表的外观和功能。我们可以更改数据透视表选项和布局,如下所示:

let option = pivotTable.options;
option = {
        allowMultipleFiltersPerField: true,
        insertBlankLineAfterEachItem: true, // Insert Blank Line after Each Item *
        grandTotalPosition: GC.Spread.Pivot.GrandTotalPosition.row,
        subtotalsPosition: GC.Spread.Pivot.SubTotalsPosition.top, // Show SubTotals at the Top of the Group *
        displayFieldsInPageFilterArea: GC.Spread.Pivot.DisplayFields.downThenOver,
        reportFilterFieldsPerColumn: 1,
        bandRows:true,
        bandColumns: true,
        showRowHeader: true,
        showColumnHeader: true,
        showDrill: true, // Collapse Buttons *
        showMissing: true,
        showToolTip: true,
        missingCaption: 'something',
        fillDownLabels: false,
        repeatAllItemLabels: false,
        rowLabelIndent: 4,
        mergeItem: false,
        showHeaders: true // Collapse Field Headers *
    };
pivotTable.layoutType(1); // Change the Pivot Layout to Outline Form *

条件和自定义格式
接下来,将格式化数据透视表字段。这里可以使用如下所示的数据透视面板设置格式:

  1. 转到值 - > 值字段设置
  2. 单击数字格式
  3. 设置格式。在我们的例子中:$#,##0
  4. 确认

如果想通过代码执行此操作,请参见下文:

//identify the area
var areaActual= {
            dataOnly: true,
            references: [
                {
                    fieldName: "Actual",
                    items: [fieldName]
                }
            ]
        };
 
var style = new GC.Spread.Sheets.Style();
style.formatter = "$#,##0";
//set style to the area
pivotTable.setStyle(areaActual, style);

我们可以对其他字段使用相同的逻辑。使用下表对应的格式:

这里推荐使用条件格式,以使查看者更快地查看最大的帐户。数据透视表提供了为指定维度设置条件规则的能力。无论数据透视表布局如何变化,条件规则都只遵循指定的维度。

如果使用设计器,按照以下步骤添加条件格式规则:

  1. 选择单元格:G7:H11
  2. 主页 → 条件格式 → 新规则
  3. 选择“根据单元格的值格式化所有单元格”
  4. 格式样式:2 色标度(蓝色表示最高值,白色表示最低值)

对其他帐户组重复相同的操作,记住使用黄色作为费用和蓝色作为收入。

生成报告

下面是我们制作好的损益表报告截图:

以上就是如何使用 SpreadJS 纯前端表格控件,来生成所需的财务报告来支撑企业的财务应用。

更多纯前端表格在线demo示例 :https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html
纯前端表格应用场景:https://www.grapecity.com.cn/developer/spreadjs#scenarios
移动端示例(可扫码体验):http://demo.grapecity.com.cn/spreadjs/mobilesample/

与基于纯前端类Excel表格控件实现在线损益表应用相似的内容:

基于纯前端类Excel表格控件实现在线损益表应用

财务报表也称对外会计报表,是会计主体对外提供的反映企业或预算单位一定时期资金、利润状况的会计报表,由资产负债表、损益表、现金流量表或财务状况变动表、附表和附注构成。财务报表是财务报告的主要部分,不包括董事报告、管理分析及财务情况说明书等列入财务报告或年度报告的资料。 为了全面系统地揭示企业一定时期的

提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件

Chrome插件,官方名称extensions(扩展程序);为了方便理解,以下都称为插件。 我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开开发者模式。点击"加载已解压的拓展程序,选择项目文件夹,就可将开发中的插件加载进来。 插件是基于We

在线Excel的分权限编辑

> 摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:[葡萄城官网](https://www.grapecity.com.cn/),葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 在表格类填报需求中,根据当前登录用户的不同等级,能填报的区域会有所不同。本文基于前端表格控件

一篇带你了解如何使用纯前端类Excel表格构建现金流量表

现金流量表(Cash Flow Statement),是指反映企业在一定会计期间现金和现金等价物流入和流出的报表。现金流量表是企业财务报表的三个基本报告之一(另外两个是资产负债表和损益表)。 为了全面系统地揭示企业一定时期的财务状况、经营成果和现金流量,财务报表需按财政部会计准则的标准格式设计,因此

基于.NetCore开发博客项目 StarBlog - (24) 统一接口数据返回格式

## 前言 开发接口,是给客户端(Web前端、App)用的,前面说的RESTFul,是接口的规范,有了统一的接口风格,客户端开发人员在访问后端功能的时候能更快找到需要的接口,能写出可维护性更高的代码。 而接口的数据返回格式也是接口规范的重要一环,不然一个接口返回JSON,一个返回纯字符串,客户端对接

crm--纯后端部署

博客地址:https://www.cnblogs.com/zylyehuo/ 技术栈:supervisor + nginx + uwsgi + django + virtualenv + mariadb 基本流程 crm 纯后端部署是通过模板语言进行和前端通信的,前端代码写在后端中

基于.NetCore开发博客项目 StarBlog - (26) 集成Swagger接口文档

## 前言 这是StarBlog系列在2023年的第一篇更新😃~ 在之前的文章里,我们已经完成了部分接口的开发,接下来需要使用 curl、Postman 这类工具对这些接口进行测试,但接口一多,每次测试都要一个个填入地址和对应参数会比较麻烦… 我们需要一种直观的方式来汇总项目里的所有接口,并且如果

SpringBoot中几种好用的代码生成器(基于Mybatis-plus生成entity、mapper、xml等)

前言 熟悉Spring框架的同学一定都知道MVC开发模式吧,控制器(Controller)、业务类(Service)、持久层(Repository)、数据库映射(Mapper)、各种DO类构成了我们服务端的代码。初学的时候,觉得新鲜手写这些东西不觉得有啥,但是写久了就会觉得很烦。好不容易在数据库中写

SPI在Java中的实现与应用 | 京东物流技术团队

1 SPI的概念 API API在我们日常开发工作中是比较直观可以看到的,比如在 Spring 项目中,我们通常习惯在写 service 层代码前,添加一个接口层,对于 service 的调用一般也都是基于接口操作,通过依赖注入,可以使用接口实现类的实例。 简单形容就是这样的: 图1:API 如上图

撮合前端平台在低代码平台的落地实践

基于传统认知,前端产品直接触达消费者,往往具有高度的定制化、需求变更频繁等特点,要求具有很好的动态性, 能够满足不同客户的需求。那么能否建设类似的前端中台产品,我们姑且称之为“前端领域产品”,实现接入团队端到端能力复用呢?我们在撮合业务线中进行了一系列思考和探索。