【问题标题】:SSIS Excel Source Connection. What does it use to read Excel?SSIS Excel 源连接。它用什么来读取 Excel?
【发布时间】:2012-09-18 23:13:48
【问题描述】:

使用 SSIS,我可以使用带有 Jet 驱动程序的 OLE Con​​nect 来读取 Excel,或者我可以使用单独的“Excel 连接”连接类型

正如我所担心的那样,两者似乎在读取包含合并单元格的文件时都有问题。

我很好奇 SSIS 在使用“Excel 连接”时使用什么来连接 Excel。

除了 VBA,对于在服务器上读取包含合并单元格、公式、格式等的 Excel 文件,您有什么建议?我正在使用 Excel 2003。

更新

这是我用来读取 XLS 的代码:

private static void GetExcelSheets(string filePath)
        {
            string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'", filePath, "no");

            OleDbConnection excelConnection = new OleDbConnection(connectionString);
            OleDbCommand cmdExcel = new OleDbCommand();
            OleDbDataAdapter oda = new OleDbDataAdapter();
            cmdExcel.Connection = excelConnection;

            if (excelConnection.State == ConnectionState.Open)
            {
                excelConnection.Close();
            }
            excelConnection.Open();

            OleDbCommand oleDbCommand = new OleDbCommand();
            oleDbCommand.CommandType = System.Data.CommandType.Text;
            oleDbCommand.Connection = excelConnection;
            OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(oleDbCommand);

            DataTable dtExcelSheetName = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string getExcelSheetName = dtExcelSheetName.Rows[5]["Table_Name"].ToString();
            oleDbCommand.CommandText = "SELECT * FROM [" + getExcelSheetName + "]";
            oleDbDataAdapter.SelectCommand = oleDbCommand;
            DataTable dtExcelRecords = new DataTable();
            oleDbDataAdapter.Fill(dtExcelRecords);

            excelConnection.Dispose();

        }

当我阅读如下所示的电子表格时:

然后使用调试器 Visualizer 显示数据集,我看到了。请注意,显示的 DataTable 中缺少我圈出的源电子表格中的数据:

关于使用 Microsoft OLE DB Provider for Jet 4.0 的 Excel 连接点。在 SSIS 中,有两个独立的连接对象。第一个是 Excel 连接对象。它的属性页面如下所示:

第二个是使用 JET 驱动程序并指向 Excel 的 OLE 连接对象。

Excel Connection 对象是否真的使用 4.0 Jet 驱动程序,它只是做同样事情的一种简写方式,还是这些连接类型在某些方面真的不同?

【问题讨论】:

    标签: .net-4.0 ssis excel-2003


    【解决方案1】:

    根据微软:

    Excel 连接管理器使用 Microsoft OLE DB Provider for Jet 4.0 及其支持的 Excel ISAM(索引顺序访问方法)驱动程序来连接 Excel 数据源并读取和写入数据。

    来源MSDN


    关于如何正确导入包含合并单元格的 Excel 工作表:您需要确保在转换中映射了最左侧的列才能获取值。在合并的一组单元格中不是最左边的任何单元格都将是null。我认为这是一个合理的期望,因为 SSIS 通常与没有“合并”单元格概念的数据库源一起使用。

    【讨论】:

    • @ChadD:不幸的是,我在一个阻止 imgur 链接的公司网络上,所以我看不到你的屏幕截图;我回家后会尽力跟进。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多