0

!参考问题1

如图所示...我有一个 Excel 表,其中一个接一个地包含 32 个表(我在图像中取了 2 个表)可能会增加表数...但是所有表的元数据都是相同的。表有两列,一列是常量(名称),另一列会发生变化(TPA,TPB.. 等),但列位置没有变化。现在的问题是如何保存标题并作为 T_type 值插入到目标表中?

每个表中的行数不固定(所以我们不能去参考单元格)。

4

1 回答 1

2

据我了解的问题

我相信您在 Excel 中的数据看起来大约

Name | TPA
abc  | x
...

Name | TPB
acz  | p

数据可以描述为数据块。一个块由一个起始行定义,其中的值是Name。该行的下一个单元格将包含一个适用于所有后续行的值。

在标题行之后,您需要提取键值对并将它们加上表名写入您的目的地。

元数据保持一致,只是源数据全部被banjaxed。

解析度

这正是我通过 SSIS 编写 SSIS Excel Source时必须克服的问题。我们必须从报告中获取我们的数据源,而不是从干净的表格数据中获取。使用这种方法,您只需定义等效ParseSample方法,然后在 foreach 循环(ExcelParser 的第 71 行)中放入块逻辑中的所有内容都是从值为 'Name' 的字段直到遇到空的排。

伪码近似

# enumerate through all my source data
foreach row in source data
    # assign values to local variables
    col0 = row[0]
    col1 = row[1] 

    # Test for end of block
    if col0 == "Name"
        tableName = col1
    else if col0 == string.Empty
        # do nothing
    else
        newRow = dataTable.NewRow()
        newRow[0] = col0
        newRow[1] = tableName
        newRow[2] = col1
        dataTable.Add(newRow)

如果你想简化事情,你可以在 ScriptMain 中拥有所有的解析逻辑,并省去所有数据表的废话。

好处是代码会更少,坏处是调试脚本是 SSIS 2012 之前的魔鬼。它在 2012 年仍然很笨拙,但总比之前的一无所有要好。

于 2013-08-13T03:09:11.110 回答