使用 SSIS,我可以使用带有 Jet 驱动程序的 OLE Connect 来读取 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 驱动程序,它只是做同样事情的一种简写方式,还是这些连接类型在某些方面真的不同?