从 SSIS 生成 excel 但在每一列中都获得报价?

Posted

技术标签:

【中文标题】从 SSIS 生成 excel 但在每一列中都获得报价?【英文标题】:generated excel from SSIS but getting quote in every column? 【发布时间】:2013-05-23 03:47:41 【问题描述】:

我成功拥有generated and excel from SSIS package。 但是every column 有额外的'(引号)标记为什么会这样?

我的源 sql 表如下所示

Name    price    address
ashu    123      pune
jkl     34       UK

在我的sql table 中,我将all column 作为varchar(50) 数据类型。 在Excel Manager要创建表的时候 Excel Destination 将所有列作为相同的 varchar(50) 数据类型。

而在Data Flow我已经使用Data Conversion transformation来防止unicode转换错误。

请告知我需要更改的地方以获取 excel 文件中的清晰列。

【问题讨论】:

【参考方案1】:

您可以创建一个模板 Excel 文件,在其中指定了所有列类型(从常规更改为文本)和您需要的标题。将其存储在/Template 目录中,并将其复制到 SSIS 包中您需要它的位置。

在您的 SSIS 包中:

    使用脚本组件将 Excel 模板文件复制到选择的目录中。 以编程方式更改其名称并将整个文件路径存储在一个变量中,该变量将在您的相应数据流任务中使用。 为您的 Excel 连接管理器使用表达式生成器。设置要从变量中检索的 ExcelFilePath

【讨论】:

【参考方案2】:

单引号或撇号是一种输入任何数据(在 Excel 中)并确保将其视为文本的方式,因此 Excel 不会将带有前导零或分数的数字解释为数字或日期。

新泽西州邮政编码,例如 07456 将被解释为 7456,但输入为 '07456 时,它会保持其前导零(请注意,示例中的数字是左对齐的,就像文本一样)

我猜 SSIS 正在添加引号,因为您的数据是 VARCHAR 类型

【讨论】:

如何防止它,因为我想进一步使用这个 excel 文件,这可能是错误的输入文件。请指教?【参考方案3】:

首先,在 SSIS 中为您的 excel 目标定义字段类型,任何非文本字段都将正确格式化而无需 '.然后,在源和目标之间添加派生列转换,并对任何文本列使用替换语句。 应该是:

(REPLACE(Column1, "'","")

【讨论】:

【参考方案4】:

这给我带来了重大问题!所以我完成了以下工作: 您可以在 SSIS 包的 excel 连接管理器中将 excel 版本更改为“Microsoft Excel 4.0”。 然后在 excel 中按照选项 > 信任中心 > 信任中心设置 > 文件块设置 > 取消选中“Excel 4 工作簿”和“工作表”的“打开”复选框。

【讨论】:

【参考方案5】:

在使用 Excel 目标时这是一个特殊的问题,至少在旧版本的 SSIS 中是这样。要回答为什么问题,Microsoft 文档中有这样的内容:

将数据保存到 Excel 目标时,包含在 Excel 驱动程序中的 Jet 提供程序的以下行为可能会导致意外结果。

保存文本数据。当 Excel 驱动程序将文本数据值保存到 Excel 目标时,驱动程序在每个单元格中的文本前面加上单引号字符 (') 以确保保存的值将被解释为文本值。如果您拥有或开发其他应用程序来读取或处理保存的数据,则可能需要对每个文本值之前的单引号字符进行特殊处理。

取自https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms137643(v=sql.105)

【讨论】:

以上是关于从 SSIS 生成 excel 但在每一列中都获得报价?的主要内容,如果未能解决你的问题,请参考以下文章

请问如何获得GridView选中行的每一列的信息?

在反应应用程序的不同列中选择单元格

请问如何获得GridView选中行的每一列的信息?

SSIS - 将数据从 Excel 导出到 sql 表

如何一次性检测和删除熊猫数据帧每一列的异常值? [复制]

将数据框中的每一行除以 Python 中的向量