【问题标题】:Data type issue creating an Excel file using the ACE OLEDB Provider使用 ACE OLEDB Provider 创建 Excel 文件的数据类型问题
【发布时间】:2013-07-18 19:34:10
【问题描述】:

我正在使用 ACE OLE DB 提供程序和执行 SQL 任务来创建 Excel 文件。 我使用的连接字符串是这样的:

Data Source=C:\MyFolder\MyFile.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties="EXCEL 12.0 XML;HDR=YES";

SQL 命令是这样的:

CREATE TABLE [Query] (
[ProductAssemblyID] Numeric,
[ComponentID] Numeric,
[ComponentDesc] String,
[TotalQuantity] Numeric,
[StandardCost] Currency,
[ListPrice] Currency,
[BOMLevel] Numeric,
[RecursionLevel] Numeric)

然后我使用 Excel 目标来填充文件。当我打开结果文件时,所有列都是文本列,数字存储为文本。 我哪里做错了?

谢谢。

【问题讨论】:

    标签: excel ssis ms-jet-ace


    【解决方案1】:

    这是我通常如何处理像你这样的任务:

    1. 创建包含所需列的 Excel 文件
    2. 向新文件添加 Excel 数据连接
    3. 创建数据流
    4. 添加 OLE DB 源SELECT ... FROM ...
    5. 添加 Excel 目标并设置为 Excel 连接
    6. 根据需要映射列
    7. Excel Destination高级编辑器中,设置列数据类型

    【讨论】:

    • 嗨 Mike,我尝试更改 Excel 目标外部列数据类型,但 Excel 目标显示一条警告,指出元数据不同步,生成的 Excel 文件始终包含文本列...我还检查了 Excel 目标输入列数据类型,它们以正确的方式分配。我想不出解决办法...
    • 一个不太优雅的尝试是有一个“虚拟”行,其中包含您需要的数据(即日期字段中的 7/19/13)。这有点杂乱无章,我只在数据源中使用过,但可以尝试一下。当 SSIS 将列转换为字符串并且我需要它是 int 时,我使用过它。
    • 是的,我知道这个解决方法。唯一的问题是我必须在运行时创建 Excel 文件,所以我不能使用带有隐藏行的模板。我只是尝试使用 Jet 提供程序,一切正常!所以 SSIS 以一种错误的方式管理 ACE !!! :(
    • 我刚刚找到了这个连接项:Excel Data Types from SSIS。 SQL Server 2012 中仍然存在该错误...
    • 这对于仍然存在的错误来说太糟糕了。因为一旦你需要在 64 位机器上运行 SSIS 包,使用 Jet 将是另一个令人头疼的问题。
    【解决方案2】:

    我已经为此苦苦挣扎了好几天。这是我发现的: 使用默认的扩展属性(EXCEL 12.0 XML;HDR=YES),这些提供程序都没有工作(即它们创建文本字段而不是数字、日期等):

    • Microsoft.ACE.OLEDB.12.0 (Microsoft Excel 2007-2010)
    • Microsoft.ACE.OLEDB.15.0 (Microsoft Excel 2013)
    • Microsoft.ACE.OLEDB.16.0 (Microsoft Excel 2016)

    正如@lucazav 所述,选择较旧的 Microsoft.Jet.OLEDB.4.0 提供程序(如果有的话)确实有效。这就是您选择“Excel 97-2003”时使用的内容。但是,如果您需要部署到生产机器或没有旧的 JET 驱动程序,您可能会发现它不再可用,在 64 位机器上无法运行等。

    但是,您不需要安装旧的 JET 驱动程序。只需更改扩展属性,我就能使 ACE.OLEDB.12.0 工作。

    改变

    Excel 12.0 XML;HDR=YES
    

    Excel 8.0;HDR=YES
    

    另外,您需要将文件扩展名设置为 .xls 而不是 .xlsx。否则,当你用 Excel 打开文件时,它会抱怨扩展名与实际文件类型不匹配。

    HDR 是可选的,但我需要标题,所以我使用它。我不认为“Excel”的大小写很重要。

    Microsoft 下载页面上Microsoft Access Database Engine 2010 Redistributable 的安装说明向我介绍了此解决方案(这是获取 Microsoft.ACE.OLEDB.12.0 提供程序的方式)。

    “Excel 8.0”也是使用 JET 时默认的扩展属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多