从SQL Server导出数据到Excel时,如何避免“存储为文本的数字”错误(SSIS)

时间:2010-08-13 12:33:32

标签: ssis

这就是我在SSIS包中尝试做的事情:

  1. 将包含标题的空白Excel工作表复制为新文件
  2. 运行数据流任务填充工作表中的数据。
  3. 当打开excel时,所有数字数据都显示为“存储为文本的数字”错误。
  4. 这会阻止我的所有图表工作。我想知道如何通知excel将特定列数据视为数字。

4 个答案:

答案 0 :(得分:5)

我未测试的一种可能的解决方案是将数字字段转换为DT_R8或DT_CY。 Excel destination only appears to support these numeric data types和SSIS目标可能隐式将所有其他数据类型转换为文本。

另一种可能的解决方案是add numeric values to the numeric columns,以便它知道在模板表中将目标格式化为数字。您可以隐藏值,也可以使用要发布到文件的新数据覆盖它们。

就个人而言,如果我知道我需要导出到Excel,那么我使用SSRS报告并使用sp_start_job为计划作业运行报告订阅。 SSIS中导入和导出到Excel功能非常糟糕,因为它们依赖于Jet 4.0引擎。

答案 1 :(得分:0)

SQL Server,默认情况下,数字格式为27376.00。如果您的区域设置与此格式的Windows不同,则不起作用。

复制示例:2,7376.00" 您的Windows格式需要:" 2.7376,00"

就我而言,将西班牙语区域设置更改为西班牙语墨西哥语。它奏效了。

答案 2 :(得分:0)

我会添加一行包含模板数据和格式并隐藏该行。这对我有用。导入时,它将复制第一个(隐藏)行格式。

答案 3 :(得分:-1)

以下是针对3种不同毛刺的3种不同解决方案:
值1
1234
空白单元
1234
解决方案2
= IIF(IsNumeric(Fields!TEST.Value.ToString()),CDBL(IIF(IsNumeric(Fields!TEST.Value.ToString()),Fields!TEST.Value.ToString(),“0”)),“ “)


Value 2

1234

345个

解决方案2
= IIF(IsNumeric(Fields!TEST.Value.ToString()),CDBL(IIF(IsNumeric(Fields!TEST.Value.ToString()),Fields!TEST.Value.ToString(),“0”)),“ NULL“)


Value 3

1234

345个
N / A
550个
TBA
440个
599个
不适用的
解决方案3
= IIF(IsNumeric(Fields!TEST.Value.ToString()),CDBL(IIF(IsNumeric(Fields!TEST.Value.ToString()),Fields!TEST.Value.ToString(),“0”)),Fields !TEST.Value.ToString()),