SSISを使用して、JetドライバーでOLE Connectを使用してExcelを読み取るか、別の接続タイプの「Excel接続」を使用できます。
私が恐れていたように、どちらもマージセルを使用してファイルを読み取る際に問題が発生するようです。
「Excel接続」を使用した場合にSSISがExcelに接続するために何を使用しているか知りたいです。
VBA以外に、サーバー上のセル、数式、書式設定などをマージしたExcelファイルを読み取るために何を提案しますか?Excel2003を使用しています。
アップデート
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();
}
次のようなスプレッドシートを読んだとき:
次に、デバッガービジュアライザーを使用してデータセットを表示します。これが表示されます。丸で囲んだソーススプレッドシートのデータが、表示されているDataTableから欠落していることに注意してください。
Microsoft OLE DB Provider forJet4.0を使用したExcel接続についてのポイントについて。SSISには、2つの別個の接続オブジェクトがあります。1つ目はExcelConnectオブジェクトです。プロパティページは次のようになります。
2つ目は、JETドライバーを使用してExcelを指すOLE接続オブジェクトです。
ExcelConnectionオブジェクトは実際に4.0Jetドライバーを使用していますか、それは同じことを行うための簡単な方法ですか、それともこれらの接続タイプは何らかの方法で本当に異なりますか?