Excel 如何在ssis中的目标表中插入列名?

Excel 如何在ssis中的目标表中插入列名?,excel,header,ssis,columnname,Excel,Header,Ssis,Columnname,!!对问题的提及 如图所示。。。我有一个excel工作表,其中包含32个表,一个接一个(我在图像中有2个表)可能会增加表数。。。但所有表的元数据都是相同的。表有两列,一列是常量(名称)&另一列将得到更改(TPA、TPB..等),但列位置没有更改。 现在的问题是如何保存标题并将其作为T_类型的值插入到目标表中 每个表中的行数不是固定的(因此我们不能进行单元格引用)。我理解的问题 我相信您在Excel中的数据看起来大约 Name | TPA abc | x ... Name | TPB acz

!!对问题的提及

如图所示。。。我有一个excel工作表,其中包含32个表,一个接一个(我在图像中有2个表)可能会增加表数。。。但所有表的元数据都是相同的。表有两列,一列是常量(名称)&另一列将得到更改(TPA、TPB..等),但列位置没有更改。 现在的问题是如何保存标题并将其作为T_类型的值插入到目标表中

每个表中的行数不是固定的(因此我们不能进行单元格引用)。

我理解的问题 我相信您在Excel中的数据看起来大约

Name | TPA
abc  | x
...

Name | TPB
acz  | p
数据可以描述为数据块。块由一个起始行定义,起始行的值为
Name
。该行的下一个单元格将包含一个应用于所有后续行的值

在标题行之后,需要取出键值对,并将它们与表名一起写入目标

元数据保持一致,只是源数据都被屏蔽了

决议 这正是我写作时必须克服的问题。我们必须从报告中获取数据源,而不是干净的表格数据。使用这种方法,您只需定义等效的
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年的情况仍然很糟糕,但它比之前的情况要好。

我们能在不使用脚本组件的情况下实现这一点吗?您可以使用Excel源代码,它会将所有入站数据视为unicode,这很好。不使用脚本组件的挑战在于您有数据窗口。窗口的第一行具有目标表名称,后续行需要使用该名称。SSIS中没有真正的OOB机制允许您将前一行的值应用于当前行。另一种方法仍然需要一个脚本组件,除非它不是源,而是生成代理键以允许对后续行进行分组。将所有这些写入一个临时表,然后使用SQL