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

问题描述 投票:0回答:5

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

  1. 将带有标题的空白 Excel 工作表复制为新文件
  2. 运行数据流任务在工作表中填充数据。
  3. 打开 Excel 时,所有数字数据都会显示“数字存储为文本”错误。

这会使我的所有图表停止工作。我想知道如何通知excel将特定列数据处理为数字。

ssis
5个回答
5
投票

我尚未测试的一种可能的解决方案是将数字字段转换为 DT_R8 或 DT_CY。 Excel 目标似乎仅支持这些数字数据类型,而 SSIS 目标可能会隐式地将所有其他数据类型转换为文本。

另一种可能的解决方案是将数值添加到数字列,以便它知道将模板表中的目标格式设置为数字。您可以隐藏这些值,也可以使用要发布到文件的新数据覆盖它们。

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


0
投票

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

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

就我而言,将区域设置西班牙西班牙更改为西班牙墨西哥。成功了。


0
投票

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


0
投票

只需在第一行(如果设置第一行有列名称,则为第二行)添加一条临时记录,其中包含具有所需格式的临时值。 Excel 将第一个数据行或第一个数据设置为字段类型。


-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")), " ”)


值2

1234

345

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


值3

1234

345
不适用
550
待定
440
599
不适用
解决方案3
=IIF(IsNumeric(Fields!TEST.Value.ToString()), CDBL(IIF(IsNumeric(Fields!TEST.Value.ToString()), Fields!TEST.Value.ToString(), "0")), 字段!TEST.Value.ToString()),

© www.soinside.com 2019 - 2024. All rights reserved.