0

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

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

我很好奇使用“Excel 连接”时 SSIS 使用什么来连接 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 驱动程序,它只是做同样事情的一种简写方式,还是这些连接类型在某些方面真的不同?

4

1 回答 1

1

据微软称:

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

资料来源MSDN


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

于 2012-09-19T13:46:16.167 回答