gpt4 book ai didi

.net - 为什么 SSIS 在将数据从 Excel 传输到 CSV 时将最后一行保存为 NULL?

转载 作者:行者123 更新时间:2023-12-04 22:08:50 25 4
gpt4 key购买 nike

电子表格:
输入文件包含如下所示的数据。

Column
------
123456
234567
ADCDEF
CSV/文本:
输出文件包含如下所示的数据
Column
------
123456
234567
NULL
为什么在将数据从 Excel 传输到 CSV 时,SSIS 包在最后一行写入 NULL 值而不是 ABCDEF

最佳答案

问题是 Excel 文件包含数值和字符串的混合数据,这导致 Excel 读取前几行并将列的数据类型推断为数值,在这种情况下不正确。当您创建一个 Excel 数据源来读取此 Excel 文件时,您会注意到该列被定义为数字并以这种方式处理它。因此,字符串永远不会进入输出文件。

您需要修改 Excel 连接管理器的 ConnectionString 属性以包含 IMEX=1 表示数据源可能包含不同数据类型的值。
IMEX代表 intermixed 在此处阅读更多信息:Connection strings for Excel

这里有一个例子来说明差异。

我根据问题中提供的数据创建了两个相同的 Excel 文件。

Excel_1

Excel_2

使用以下连接管理器创建了一个 SSIS 包。

Excel_1 有以下连接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\ExcelFile_1.xls;Extended Properties="Excel 8.0;HDR=YES";

Excel_2 有以下连接字符串。不同之处在于额外的 IMEX=1;。您需要手动将此添加到 Excel 连接管理器的 ConnectionString 属性。要查看属性,请单击 Excel 连接管理器并按 F4 .
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\ExcelFile_2.xls;Extended Properties="EXCEL 8.0;IMEX=1;HDR=YES";

Connections

设计了如下所示的数据流传输 Excel_1.xlsFlatFile_1.csvExcel_2.xlsFlatFile_2.csv
Package

您可以在输出中看到第一个平面文件的第三行没有任何值,但第二个文件有。原因是第一个 Excel 连接管理器推断列类型是数值,这是不正确的。但是,第二个文件处理了

FlatFile_1

FlatFile_2

您可以右键单击 Excel 数据源,然后单击 Show Advanced Editor...
Excel data source

在高级编辑器中,单击 Input and Output Properties ,展开 Excel 源输出,然后展开 External Columns .点击 Column .

您会注意到第一个 Excel 数据源上列的数据类型设置为 double-precision float [DT_R8] 在第一个 Excel 连接管理器上 Excel_1
Excel_1 Advanced

您会注意到第二个 Excel 数据源上列的数据类型设置为 Unicode string [DT_WSTR] 在第一个 Excel 连接管理器上 Excel_2
Excel_2 Advanced

希望有帮助。

关于.net - 为什么 SSIS 在将数据从 Excel 传输到 CSV 时将最后一行保存为 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14603312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com