具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
本发明实施例提供了一种数据处理系统,以下对本发明实施例所提供的数据处理系统进行介绍。
图1是根据本发明实施例的数据处理系统的结构框图。
如图1所示,该数据处理系统包括读取单元11、第一获取单元12、第二获取单元13和写入单元14。
读取单元11用于读取数据表中的目标数据。
第一获取单元12用于获取用户在数据表中设置的标识符,其中,标识符对应于目标数据,不同的标识符对应不同的目标数据。
第二获取单元13用于获取标识符在目标文档中对应的目标位置,其中,在目标文档中,不同的标识符对应不同的预设的目标位置。
目标文档可以位于处理系统内,也可以位于处理系统外,因此,目标位置既可以是本处理系统中的位置,也可以是其他数据表中的位置。例如,通过处理系统对Excel中的数据进行处理,那么目标位置既可以是处理系统中的位置,也可以是其他数据表中的位置。
写入单元14用于将目标数据写入对应的目标位置。
在本实施例中,由于对目标数据设置了标识符并预先设定了标识符对应数据在目标文档中的位置,从而可以在获取标识符后,自动将标识符对应的数据映射到目标文档中,该步骤取代了人工手工录入数据的操作,进而达到了提高数据处理效率的效果。
具体地,数据表的目标数据可以包括第一数据和第二数据,第一获取单元还用于在数据表中获取用户设置的第一标识符和第二标识符,其中,第一标识符对应于第一数据,第二标识符对应于第二数据,第二获取单元还用于获取第一标识符在目标文档中对应的第一位置以及第二标识符在目标文档中对应的第二位置。
本发明实施例还提供了一种数据处理方法,该方法可以基于上述的装置来执行。
图2是根据本发明实施例的数据处理方法的流程图。
如图2所示,该数据处理方法包括如下的步骤S202至步骤S208。
步骤S202,读取数据表中的目标数据。
具体的,由于一个数据表中可以包括多个工作表(sheet),因此可以先读取数据表中的工作表,然后在读取工作表中的数据。
步骤S204,获取用户在数据表中设置的标识符,其中,标识符对应于目标数据,不同的标识符对应不同的目标数据。
数据表中可以包括多种目标数据,即,目标数据包括第一数据和第二数据,相应地,在本步骤中,可以获取用户在数据表中设置的第一标识符和第二标识符,其中,第一标识符对应于第一数据,第二标识符对应于第二数据。标识符用于标记表格中的数据,因此,每个标识符和该标识符所标记的数据存在对应关系。
步骤S206,获取标识符在目标文档中对应的目标位置,其中,在目标文档中,不同的标识符对应不同的预设的目标位置。
具体地,可以获取第一标识符在目标文档中对应的第一位置以及第二标识符在目标文档中对应的第二位置。
同种标识符均能用来区分不同的数据,例如,设置不同的字体,设置不同的字号,或者对一种类型的数据设置字体加粗,对另一种类型的数据设置字体倾斜等等。只要设置不同的标识符,均能起到将不同类型的数据对应到不同位置的目的,在本实施例中,为了使不同类型数据的区别更加明显,可以用不同的填涂颜色作为不同的标识符,即,第一标识符为第一颜色,第二标识符为第二颜色,在本步骤中,可以获取第一颜色在目标文档中对应的第一位置以及第二颜色在目标文档中对应的第二位置。例如,预先设置数据表中填涂黄色的数据为时间,填涂绿色的数据为金额,那么数据表中填涂黄色的数据与目标文档中表征时间的位置对应,填涂绿色的数据与目标文档中表征金额的位置对应。
步骤S208,将目标数据写入对应的目标位置。
仍以颜色作为标识符的具体事例对本步骤进行描述,当上述步骤已经确定填涂黄色的数据与目标文档中表征时间的位置对应时,直接将填涂黄色的数据写入目标文档中的对应位置即可。
为了保证数据写入的准确性,在在将目标数据写入对应的目标位置之前,还可以先获取标识符对应的数据的格式,并判断目标数据的格式是否满足标识符对应的数据的格式,当目标数据的格式满足标识符对应的数据的格式时,将目标数据写入对应的目标位置。相反地,当目标数据的格式不满足标识符对应的数据的格式时,生成错误消息或停止读取目标数据,其中,错误消息用于提示用户读取目标数据时发生错误。
为了进一步保证数据写入的准确性,在在将目标数据写入对应的目标位置之后,还可以获取第一数据和第二数据的匹配关系,并检测目标文档中的第一数据和第二数据是否满足匹配关系。例如,填涂红色的数据为起始时间,填涂蓝色的数据为结束时间,起始时间必然早于结束时间,因此,可以在目标文档中检测起始时间是否早于结束时间,从而判断数据的写入是否正确。
图3是根据本发明优选实施例的数据处理方法的流程图。在该实施例中,以将EXCEL文档中的数据转移到XBRL财务数据中为例,对本实施例提供的方法进行具体描述。
如图3所示,该数据处理方法包括如下的步骤S301至步骤S310。
步骤S301,加载Excel文件。
具体地,可以使用JavaAPI提供的文件输出流java.io加载一个后缀名为.xslx的文件到Java文件系统中,从而获取需要POI读取该Excel文件。
步骤S302,读取Excel工作表(sheet)。
在Excel中,财务数据可能存储在多个工作表中,利用POI提供的读取sheet表功能可以遍历所有已存在的工作表,并读取工作表名称作为数据集合中的主要索引。主要索引的功能是搜索已读取已采集的财务数据,即,将所有财务数据以Sheet表名进行分类。
另外,遍历所有工作表还可以便于后续步骤中读取每个工作表中所有已标记颜色的单元格。
在读取Sheet表名称时可以过滤名称中的特殊字符,并将特殊字符转换为合法字符。
步骤S303,读取工作表单元格。
使用POI提供的读取单元格的方法,将Sheet表中的单元格逐行读取。POI的读取机制是逐行读取,直到Sheet表中的行指针最后一行结束,在读取数据时会读取一行上的所有单元格,直到单元格指针到达该行的末尾时读取结束。
在读取Excel文件中所有单元格的同时,还会根据颜色列表中的背景颜色过滤掉其他颜色和未标记背景颜色的数据。例如颜色列表中仅包括红色和黄色,则填充绿色颜色的数据将被过滤掉。
步骤S304,根据颜色剥离财务数据。
在读取单元格时可以只读取已标记预设背景颜色单元格。标记颜色是遵照一套已经预设颜色RGB(红绿蓝)数值规范或Lab色彩模型的单元格背景。
在读取带有预设背景颜色单元格同时会检查该颜色对应的单元格内数据,根据规则将不合法的数据记录在步骤S309中的消息列表中。例如,绿色背景色的单元格内的数据是一个日期或一个阶段的日期。
用背景颜色无法表达的特殊标记,可以采用"批注"的方式进行标记。特殊标记是给单元格添加一条批注,批注的内容可以遵循例如以下的格式标记规范。
1,批注内容属性描述格式为“名称:值”。
2,多个属性描述则在每个属性描述结束后加以“分号(;)”结尾。单一属性可以不加分号。
3,批注内容全部使用英文/半角格式。
4,时期与时点一般不会同时出现。货币、数值单位与精度属性描述只能出现一次。
5,时期日期格式可以按照该格式“YYYY-MM-DD,YYYY-MM-DD”或“YYYY/MM/DD,YYYY/MM/DD”。例如:“2010-05-12,2010-09-08”2010-05-12期初,2010-09-08期末,期末日期晚于期初日期。两个日期之间需要使用“逗号(,)”进行分割。
6,时期日期若要描述全年可以是“YYYY”格式,例如:“2010”采集组件会解析成“2010-01-01,2010-12-31”。
7,时点日期格式为“YYYY-MM-DD”或“YYYY/MM/DD”,例如:“2010-12-31”,"2010/12/31"。
8,脚注“footnote”属性只会过滤特殊字符“<”或者“>”。
批注样例表:
名称 |
值范围 |
样例 |
date |
时期 |
date:2010; |
date |
时期 |
date:2010-02-01,2010-05-31; |
date |
时点 |
date:2010-12-31; |
decimal |
精度 |
decimal:2; |
unit |
货币与数值单位 |
unit:CNY; |
footnote |
脚注文本 |
footnote:This is a text; |
步骤S305,验证单元格读取格式。
在本步骤中,可以进行一下验证:
在读取日期背景值时,验证背景值中日期是否是合法日期。
在读取域成员时,检查域成员中是否有特殊字符,如果有特殊字符,可以将特殊字符过滤掉,域成员可以是“北京银行”或“工商银行”等。
在读取财务值时,判断数值格式,通过标记的对应精度,转换财务值。
在读取货币单位时,通过国际货币文件标准去验证货币单位的合法性,验证是否是国际货币单位。
在读取数据精度时,验证精度的常用表现形式(-3,-6,0,1-9),例如,数据5的精度为-3,那么表示该数据为5000,如果5的精度为-2,则可以将该数据的表现形式改为0.5,精度-3,即500。
在读取科目项时,检查是否有特殊字符,如果有特殊字符,可以将特殊字符替换成下划线。
在读取sheet表名时,检查是否有特殊字符,如果有特殊字符,可以将特殊字符替换成下划线。
在读取注解时,验证注解格式的合法性和属性名称的正确性。
步骤S306,存储已读取单元格结构位置。
存储单元格结构是将Excel中包含的工作表、单元格位置、剥离的背景颜色数据以及批注存储在SheetVO中。
SheetVO中保存着工作表中的详细信息,包含Excel文件信息、该工作表中的所有单元格信息、抽取颜色的单元格信息。图4是SheetVO的示意图,如图4所示,在SheetVO中包括ExcelVO和CellVO,CellVO中还包括Comment(批注),以下是四组数据模型包含的详细属性。
CellVO:
ExcelVO:
数据类型 |
属性名 |
描述 |
int |
factDataCode |
财务值编号 |
int |
lineItemMappingCode |
科目值标号 |
File |
file |
excel文件 |
String |
username |
用户名 |
Workbook |
workbook |
引用POI的Workbook对象 |
List<Sheet> |
sheets |
sheet表集合 |
Comment:
步骤S307,根据规则建立数据关系模型。
在通过不同的颜色读取到各种财务值,并把数据存储在数据结构SheetVo中之后,可以开始建立数据关系模型,在XBRL中,背景(年份)、单位(币种)、精度标记在财务事实值的周围,还可以在每个事实值上以添加批注的方式来设置它的背景、单位、精度。公司名称等维度信息一般标记在财务实事值的上方,科目项可以标记的财务事实值的左、右方,这些标记方式系统都支持采集。
通过上述标记方式,均可通过各种标记颜色将各种财务数据封装在对象属性中备用。
具体地,首先读入一个标记颜色的Excel文件,把整个Excel文件保存在ExcelVO对象的workbook属性中,循环遍历Excel中的sheet表,将sheet集合保存在ExcelVO对象的sheets属性中。
然后从ExcelVO对象的sheets属性中循环读取每个sheet表中标记颜色的财务数据,读取到有颜色的财务值时,采集系统会将此单元格的信息保存在CellVO对像的cell属性中,接着会把单元格的位置、x坐标、y坐标、颜色和值分别保存在CellVO对像的excelLocation、x、y、color、value属性中。如果采集到合并单元格并且是表示维度的合并单元格,还会把此合并单元格所跨的最大行和最大列的x,y坐标保存在CellVO对象的xMax、yMax属性中。如果采集到的单元格是财务实事值,系统会去判断此事实值是否有批注,如果有批注会把批注的所有信息保存在CellVO对象的comment属性中。具体批注中属性的名称、值、类型会分别保存在Comment对象的name、value、type属性中。
其次采集系统会根据CellVO对象的color属性分别来封装各类财务数据,并为type属性赋值。
当color表示背景的颜色(R:0,G:255,B:0),把所有表示背景的CellVO对象保存在SheetVO对象的contextDataList属性中。
当color表示单位的颜色(R:255,G:129,B:0),把所有表示单位的CellVO对象保存在SheetVO对象的unitDataList属性中。
当color表示精度的颜色(R:255,G:0,B:128),把所有表示精度的CellVO对象保存在SheetVO对象的accuracyList属性中。
当color表示时点型财务事实值的颜色(R:0,G:0,B:255),把所有表示时点型财务事实值的CellVO对象保存在SheetVO对象的instantFactDataList属性中。
当color表示时期型财务事实值的颜色(R:255,G:0,B:255),把所有表示时期型财务事实值的CellVO对象保存在SheetVO对象的durationFactDataList属性中。
当color表示时期/点文本型财务事实值的颜色(R:128,G:128,B:0),把所有表示时期/点文本型财务事实值的CellVO对象保存在SheetVO对象的instantTextFactDataList属性中。
当color表示科目项的颜色(R:255,G:255,B:0),把所有表示科目项的CellVO对象保存在SheetVO对象的LineItemMappingList属性中。
当color表示维度的颜色(R:0,G:128,B:128),把所有表示单维度的CellVO对象保存在SheetVO对象的axisList属性中,多维度的CellVO对象保存在SheetVO对象的axisArrayList属性中。
最后通过SheetVO对象保存的各种财务数据关系来生成各类财务数据的节点文件。
步骤S308,校验规则关系模型。
剥离出的每一个财务事实值都有唯一对应的科目项、背景、和维度(可能不存在)。财务事实值会有时期和时点的区别,不同的颜色会区分时期值和时点值。
背景颜色的种类将决定颜色模型的匹配关系。匹配关系是以该颜色的纵轴或横轴出现的背景颜色的关系,匹配关系可以根据实际情况来设定。
例如,每一个科目项都有对应的财务事实值,且科目项不能有重复。每一个维度都有对应的财务事实值,且维度不能有重复。
步骤S309,输出关系模型与读取格式错误消息。
每一个财务事实值都有唯一对应的科目项、背景、和维度(可能不存在),如果没有对应或对应不正确,会把相关的错误消息添加到错误容器中。
每一个科目项都有对应的财务事实值,且科目项不能有重复。
每一个维度都有对应的财务事实值,且维度不能有重复。
错误类型和错误消息的对应关系如下表所示:
步骤S310,输出财务数据。
不同类型的数据分别按如下方法输出:
(1)时点型财务背景值
读取之后在contextData.xml文件中生成<instant></instant>节点,格式全部转换为yyyy-MM-dd,例<instant>2009-12-31</instant>。
contextData.xml文件中背景值为时点型contextDataId生成规则根据是否存在对应的域成员分为两种:
a.存在对应域成员规则为:"sheet表_域成员名称(member)_I_yyyy_MM_dd"。
b.不存在对应域成员规则为:"I_yyyy_MM_dd"。
(2)时期型财务背景值
a.只有年份数值,格式:YYYY,读取之后在contextData.xml文件中生成<startDate></startDate>和<endDate></endDate>节点,例如<startDate>yyyy-01-01</startDate>和<endDate>yyyy-12-31</endDate>。
b.如果披露的时期型背景是一年当中的某几个月。例如“2009-01-12,2009-05-12”,读取后在contextData.xml文件中生成<startDate>2009-01-12</startDate><endDate>2009-05-12</endDate>节点。
contextData.xml文件中背景值为时期型contextDataId生成规则根据是否存在(3)对应的域成员分为两种:
a.存在对应域成员规则为:"sheet表_域成员名称(member)_D_yyyy_MM_dd_To_yyyy_MM_dd"。
b.不存在对应域成员规则为:"D_yyyy_MM_dd_To_yyyy_MM_dd"。
(3)域成员
域成员为文本格式不能有特殊字符,contextData.xml文件中如果有域成员存在contextDataId生成规则分为两种:
1.背景值为时期型规则为:"sheet表_域成员名称(member)_D_yyyy_MM_dd_To_yyyy_MM_dd"。
2.背景值为时点型规则为:"sheet表_域成员名称(member)_I_yyyy_MM_dd"。
(4)财务科目值
财务科目值为文本格式不能有特殊字符,在LineItemMapping.xml文件中生成value节点,规则分为两种:
1.财务科目值有前缀规则为:[前缀_]财务项名称。(财务科目值有重复用添加前缀的方法来区分)。
2.财务科目值没有前缀规则为:财务项名称。
(5)数值型财务值
数值型财务值需要根据对应精度转换后,在factData.xml文件中生成value节点,转换规则:
1.财务值不是小数,标记精度大于0,在值后边加小数点,在小数点后加等于标记数量的0。例100,标记精度精度为2,最后转换的财务值等于100.00。
2.财务值不是小数,标记精度小于0,在值后边加等于标记数量的0。例100,标记精度精度为-3,最后转换的财务值等于100000。
3.如果财务值本身是小数,标记精度大于等于财务值本身的精度分为两种情况,一是标记精度小于0,财务值转换规则:财务值等于财务值乘以10的负标记精度次方,例财务值为100.12,标记精度为-3,最后转换的财务值等,100.12*10-(-3)=100120。
二是标记精度大于0,财务值转换规则:财务值等于财务值乘以10的负标记精度次方,例财务值为100.12,标记精度为3,最后转换的财务值等,100.12*10-3=100.120。
(6)文本型财务值
文本型财务值是一段文本,没有精度与单位,不能有特殊字符,生成在factData.xml文件中的<value>节点,对应的精度与单位节点为空。
(7)财务值精度
财务精度规定只能为:正整数、-3、-6、“0”或“INF”。在factData.xml文件中生成<decimals>-6</decimals>节点。
(8)财务值单位
财务值单位只能是“国际货币代码”、“pure”和“shares”,单位一般需要满足“ISO4217”国际货币代码规范,可以为分数型,例CNY/shares,在unitData.xml文件中生成<numeratorMeasure>,<denominatorMeasure>节点。
输出转换为XML格式。
Context.xml文件:
UnitData.xml文件:
footnote.xml文件:
EvnData.xml文件:
factData.xml文件:
LineItemMapping.xml文件:
从以上的描述中,可以看出,本发明实施例取代了人工手工录入数据的操作,因此解决了现有技术中人工数据处理速度较慢的问题,进而达到了提高数据处理效率的效果。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
显然,本领域的技术人员应该明白,上述的本发明的各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。