基于FME从Word文档直接生成标准数据库结构
- 2026-09-18 15:01:35
基于FME从Word文档直接生成标准数据库结构之前曾与大家分享过如何利用FME读取Excel表格来创建数据库空结构的方法。该方式主要依赖Excel中记录的结构化信息。如下: 
自动生成的GDB标准结构,如下: 
对于上述创建流程,我们已经进行过多次分享,可谓驾轻就熟。然而,采用“Excel表创建空库结构”的方法,始终面临一个现实问题:数据库标准往往并非以Excel表格的形式提供,而更多是以Word标准文档下发。如下: 

在旧版FME中,由于缺乏Word格式的读取功能,通常采用“Excel表创建空库结构”的方式来处理,这种方法虽然相对简洁有效,但前提是需要先从Word文档中人工手动提取标准信息。若不想手动转换,较新版本的FME也可通过FME Hub中提供的WordToPDFWriter对Word文档转换再进行解析,但这仍属于一种间接处理方式,总归需要“绕一步路”。 直到FME2024及之后的版本,这一流程得到了显著改进——新增了Word格式读取功能。现在我们能够直接读取Word文档,并在此基础上进行分析与处理,从而更高效地完成标准结构的创建。接下来,就让我们一起看看完整的操作流程吧。 一、利用Word格式创建标准结构 具体步骤如下: 1)添加Word读模块 点击“Reader”工具,在format窗口中输入“word”,选择“Microsoft Word”格式读取Word数据。 
首次添加“Microsoft Word”格式,自动提示安装“MS Word”,确认安装。 
2)有效提取数据 Word文件中通常不是仅存储表格,如下一个完整的数据建库标准文档中,还包含有前言、适用范围、引用文件、数据基础、数据结构等内容。 
首先需要从所有的数据中提取有效的数据。对读取的Word数据进行分析,不难发现Word格式通过“msword_type”字段记录数据的类型,以下罗列常用类型:
本次演示需要提取Word文档中的图层、属性信息,主要存储在“表格”类型中,从“msword_type”中提取出表格与段落文字中的表名数据。 

3)自动进行表格分组 Word文档中不同图层的结构记录在不同的表中。 图层情况表,记录图层的名称、别名、几何等信息。 
属性情况表,记录单个图层中包含的属性字段名称、别名、字段类型、长度等信息。 
Word格式数据文字按照段落、表格按照行进行数据读取,不同的表格包含不同的行,利用VariableSetter、VariableRetriever变量设置与获取,对不同表格进行分组。 

4)各图层属性获取 通过对表格数据的存储字段进行分析可以发现,属性中存在两个对应的属性列:msword_table_col_header{}与 msword_table_col_value{},它们分别用于存储表格的列标题信息以及各列对应的具体取值。 
这就简单了,将列表进行一个对应的赋值不就得到了想要的结果了么?AttributeCreator万能转换器又可以“上桌”了。 
分别对图层、属性表进行赋值得到标准结构表。 

走到这一步是不是就非常熟悉了,这不就是“Excel表创建空库结构”流程中,Excel表格的内容嘛。 5)创建标准结构 接下来只需要将第4步的字段内容翻译为FME能识别到属性,即可完成结构的创建。 主要需要设置的内容包括以下几类:

完成赋值后,按照图层进行属性聚合,得到创建标准结构所需的attribute{}。 
最后,确认属性列表、别名、图层名称、别名、几何都符合FME字段创建标准后,输出GDB格式。 输出GDB时,为避免系统自动将空记录作为要素输出。在输出前可创建“OBJECTID=1”的取值,输出时选择动态输出,结构来源选择为"Schema From Schema Feature";同时,按照创建结构并删除要素的方式输出,即可避免输出空记录。 

得到标准结构如下: 
二、总结 通过上述流程,我们可以看到,FME2024及以后的版本引入的原生Word读取功能,真正实现了从标准文档到数据库结构的“一站式”创建改变了以往依赖人工提取或借助中间格式(如Excel)的迂回工作模式,将结构创建整合为一条清晰、自动化的流水线。
来了来了,我又回来了!







序号 | 名称 | 注释 |
1 | msword_paragraph_text | 段落文字 |
2 | msword_heading | 标题 |
3 | msword_bullet | 列表项目 |
4 | msword_table | 表格 |
5 | msword_image | 图片 |










序号 | 属性字段值 | FME属性名 | FME属性值 |
1 | 点\线\面\文本 | fme_geometry{0} | fme_point\fme_line\ fme_polygon\fme_text |
2 | 图层别名 | geodb_feature_class_alias | —— |
3 | 字段类型 | Text/Double | fme_varchar(@Value(字段长度))/fme_real64 |
4 | 字段名称 | name | —— |
5 | 字段别名 | @Value(字段名)_alias | —— |
6 | 图层名称 | fme_feature_type | —— |





Bingo,你学会了吗?
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。