您的当前位置:首页正文

Excel数据导入使用手册

2022-10-18 来源:个人技术集锦
Excel数据导入数据库功能设计说明

1.功能描述 ............................................................................................................................................................... 2

1.1.Excel数据源图例 ...................................................................................................................................... 2 1.2.配置模板图例 ............................................................................................................................................ 3 1.3.操作界面图例 ............................................................................................................................................ 3 2.约定和声明 .......................................................................................................................................................... 4

2.2数据库配置约定和声明 ............................................................................................................................ 4 2.2物理数据源约定和声明 ............................................................................................................................ 4 2.3配置模板约定和声明 ................................................................................................................................ 5 3.解析器工作原理 ................................................................................................................................................... 5

3.1第一步骤 .................................................................................................................................................... 6 3.2第二步骤 .................................................................................................................................................... 6 3.3第三步骤 .................................................................................................................................................... 6 3.4第四步骤 .................................................................................................................................................... 6 4.模板定义步骤 ....................................................................................................................................................... 6

4.1第一步骤 .................................................................................................................................................... 7

元素定义 .................................................................................................................................. 7 4.2第二步骤 .................................................................................................................................................... 8

元素定义 ............................................................................................................................. 8 4.3第三步骤 .................................................................................................................................................... 9

元素定义 .................................................................................................................................... 9

5错误描述和诊断 ................................................................................................................................................. 11

1错误信息 ..................................................................................................................................................... 11 6附录 ..................................................................................................................................................................... 11

1.功能描述

实现将任意格式的Excel表中的数据(支持多Sheet、支持每一个Sheet中又有多个逻辑数据区),通过描述取数配置模板后,由自动解析器将从指定的Excel数据源中抽取任意数据导入到

任意目标数据库表中。同时可附带产生XML格式的目标数据。

1.1.Excel数据源图例

1.2.配置模板图例

1.3.操作界面图例

(以民生保监会报表系统为例)

2.约定和声明

2.2数据库配置约定和声明

以民生保监会报表系统为例(即上图操作界面):需要将模板配置文件名存放到 数据库表LDCode 中CodeType 值为'circreport_config'的相应记录的CodeAdias字段值。所以每填加一个配置模板需要到该表中添加一条相应的配置文件名描述记录(目的是通过界面引用模板的逻辑功能名而不是模板文件名,从用户操作的友好性上考虑),同时将配置模板放到数据库表LDSysVar 中字段SysVar 值为'TranDataPath' 的相应记录的SysVarValue字段值所描述的路径下,以便解析器在解析时读取。

2.2物理数据源约定和声明

(1) 物理数据源Excel表本身数据无任何特殊位置要求。可以有任意多Sheet。对Sheet名

无任何要求。

2.3配置模板约定和声明

(2) 在配置模板中,通过引用顺序号(0、1、2、3、等)来引用每个Sheet(如:0代表第一个

Sheet,以此类推)。 (3) 在配置模板中,通过引用顺序号(0、1、2、3、等)来引用Sheet的每行、每列(如:Sheet(0,0,0)

代表是引用第一Sheet中第一行中的第一列,以此类推)。

(4) 配置模板中各元素名大小写不敏感,但其属性名要求必须小写,否则解析器会认为其

为非法属性。各元素均可拥有desc属性,其只作为备注,以便描述者记录提示性信息所用,不参与解析器解析工作。

(5) 配置模板中唯一根元素为,其属性name和属性display可以为空。 (6) 在配置模板中,根元素可以更据实际的物理数据源拥有多个

子元素(但至少有一个)。即每个元素对应到物理Excel数据源中某一个Sheet。其属性name和属性display可以为空。但属性dest不能为空,其值表示该元素对应到物理Excel数据源的那个Sheet (如:dest = ”1”表示该元素对应物理Excel数据源的第二个Sheet)。

(7) 在配置模板中,每一个元素可以根据实际的物理Excel数据源逻辑区域划分而

拥有多个子元素(但每一个元素至少有一个< Part >子元素)。即每个元素对应到一个逻辑划分区域。其属性name和属性display可以为空。属性physicaltable也可以为空,但这意味着该< Part > 元素所描述的信息通过解析器解析后只生成XML 格式的目标文件,而并不存储到任何物理数据库表中。所以描述该< Part > 元素的目的如果是将数据最终导入到物理数据库表中,该属性值应为目标数据库表名而不应为空(如:physicalpable=\"LCPol\" 表示要将该< Part > 元素所描述的信息最终存储到LCPol数据库表中)。

(8) 在配置模板中,每一个< Part >元素必须只包含< DataSourceSet >元素和<

DataDestinationSet >元素共两个元素。第一个子元素< DataSourceSet >逻辑上用来进行参数描述和列取数定义。第二个子元素< DataDestinationSet >逻辑上用来进行行取数定义。

(9) 在配置模板中,每一个< DataSourceSet >元素必须只包含元素和< ColConfig>

元素共两个子元素。元素< DataSourceSet >的属性name和属性display可以为空。第一个子元素用来描述参数,该元素中的所有子元素进行参数引用。第二个子元素< ColConfig >用来描述其该元素的列定义。具体元素和< ColConfig>元素的描述规则将在后续章节中进行专题解释。 (10) 在配置模板中,每一个< DataDestinationSet>元素必须只包含元素但可以有多个

子元素,元素本身又可以有两种定义,模板中支持多种定义方式的子元素的同时存在。< DataDestinationSet>元素的属性name和属性display可以为空。元素< DataDestinationSet >的属性name和属性display可以为空。具体< ROW >元素描述规则将在后续章节中进行专题解释。

3.解析器工作原理

.解析器工作每一个元素是一个完整的逻辑解析单元。解析工作分四部分。分第一部分:模板语法

校验部分;第二部分:遍历由起始行和终止行指定的物理行,同时根据列定义描述生成中间行结果。第三部分:根据目标行定义生成目标行数据。第四部分:将目标行数据存储到目标数据库表中。每一部分都是下一工作部分的前驱必备工作。

3.1第一步骤

实现模板语法校验功能。辅助模板描述的工作者快速定位模板描述的错误,提高工作效率。保证模板描述的语法的正确性,简化后续工作的校验工作,使每一部分的功能在逻辑上尽可能的独立出来,只专注于本部分的核心工作。

3.2第二步骤

在模板校验成功后,实现遍历由起始行和终止行指定的物理行,根据列定义描述生成中间行结果的工作任务。实现列扩充的目的。输出中间结果集合(可生成Xml格式的中间结果集合)。

3.3第三步骤

输入中间结果集合,根据行定义从中直接抽取出目标行,或只抽取部分同时再生成一些自定义的行,最终将两部分同一输出为目标行结果集合(可生成Xml格式的目标结果集合)。

3.4第四步骤

输入目标结果集合,将目标结果逐一提交到根据指定的物理数据库表中。最终实现从物理Excel表中,生成自定义格式的数据记录存储到目标数据库表中的工作。

4.模板定义步骤

如约定和声明所述,一个配置模板中可以有多元素,而每一个元素中可以有多个元素,而每一个元素是一个完整的逻辑定义单元。见上Xml图示,其中已将模板中的各元素和子元素基本架构已定义结束,接下来的工作是书写每一个元素的实际定义信息。所以以下以一个元素的定义作为一个模板定义的核心工作单元来详细说明。逻辑定义单元模板的定义共分三步骤。分别是参数定义即元素定义,列定义即元素定义和行定义即元素。以下是针对这三步骤分别说明:

4.1第一步骤 元素定义

(1) 在配置模板中, 元素只包含子元素,但至少包含两个以上的< Field >元素。每一个< Field >元定义一个参数,以便后续工作的引用从而提高数据处理效率。元素的属性name和属性display可以为空。

(2) 元素中的第一子元素必须描述该元素的所对应的物理逻辑区域的起始行号参数。其属性memo可以为空。但要求其属性name值必须为\" PARAM0\"。要求其属性type必须为\"0\"。表示属性src值为自定义直接数值(如:src=”11”表示该元素对应的物理逻辑区域起始行为第10行),如果属性src=””则默认为src=”0”。

(3) 元素中的第二子元素必须描述该元素的所对应的物理逻辑区域的终止行号参数。其属性memo可以为空。但要求其属性name值必须为\" PARAM1\"。要求其属性type必须为\"0\"。表示属性src值为自定义直接数值(如:src=”21”表示该元素对应的物理逻辑区域终止行为第20行),如果属性src=””则默认为属性src值是当前Sheet的最大行数-1。

(4) 元素中支持第三个到任意多的子元素< Field >。属性memo可以为空。属性name值(即参数名)要求异于该元素中已定义的其他参数的属性name的值即可(也

包括公共系统参数,目前只提供SYS_FILENAMEPARAM公共系统参数即物理源Excel文件名称的引用,如果具体运用中有其它系统级参数需求可具体提出,以便实现支持),其即该参数名。属

性type值不在容许为空,并且取值范围是(0,1,2,3)。每一type取值对应属性src值的计算得出参数值关系表示为下表: type 0 1 如:src=”123” src 如:src=”Sheet(0,0,2)” 参数值 参数值为属性src直接定义的值如:123 参数值为属性src直接指定的物理Excel数据源中第一Sheet中第一行第三列中的值 src为一自然Sql则参数值为该语句执行结果值 src 为一变形Sql 其中引用了前驱已定义参数,解析器会在执行该语句之前将用参数值替换调(?某一已定义参数名?),然后执行语句将结果赋予该参数 src 为一变形Sql 其中引用了物理Excel某单元格,则解析器会在执行该语句之前将用指定的单元格值替换调(?Sheet(0,0,1)?),然后执行语句将结果赋予该参数,但该参数定义是必须要有params属性声明该物理单元格的引用见右。(Sheet(-1,rowindex,colindex)中-1表示当前Sheet,但rowindex和colindex2 如:1.src=”select colname from onetable ” 1. 2. src=”select 某列名 from 某一表名 where 某一列=‘?某一已定义参数名包2. 括系统参数?’” 3. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’” (要求必须在参数定义中有params属性,3. 书写为params=”params(Sheet(0,0,1) |1)” 4. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’ and某一列=‘?某一已定义的参数包括系统参数?’ ” 不能取-1,因为在参数定义时没有当前行和列的概念可言) 4. 支持多参数引用。如果引用了物理单元格值就必须进行书写params 属性。其它类型参数可不进行声明。 3

如:src=”Param0” 5. Src 值为一已定义的参数,则参数值为src引用的参数的实际已计算的值 4.2第二步骤 元素定义

(1) 在配置模板中, 元素实现目标数据列的定义功能(支持实际物理Excel

数据源提供的列数和列值不直接对应目标数据表的列数和列值,即支持列扩充和列缩减等功能)。解析器会根据参数Param0和Param1所指定的物理起始行和终结行,遍历所有的行,同时根据元素中定义的列生成中间数据记录集合结果,以便后续解析程序在生成目标行时引用处理。元素只包含子元素,但至少包含一个< Field >元素,即目标数据库表必定有一列(字段),要求元素只包含子元素个数为目标数据库实际列个数。每一个< Field >元素定义目标数据库表中的一个字段的取值方式,每一个< Field >元素的属性memo可以为空。< Field >元素的属性name为其定义的列在数据库表中的列名。属性type值不在容许为空,并且取值范围是(0,1,2,3,4)。每一type取值对应属性src值的一种计算方式,从而得到该< Field >元素所定义的列的值关系表示为下表: type 0 1 如:src=”123” src 如:src=”Sheet(0,0,2)” 参数值 列值为属性src直接定义的值如:123 列值为属性src直接指定的物理Excel数据源中第一Sheet中第一行第三列中的值 src为一自然Sql则列值为该语句执行结果值 src 为一变形Sql 其中引用了前驱已定义参数,解析器会在执行该语句之前将用参数值替换调(?某一已定义参数名?),然后执行语句将结果赋予该列 src 为一变形Sql 其中引用了物理Excel某单元格,则解析器会在执行该2 如:1.src=”select colname from onetable ” 1. 2. src=”select 某列名 from 某一表名 where 某一列=‘?某一已定义参数名包2. 括系统参数?’” 3. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’”(要求必须在参数定义中有params属性,书写为3. params=”params(Sheet(-1,-1,1) |1)” 4. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’ and某一列=‘?某一已定义的参数包括系统参数?’ ” 5. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’ and某一列=‘?某一已定义的参数包括系统参数?’ and某一列=‘?某一已定义的列名?’” 4. 3 4 如:src=”某一参数名” 如:src=”某一前驱已定义的列名” 语句之前将用指定的单元格值替换调(?Sheet(-1,-1,1)?),然后执行语句将结果赋予该列,但该参数定义是必须要有params属性声明该物理单元格的引用见右。(其中Sheet(-1,-1,1)生成当前Sheet和当前行物理行(在生成中间行记录时会遍历由param0和param1指定的物理行)的第二列的值) 支持多参数引用。如果引用了物理单元格值就必须进行书写params 属性。其它类型参数可不进行声明。 5. 支持对已定义列的引用。 Src 值为一已定义的参数,则参数值为src引用的参数的实际已计算的值 Src 值为同一行前驱已定义列的引用,则列值为src引用的前驱已定义列实际已计算的值

4.3第三步骤 元素定义

(1) 在配置模板中, 元素实现目标数据行的定义功能(支持实际物理Excel数据源提供的行数和行值不直接对应目标数据表的行数和行值时的处理,即支持行扩充和行缩减功能),元素本身的定义有两种,一种不包含任何子元素,此时属性type=”1”;另一种包含< Field >子元素。后一种定义是为了支持物理Excel数据源中没有目标数据中所要求的这行记录信息时,进行个案的处理,具体见(2)

type 1 src 如:src=” ROW(0,0)” 如:src=” ROW(3,7)” 参数值 表示在中间行结果集合中取其一部分行记录作为目标行的一部分。如左:若假设Param0=”2”, Param1=”10”,即中间数据集合会有相应的九条中间记录,则ROW(0,0)表示取这中间行记录中的第一行作为目标数据的条行记录;则ROW(0,9)表示取中间结果集合中的第一条到第十条记录作为目标数据行的一部分行。 表示该行需要单独特殊定义。具体见下表。 2

如:src=”” (2) 在配置模板中, 元素后一种定义时,定义时至少包含一个< Field >元素,即目标数据库表必定有一列(字段),要求包含子元素的个数为目标数据库实际列的个数。每一个< Field >元素定义目标数据库表中的一个字段的取值方式,每一个< Field >元素的属性memo可以为空。< Field >元素的属性name为其定义的列在数据库表中的列名。属性type值不在容许为空,并且取值范围是(0,1,2,3,4,5)。每一type取值对应属性src值的一种计算方式,从而得到该< Field >元素所定义的列的值关系表示为下表: type 0 1 如:src=”123” src 如:src=”Sheet(0,0,2)” 参数值 列值为属性src直接定义的值如:123 列值为属性src直接指定的物理Excel数据源中第一Sheet中第一行第三列中的值 src为一自然Sql则列值为该语句执行结果值 src 为一变形Sql 其中引用了前驱已定义参数,解析器会在执行该语句之前将用参数值替换调(?某一已定义参数名?),然后执行语句将结果赋予该列 src 为一变形Sql 其中引用了物理Excel某单元格,则解析器会在执行该语句之前将用指定的单元格值替换调(?Sheet(0,0,1)?),然后执行语句将结果赋予该列,但该参数定义是必须要有params属性声明该物理单元格的引用见右。(其中Sheet(0,0,1)生成当前Sheet和当前行物理行(在生成中间行记录时会遍历由param0和param1指定的物理行)的第二列的值) 支持多参数引用。如果引用了物理单元格值和中间结果集合的某行某列就必须进行书写params 属性。其它类型参数可不进行声明。 支持对当前目标行已定义的列的引用。 支持对中间行结果中的某一行的某列的值的引用。如某一列=‘? Row(2).某一列名?’ ,但该引用是必须要有params属性声明该引用型如:params=”params(Sheet(0,0,1) |1;Row(2).某一列名|5)” 2 如: 1. 1.src=”select colname from onetable ” 2. src=”select 某列名 from 某一表名 2. where 某一列=‘?某一已定义参数名包括系统参数?’” 3. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’”(要求必3. 须在参数定义中有params属性,书写为params=”params(Sheet(0,0,1) |1)”) 4. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’ and某一列=‘?某一已定义的参数包括系统参数?’ ” 6. src=”select 某列名 from 某一表名 where 某一列=‘?Sheet(0,0,1)?’ and某一列=‘?某一已定义的参数包括系统参数?’ and某一列=‘?某一已定4. 义的列名?’” (要求必须在参数定义中有params属性,书写为params=”params(Sheet(0,0,1) |1)”) 6. src=”select 某列名 from 某一表名 5. where 某一列=‘?Sheet(0,0,1)?’ and某一6. 列=‘?某一已定义的参数包括系统参数?’ and某一列=‘?某一已定义的列名?’ and某一列=‘?某一中间结果行的某一列的列名?’ ” (要求必须在参数定义中有params属性,书写为params=”params(Sheet(0,0,1) |1;Row(2).某一列名|5”) 3 4 如:src=”某一参数名” 如:src=”某一前驱已定义的列名” Src 值为一已定义的参数,则参数值为src引用的参数的实际已计算的值 Src 值为同一行前驱已定义列的引用,则列值为src引用的前驱已定义列实际已计算的值 Src 值中间行结果中的某一行的某列的值的引用 5 如:src=” Row(2).某一列名|”

5错误描述和诊断

1错误信息

随着实际运用过程中遇到的常见错误将会填充到该目录下。目前暂空。

6附录

另附一简单模板样例见民生项目组的Z:\\doc\\技术资料 的目录下(数据源文件为Data000000JS2004061.xls模板为ExcelImportLFJSConfig.xml)

因篇幅问题不能全部显示,请点此查看更多更全内容