无法从 excel 列读取字符串值
Failing to read String value from an excel column
SSIS 脚本任务只读取 excel 的数值,但无法读取同一列中存在的字母数字值
我试过使用 IMEX=0、IMEX=1 和 IMEX=2。但是在我的 SQL 服务器 table.
中,字母数字值生成为 NULL
//Excel Connection String
string ConStr;
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR +
";IMEX=0\"";
如果第 8 列 'A' 值是整数 (0,1,2,3,4,5,6,7),然后在下面的行中出现字母数字 (A,B,ABQX345) 值, 然后它应该按原样读取所有值并插入 SQL Server table as
0,1,2,3,4,5,6,7,A,B,ABQX345
此问题与用于读取 excel 文件的 OLEDB 提供程序有关:由于 excel 不是每个列都有特定数据类型的数据库,OLEDB 提供程序会尝试识别主要数据在每一列中找到的类型,并替换所有其他无法用 NULL 解析的数据类型。
网上有很多文章讨论了这个问题并提供了几种解决方法(下面列出的链接)。
但在使用 SSIS 多年之后,我可以说 最佳做法是将 excel 文件转换为 csv 文件并使用平面文件组件读取它们。
或者,如果您无法选择将 excel 转换为平面文件,那么您可以强制 excel 连接管理器忽略第一行中的 headers 并添加HDR=NO
到连接字符串并添加 IMEX=1
以告诉 OLEDB 提供程序从第一行指定数据类型 (这是 header - 大多数时候都是字符串),在这种情况下,所有列都作为字符串导入,并且没有值被 NULL 替换,但是您将丢失 headers 和一个额外的行(导入 header 行)。
如果您不能忽略 header 行,只需在 [= 之后添加一个包含虚拟字符串值 (例如:aaa
) 73=] 行并将 IMEX=1
添加到连接字符串。
SchemaMapper Excel 导入 class
此外,最好检查以下 class,它是 SchemaMapper 项目的一部分,我实现了上述逻辑以解决此问题:
有用的链接
SSIS 脚本任务只读取 excel 的数值,但无法读取同一列中存在的字母数字值
我试过使用 IMEX=0、IMEX=1 和 IMEX=2。但是在我的 SQL 服务器 table.
中,字母数字值生成为 NULL//Excel Connection String
string ConStr;
ConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
fileFullPath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR +
";IMEX=0\"";
如果第 8 列 'A' 值是整数 (0,1,2,3,4,5,6,7),然后在下面的行中出现字母数字 (A,B,ABQX345) 值, 然后它应该按原样读取所有值并插入 SQL Server table as
0,1,2,3,4,5,6,7,A,B,ABQX345
此问题与用于读取 excel 文件的 OLEDB 提供程序有关:由于 excel 不是每个列都有特定数据类型的数据库,OLEDB 提供程序会尝试识别主要数据在每一列中找到的类型,并替换所有其他无法用 NULL 解析的数据类型。
网上有很多文章讨论了这个问题并提供了几种解决方法(下面列出的链接)。
但在使用 SSIS 多年之后,我可以说 最佳做法是将 excel 文件转换为 csv 文件并使用平面文件组件读取它们。
或者,如果您无法选择将 excel 转换为平面文件,那么您可以强制 excel 连接管理器忽略第一行中的 headers 并添加HDR=NO
到连接字符串并添加 IMEX=1
以告诉 OLEDB 提供程序从第一行指定数据类型 (这是 header - 大多数时候都是字符串),在这种情况下,所有列都作为字符串导入,并且没有值被 NULL 替换,但是您将丢失 headers 和一个额外的行(导入 header 行)。
如果您不能忽略 header 行,只需在 [= 之后添加一个包含虚拟字符串值 (例如:aaa
) 73=] 行并将 IMEX=1
添加到连接字符串。
SchemaMapper Excel 导入 class
此外,最好检查以下 class,它是 SchemaMapper 项目的一部分,我实现了上述逻辑以解决此问题:
有用的链接