【问题标题】:Import excel with leading empty cells removes commas导入带有前导空单元格的 excel 删除逗号
【发布时间】:2020-09-22 07:57:57
【问题描述】:

我有一个包含一些数据的简单 excel 文件。某些特定列可以为 NULL、0 或具有 numeric(10,5) 的长度,例如以下格式:12345.12345。

excel 源的输出列配置为 SSIS 类型 DT_R8(双精度浮点)。

这很好用。其他一些文件的格式相同,但有时标题后的前导行为空

在这种情况下,SSIS 将导入以下不带逗号的行。他们只是被删除。 12345.12345 将是 1234512345。

所以我将 excel 输出列更改为 SSIS 类型 DT_WSTR(50)(这是 unicode-text) 并再次将转换任务实现为 DT_R8(双精度)。这适用于带有前导空单元格的文件!

但是如果我导入另一个文件而不引导空行 - 我会得到巨大的结果:

9,98994 转换为 9,9894E+16。另一个更糟糕的例子(图中未显示):408,452 将转换为 408452。

因此,要么我导入 DT_R8(浮点)类型的 excel 并在导入 空前导单元格 时丢失逗号,要么我使用转换任务导入 DT_WSTR(文本)类型的 excel,并在导入时获得大量数字 没有空的前导单元格。

我不知道这是什么错误以及如何修复它。我尝试了很多数据转换并尝试了很多数据类型。我无法自行更改 excel 文件,因为它是自动生成的,我无法使用WHERE COLUMNNAME IS NOT NULL-条件导入,因为其他列也包含重要数据。

编辑: 带有前导空单元格的文件的附加信息:这种文件格式有点奇怪,是导致错误的原因。第一个值为 0 的值位于第 65 行:

浮点值从第 1061 行开始: 。

我认为为时已晚,SSIS 将此列解释为不带逗号的整数值。

【问题讨论】:

  • 我想知道这是否部分原因是工具缺乏本地化?在美国,逗号是数字分组字符,句点表示十进制数字分隔符,而德国使用相反。您将遇到的另一个挑战是那些初始的空列会影响 Excel 呈现给 SSIS 的键入内容。甚至像“始终导入为 DT_WSTR”这样的规则也可能导致像 date in Excel 这样的问题,因为自 1900-01-01 以来的日子可能会进入管道
  • 非常感谢您编辑我的帖子并提供好的提示@billinkc。我回答了解决方案。 your link 是什么意思?
  • 链接用于指向一篇文章和处理将Excel内部日期数字转换为实际日期的代码补救措施。自 1900-01-01 以来的天数不准确,因为 Excel 在 Lotus 1-2-3(早期的竞争对手)犯了同样的逻辑错误stackoverflow.com/a/62182403/181965

标签: excel ssis etl


【解决方案1】:

billinkc 的提示是正确的!没有他的猜测,我不会尝试,但问题出在这个国家。在转换任务中,我必须用输入列中的逗号替换点:

ISNULL(anspr_vk) || LEN(TRIM(anspr_vk)) == 0 ? "0,0" : REPLACE(anspr_vk,".",",")

这花了我一些时间 - 非常感谢你让我找到正确的方法,blinkc!

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多