实现基于纯前端Excel表格控制报表、现金流量表或财务状况变动表、附表和附注的在线损益表应用。财务报表是财务报告的主体部分,不包括财务报告或年度报告中的董事报告、管理层分析和财务报表等。为了全面、系统地揭示企业一定时期内的财务状况、经营成果和现金流量,财务报表必须按照财政部会计准则的标准格式进行设计。因此,财务报表的典型特征是数据更新频繁、分析维度多、数据来源复杂,传统的报表工具很难同时满足以上所有要求。借助控件设计财务报表模板,在满足财务数据展示、计算和决策分析的同时,提供类Excel的用户体验,并可直接复用财务系统原有的Excel报表模板,减少局部到网上。数据迁移工作量。下面将介绍如何在纯前端环境下使用纯前端窗体控件制作损益表并添加到您的web项目中。本文使用数据透视表和数据透视表切片器创建动态损益表报表并与之交互。最终效果如图:创建损益表的一般步骤如下。文中每个步骤都提供了可视化交互和编码两种实现方式:设置数据成数据透视表、构建数据透视表、添加计算项、添加计算字段、添加切片器一些外观调整生成报表单击此处下载完整的演示。设置数据我们需要做的第一件事是确保原始数据采用表格格式。这意味着数据满足以下条件:原始数据被组织成标准表;每列代表一个字段;没有空白行或列;数据中没有小计、合计等二次计算。在这个例子中,我们添加了AccountGroup列来表示报表的不同部分,并将包含数据的表命名为tblIncome。插入数据透视表设计器组件可以用来实现可视化操作。下载完成后,从“\SpreadJS.Release.x.x.x\Designer\DesignerRuntime”文件夹安装设计器,然后按照以下步骤插入数据透视表:在插入选项卡中选择tblIncome表,点击数据透视表,选择“NewWorksheet”确认或者,以上操作也可以通过编写javascript代码实现,参考如下代码:letpivotTable=sheet.pivotTables.add("myPivotTable","tblIncome",1,1);构建数据透视表为了准确地构建数据透视表,我们将使用数据透视表面板。如果您在此处使用SpreadJS设计器,则每次单击数据透视表时,面板都会出现在工作表的右侧。将它添加到javascript实例中:varpt=spread.getActiveSheet().pivotTables.all()[0];varpanel=newGC.Spread.Pivot.PivotPanel('myPivotPanel',pt,document.getElementById("panel"));panel.sectionVisibility(GC.Spread.Pivot.PivotPanelSection.fields|GC.Spread.Pivot.PivotPanelSection.area);````现在将字段拖放到右侧区域以构建数据透视表。在我们的示例中:将帐户组和帐户字段添加到行,将实际值和预算添加到值。注意:数据透视表可以在没有数据透视面板的情况下工作,我们只是添加它以方便使用。####添加计算项除了数据透视表字段中的现有项外,还支持使用自定义公式创建一个或多个计算项。1.单击数据透视表分析2.字段、项目和集合→计算项3.设置名称3.毛利并作为公式:='AccountGroup'['1.Revenue']-'AccountGroup'['2.CostofGoodsSold']或者使用一行代码添加计算项:pivotTable.addCalcItem("AccountGroup","3.GrossProfit","='AccountGroup'['1.Revenue']-'AccountGroup'['2.COGS']");按照上述步骤添加其他计算项。这些公式如下表所示:这将使我们的损益表更具可读性。####添加计算字段损益表通常使用ANOVA进行性能比较。当实际收入回报高于预算预测或支出低于预算时,预算变化是积极的或有利的。我们将使用“计算字段”功能将方差和方差百分比添加到我们的数据透视表。1.单击数据透视表分析。2.字段、项目和集合→计算字段。3.为计算字段设置名称差异。4.要向公式中添加字段,请选择该字段并单击“插入字段”。5.单击添加按钮。或者用JavaScript实现:pivotTable.addCalcField('diff','=Actual-Budget');pivotTable.add("差异","差异",GC.Spread.Pivot.PivotTableFieldType.valueField);pivotTable.addCalcField('diff%','=Actual/Budget-1');pivotTable.add("diff%","差异%",GC.Spread.Pivot.PivotTableFieldType.valueField);我们添加的两个字段是Difference和Difference%。使用的公式如下:####AddSlicerSlicerasafilterforpivottablenewfunction.使用此功能按地区和财政年度过滤数据。如果使用设计器,请执行以下操作:1.单击数据透视表分析2.插入切片器3.选择地区和会计年度或在JavaScript中实现:varregionSlicer=sheet.slicers.add("Region",pivotTable.name(),"Region",GC.Spread.Sheets.Slicers.SlicerStyles.dark1(),GC.Spread.Sheets.Slicers.SlicerType.pivotTable);varyearSlicer=sheet.slicers.add("财政年度",pivotTable.name(),"财政年度",GC.Spread.Sheets.Slicers.SlicerStyles.dark4(),GC.Spread.Sheets.Slicers.SlicerType.pivotTable);###进行一些外观调整以使数据透视表更易于阅读,例如:####折叠计算项这将隐藏聚合帐户以显示计算项的值。####在组1的顶部显示小计。转到设计选项卡2。单击小3.选择“Showallsubtotalsattopofgroup”####在每一项后插入空白行1.进入设计选项卡2.点击空白行3.选择“在每个项目后插入空白行”###隐藏按钮和字段标题1.进入数据透视表分析选项卡2.点击按钮和字段标题####更改透视布局1.转到“设计”选项卡2.单击“报表布局”3.选择“在大纲中显示”上面提到的修改可以通过代码轻松更改。SpreadJS提供了许多不同的选项来根据您的应用程序的需要自定义数据透视表的外观和功能。我们可以像这样更改数据透视表选项和布局:subtotalsPosition:GC.Spread.Pivot.SubTotalsPosition.top,//在组的顶部显示小计*displayFieldsInPageFilterArea:GC.Spread.Pivot.DisplayFields.downThenOver,reportFilterFieldsPerColumn:1,bandRows:true,bandColumns:true,showRowHeader:true,showColumnHeader:true,showDrill:true,//折叠按钮*showMissing:true,showToolTip:true,missingCaption:'something',fillDownLabels:false,repeatAllItemLabels:false,rowLabelIndent:4,mergeItemshowHeader:fals,//折叠字段标题*};pivotTable.layoutType(1);//将数据透视表布局更改为大纲表格*条件和自定义格式接下来,数据透视表字段将被格式化。在这里您可以使用数据透视面板设置格式,如下所示:1.转到值->值字段设置2.单击数字格式3.设置格式。在我们的示例中:$#,##04。确认如果你想通过代码做到这一点,请看下面://identifytheareavarareaActual={dataOnly:true,引用:[{fieldName:"Actual",items:[fieldName]}]};varstyle=newGC.Spread.Sheets.Style();style.formatter="$#,##0";//给区域设置样式apivotTable.setStyle(areaActual,style);我们可以对其他字段使用相同的逻辑。使用下表对应的格式:这里建议使用条件格式,方便浏览者查看最大帐户。数据透视表提供了为指定维度设置条件规则的能力。条件规则仅考虑指定的维度,而不管数据透视表布局中的更改。如果使用设计器,请按照以下步骤添加条件格式规则:1.选择单元格:G7:H112。首页→条件格式→新规则3.选择“根据单元格的值设置所有单元格的格式”4.格式样式:2色标(蓝色表示最高值,白色表示最低值)对其他账户组重复同样的操作,记得用黄色代表支出,用蓝色代表收入。####生成报表下面是我们制作的损益表报表截图:以上是如何使用SpreadJS一个纯前端表单控件生成所需的财务报表,以支持企业的财务应用。更多纯前端表格在线demo示例:https://demo.grapecity.com.cn/spreadjs/gc-sjs-samples/index.html纯前端表格应用场景:https://www.grapecity。com.cn/developer/spreadjs#scenariosMobile示例(扫码体验):http://demo.grapecity.com.cn/spreadjs/mobilesample/
