分类: 敏捷开发
2020-11-18 10:38:46
在企业财务工作中,每个财务周期都要制作资产负债表,周期分为月度、季度、年度。季度报表可由月度报表合并得来,年度报表可由季度报表合并而来。有些大企业有许多部门,各部门也有资产负债表,总公司的资产负债表可由各部门的合并得来。如果由人工来进行这种合并工作,不仅烦琐,还易出错。如果使用程序自动完成这种工作就会既高效又正确。本文将介绍 esProc SPL 编写的资产负债表合并代码示例。esProc 是专业的数据计算引擎,SPL 中提供了完善的 Excel 文件读写函数,做资产负债表合并非常容易。
资产负债表通常如下图:
表中红色字体单元格是由其它单元格数据计算得来的,合并时不用考虑这些格,只需合并黑色字体单元格的数据。
按时段合并时,合并报表的期初数为第一个时段的期初数,期末数为最后一个时段的期末数。如用1、2、3月的资产负债表合并一季度的报表时,期初数为1月的期初数,期末数为3月的期末数。
SPL代码:
|
A | B |
1 | =file("e:/资产负债表/1月.xlsx").xlsopen() | |
2 | =file("e: /资产负债表/3月.xlsx").xlsopen() | |
3 | =file("e: /资产负债表/一季度.xlsx") | |
4 | [C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C20,C21,C24,C25,C27,C29,C30,C31,C34,C35,C36,C40,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F22,F23,F24,F25,F26,F29,F33,F34,F36,F37,F38,F39] | |
5 | for A4 | =A2.xlscell(A5,1) |
6 |
|
=A1.xlscell(A5,1;B5) |
7 | =A3.xlswrite(A1) |
|
A1 打开1月份的资产负债表
A2 打开3月份的资产负债表
A3 指定合并后的资产负债表文件名
A4 列出要读取期末数的单元格名称
A5-B6 循环读取3月表中A4指定的单元格的期末数,并写入到1月表中的对应格
A7 将合并后的A1保存到A3指定的Excel合并文件中
合并不同部门时,合并报表的期初数为各部门期初数之和,期末数也为各部门期末数之和。
SPL代码示例:
|
A | B | C |
1 | [e:/资产负债表/部门1.xlsx,e:/资产负债表/部门2.xlsx,e:/资产负债表/部门3.xlsx] | ||
2 | =file("e:/资产负债表/公司总表.xlsx") | ||
3 | =A1.(file(~).xlsopen()) | ||
4 | [B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B20,B21,B24,B25,B27,B29,B30,B31,B34,B35,B36,B40,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C20,C21,C24,C25,C27,C29,C30,C31,C34,C35,C36,C40,E5,E6,E7,E8,E9,E10,E11,E12,E13,E14,E15,E16,E17,E18,E22,E23,E24,E25,E26,E29,E33,E34,E36,E37,E38,E39,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F22,F23,F24,F25,F26,F29,F33,F34,F36,F37,F38,F39] | ||
5 | for A4 | >v=0 |
|
6 |
|
for A3 | =B6.xlscell(A5,1) |
7 |
|
|
>v+=if(C6==null,0,float(C6)) |
8 |
|
if v==0 | >A3(1).xlscell(A5,1;null) |
9 |
|
else | >A3(1).xlscell(A5,1;string(v)) |
10 | =A2.xlswrite(A3(1)) |
|
|
A1 列出各部门资产负债表文件名
A2 指定合并后的资产负债表文件名
A3 打开各部门资产负债表文件
A4 列出要读取数据的单元格名称
A5-C9 循环要读取的单元格,从各部门表中读取当前格数据(没填计0),并累加到变量v,将累加后的v写入到第一个部门表的对应格中(v为0时将单元格置空)。
A10 将保存了合并后值的第一部门表保存到A2指定的Excel合并文件中