利用Excel建立动态的工作表目录

需求

现在,需要建立动态的工作表目录。无论是新增、删除工作表,还是移动工作表的位置,目录将实时更新。同时,点击工作表目录下的链接,能够跳转至对应的工作表内。工作表目录如下图所示:

图片
动态的工作表目录

注:为了避免B列的函数过长,在C列增加了获取工作表名称的函数。可根据自己的需求,在完成后选择隐藏C列,或嵌套到B列的函数中。

操作步骤

1、使用宏表函数:菜单栏--->公式--->名称管理器--->新建,在弹出的【新建名称】对话框中,名称栏所在行输入:shtName;在引用位置所在行输入:=GET.WORKBOOK(1)

图片
如何使用宏表函数的指引图

2、在C2单元格获取工作表名,输入公式:

=IFERROR(INDEX(shtName,ROW()),"")&T(NOW())

3、在B2单元格获取带链接的工作表名,输入公式:

=IFERROR(HYPERLINK(C2&"!A1",MID(C2,FIND("]",C2)+1,LEN(C2))),"")

4、在A2单元格填充序号,输入公式:=IF(B2<>"",ROW()-1,"")

5、选择A2至C2单元格,并下拉填充。

本文使用的函数功能简述

Hyperlink函数可以跳转到链接的工作表指定位置
T(Now()函数实现工作表目录的实时更新
GET.WORKBOOK(1)获取当前工作簿全部工作表名称的集合
Index函数用于获取每个工作表的名称
Mid函数从指定位置开始截取字符串
Find函数获取指定字符串在单元格出现的位置
Row函数

获取单元格的行号

<think>好的,用户想使用FME根据Excel表格定义创建空数据库结构。首先,我需要回忆一下FME处理Excel数据的能力以及数据库结构创建的相关知识。根据之前的引用内容,用户提到过用FME清洗Excel数据形成四张标准表,包括AttributeTables、FeatureClasses、Fields和Domains。这可能涉及将Excel中的表结构定义转换为数据库的表、字段、域等元素。 首先,用户需要确保Excel中的数据结构规范。引用[^1]提到清洗排除不规范数据,所以第一步应该是检查Excel中的字段定义是否符合目标数据库的要求,比如字段名称、数据类型、长度、约束等。可能需要使用FME的Excel读取器,并设置正确的参数,比如确定属性列表从哪一行开始,是否需要处理合并单元格等问题,类似引用[^2]中调整行列号的操作。 接下来,用户需要将Excel中的表结构转换为数据库的DDL语句或者直接创建空表。FME可能通过AttributeManager或者SchemaMapper等转换器来处理字段类型映射,比如将Excel中的“VARCHAR”转换为数据库对应的文本类型。然后,使用数据库写入器,比如使用SQLExecutor或者直接配置数据库写入参数,生成创建表的SQL语句。 另外,用户可能需要处理域(Domains)的定义,比如枚举值或取值范围。这可能需要将Excel中的域信息提取出来,生成对应的数据库约束或查找表。例如,使用FME的列表处理功能,将域信息拆分并写入到单独的域表中,再通过外键关联到主表。 在流程设计上,可能需要分步骤处理不同的Excel工作表,每个工作表对应不同的数据库结构元素。例如,一个Excel表定义字段,另一个定义表结构,再有一个定义域。然后通过FME的工作区将这些数据连接起来,生成最终的数据库结构。 还需要考虑不同数据库系统的差异,比如PostgreSQL、MySQL或SQL Server在数据类型和DDL语法上的不同。用户需要根据目标数据库类型调整FME中的设置,确保生成的SQL语句正确。 最后,测试整个工作流程,确保生成的数据库结构准确无误,没有遗漏字段或约束。可能需要使用FME的数据验证转换器,比如Tester或者GeometryValidator,来确保数据在转换过程中符合预期。 用户可能遇到的问题包括Excel数据格式不规范、字段类型映射错误、主外键关系未正确建立等。因此,在回答中需要强调数据清洗的重要性,并提供具体的转换器使用示例,比如AttributeManager、SchemaMapper、SQLExecutor等,以及如何配置数据库写入器参数。</think>根据FME处理数据库结构创建的最佳实践,以下是分步操作指南: $\\$ **步骤1:准备标准化的Excel结构表** - 按引用[^1]创建4张标准表: 1. **AttributeTables**:存储表名称和注释 2. **FeatureClasses**:空间数据表特殊属性 3. **Fields**:字段定义(字段名/类型/长度/约束) 4. **Domains**:域值定义(如枚举类型) - 使用FME的`Excel Reader`读取时设置: ```python Workbook Range: AttributeTables$A1:H1000 Header Lines: 1 # 确保属性名正确读取 ``` $\\$ **步骤2:创建字段映射转换器** ```python # 使用AttributeManager转换字段类型 字段类型映射规则: Excel类型 -> 数据库类型 "String" -> "VARCHAR(255)" "Number" -> "DECIMAL(10,2)" "Date" -> "TIMESTAMP" ``` 需配合`SchemaMapper`实现动态类型转换[^2] $\\$ **步骤3:构建数据库结构生成器** ```python # 使用SQLExecutor生成DDL语句 UPDATE [数据库名] SET 创建语句 = CONCAT('CREATE TABLE ', 表名, ' (', GROUP_CONCAT(字段名 || ' ' || 数据类型 || 约束条件 SEPARATOR ', '), ');') FROM Fields JOIN AttributeTables USING(表ID) ``` $\\$ **步骤4:实施域值约束处理** 对Domains表使用以下处理流程: ``` ExcelReader > ListBuilder > ConditionalValue(创建CHECK约束) > SQLExecutor(ALTER TABLE添加约束) ``` $\\$ **最终完整工作流示例**: $$ \begin{array}{l} \text{ExcelReader}\ \rightarrow\ \text{AttributeFilter}\ \rightarrow\ \text{SchemaMapper} \\ \downarrow \\ \text{SQLExecutor}\ \rightarrow\ \text{DatabaseWriter} \\ \downarrow \\ \text{Logger(记录创建日志)} \end{array} $$ $\\$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值