无法从Excel列读取字符串值

时间:2019-07-10 11:09:58

标签: c# sql-server excel ssis script-task

SSIS脚本任务仅读取excel的数值,但无法读取同一列中存在的字母数字值

我尝试使用IMEX = 0,IMEX = 1和IMEX = 2。但是在我的SQL Server表中,字母数字值被生成为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\"";

如果第1 8列的“ A”值是整数(0,1,2,3,4,5,6,7),然后在下面的行中出现字母数字(A,B,ABQX345)值,则应该照原样读取所有值,并以

的形式插入到SQL Server表中
0,1,2,3,4,5,6,7,A,B,ABQX345

1 个答案:

答案 0 :(得分:1)

此问题与用于读取excel文件的OLEDB提供程序有关:由于excel不是每个列都有特定数据类型的数据库,因此OLEDB提供程序尝试识别在每个列中找到的主要数据类型并替换所有其他数据不能用NULL解析的类型。

网上有很多文章讨论此问题,并提供了几种解决方法(下面列出的链接)

但是使用SSIS多年后,我可以说最佳实践是将excel文件转换为csv文件并使用平面文件组件读取它们

或者,如果您没有选择将excel转换为平面文件,则可以强制excel连接管理器忽略第一行中的标头,而是在连接字符串中添加HDR=NO并添加{{1} }告诉OLEDB提供者从第一行(这是标题-大部分时间是所有字符串)中指定数据类型,在这种情况下,所有列均作为字符串导入,并且没有任何值被替换为NULL,但您将丢失标头和另一行(已导入标头行)。

如果您不能忽略标题行,只需在标题行之后添加包含伪字符串值(例如:IMEX=1的伪行,然后将aaa添加到连接字符串。

SchemaMapper Excel导入类

此外,最好检查以下属于SchemaMapper项目的类,我实现了上述逻辑以解决此问题:

有用的链接