通过SSIS动态创建Excel表格

3

在SSIS中使用Execute SQL Task - 创建了包含多个列和不同数据类型的Excel文件。问题在于,即使使用Int/Money数据类型创建了Excel表,INT/Money列仍会显示为文本列。

我尝试过使用double precision、CY数据类型,但都没有解决问题。

CREATE TABLE `Employer` (
`MEMBERSHIP NUMBER` VARCHAR(30),
`RETIREE #` VARCHAR(12),
`COPID` CHAR(6),
`PERSON LAST NAME` VARCHAR(150),
`FIRST NAME` VARCHAR(150),
`RETIREE PLAN` CHAR(15),
`PLAN NAME` CHAR(200),
`BILL GROUP` INT,
`BRANCH ID` CHAR(3),
`CONTRACT NUMBER` CHAR(5),
`PBP` CHAR(3),
`BRANCH NAME` VARCHAR(150),
`COVERAGE MONTH` DATE,
`DUE AMOUNT` INT
)

期望的输出应该是与输入数据类型格式相同。


你需要更改Excel文件中的“NumberFormat”,因为数据类型仅由SSIS使用。你已经得到了一个很好的答案来描述这个问题。 - Yahfoufi
是的!在Excel中进行更改很容易,用户必须手动完成,但如何通过系统自动化呢? - Koti Raavi
你需要使用一个带有Interop.Excel.dll的脚本任务。 - Yahfoufi
1个回答

0

OLE DB数据类型和Excel

即使您可以使用OLE DB命令在Excel中创建表,但Excel文件并不是数据库,其中列具有数据类型。OLE DB提供程序仅读取表格数据,并需要为每个列指定数据类型。因此,在处理Excel时,必须指定列的数据类型,即使Excel具有在同一列中存储多种数据类型的能力。

使用OLE DB提供程序读取Excel的缺点之一是,如果某列包含混合数据类型,则它只读取主导数据类型,并将所有剩余的数据类型转换为NULL

Excel数字格式属性

另一方面,Excel 中有一个称为“数字格式”的单元格属性,用于更改 Excel 中显示值的方式。您可以使用此属性将值显示为货币。

解决方案

您可以使用两种方法来解决此问题:

(1) 使用脚本任务更改列号格式

您可以添加一个脚本任务,并使用Interop.Excel.dll程序集更改整个列号格式。

(2) 创建Excel模板文件

您可以创建一个Excel文件,并根据需要更改列的编号格式,然后将此文件用作模板。您可以将文件复制到目标目录,然后执行数据导入阶段。


我正在尝试使用模板,但仍然将数据加载为文本而不是数字。 - Koti Raavi
@KotiRaavi 确保你将整个列的数字格式更改为货币。 - Hadi
我正在将数据导出为 .xlsx 格式的 Excel 文件。我已经在 Excel 中将同一列格式设置为货币,但是在加载数据后它会从数字格式更新为“常规”格式。谢谢! - Koti Raavi
@KotiRaavi 那么您应该前往第一个建议的解决方案,并在包的末尾添加一个脚本任务。 - Hadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接