如图所示...我有一个excel表,其中包含32个表一个接一个(我已经采取了2表的形象)可能会增长表计数…但元数据是相同的所有表。表有两列之一是常数(Name)& another one will get change(TPA,TPB..等),但是列位置没有变化。现在的问题是如何保存头部并作为T_type值插入到目标表中? 每个表中的行数不是固定的(所以我们不能引用单元格)。
这正是我在编写SSIS Excel Source via SSIS时必须克服的问题。我们必须从报告中获取数据提要,而不是从干净的表格数据中获取。使用这种方法,你只需定义等价的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)
1条答案
按热度按时间lyr7nygr1#
我理解的问题是
我相信你在Excel中的数据看起来大约
数据可以被描述为数据块。一个块被定义为以一个起始行为边界,其中的值为
Name
。该行上的下一个单元格将包含一个应用于所有后续行的值。在标题行之后,您将需要取出键值对,并将它们和表名一起写入到您的目标中。
meta数据保持一致,只是源数据都被删除了。
解析
这正是我在编写SSIS Excel Source via SSIS时必须克服的问题。我们必须从报告中获取数据提要,而不是从干净的表格数据中获取。使用这种方法,你只需定义等价的
ParseSample
方法,然后在foreach循环中(ExcelParser的第71行)你放入块逻辑的是从值为“Name”的字段到遇到空行的所有内容。伪码近似
如果您想简化这件事,您可以在ScriptMain中拥有所有的解析逻辑,并省去所有数据表的废话。
好处是代码更少,坏处是调试脚本是SSIS 2012年之前的魔鬼。在2012年它仍然是拼凑的,但它比之前的什么都没有要好。