출처 : http://q.hatena.ne.jp/1259456311
ADO と ADO.NET による Excel ファイルを読み込むサンプルを用意してみました。
Excel ファイルは以下の形式を想定しています。
ブック名:[book1.xls] / シート名:[Sheet1]
A | B | |
---|---|---|
1 | key | value |
2 | 項目1 | 値1 |
3 | 項目2 | 値2 |
4 | 項目3 | 値3 |
ADO も ADO.NET も「Jet OLE DB プロバイダ」と「データベースの種類」を接続文字列にて指定することで、Excel ファイルにアクセスすることが可能です。
<接続文字列の例> Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES;"
<ADO 概要> [アプリケーション] | [ADO] … ADODB.Connection | [OLE DB] | [OLE DB Provider] … Microsoft.Jet.OLEDB.4.0 | [ISAM ドライバ] … Extended Properties="Excel 8.0;HDR=YES;" | [Excel ファイル] … Data Source=C:\book1.xls
<ADO.NET 概要> [.NET アプリケーション] | [ADO.NET] | [.NET Framework Data Provider for OLE DB] … OleDbConnection | [OLE DB] | [OLE DB Provider] … Provider=Microsoft.Jet.OLEDB.4.0 | [ISAM ドライバ] … Extended Properties="Excel 8.0;HDR=YES;" | [Excel ファイル] … Data Source=C:\book1.xls
<データベースの種類> Excel 5.0 … Excel 5.0 および 7.0 (95) 形式 Excel 8.0 … Excel 8.0 (97), 9.0(2000), 10.0(2002) 形式
まず、はじめは WSH(VBScript)+ ADO のサンプルです。
' File : AdoExcelTest.vbs ' Usage : CScript //Nologo AdoExcelTest.vbs [Enter] Option Explicit Call Main() Sub Main() Dim cn Set cn = CreateObject("ADODB.Connection") Dim strFileName Dim strCon strFileName = "C:\home\edu\hatena\gontakun_55\1259456311\book1.xls" strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileName & ";Extended Properties=""Excel 8.0;HDR=YES""" cn.Open strCon Dim rs Set rs = cn.Execute("SELECT * FROM [Sheet1$]") While Not rs.BOF And Not rs.EOF WScript.Echo "key = [" & rs(0) & "], value = [" & rs(1) & "]" rs.MoveNext Wend rs.Close cn.Close End Sub
<実行結果> key = [項目1], value = [値1] key = [項目2], value = [値2] key = [項目3], value = [値3]
次に、VC++2008(C++) + ADO のサンプルです。
// File : AdoExcelTest.cpp // Compile : cl AdoExcelTest.cpp [Enter] // Usage : AdoExcelTest.exe [Enter] #import "C:\Program Files\Common Files\System\ADO\msado15.dll" \ no_namespace rename("EOF", "EndOfFile") #include <stdio.h> #include <comdef.h> int main( int argc, char* argv[] ) { CoInitialize(NULL); _ConnectionPtr cn("ADODB.Connection"); _bstr_t strFileName; _bstr_t strCon; strFileName = "C:\\home\\edu\\hatena\\gontakun_55\\1259456311\\book1.xls"; strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName + ";Extended Properties=\"Excel 8.0;HDR=YES\""; cn->Open( strCon, "", "", adConnectUnspecified ); _RecordsetPtr rs("ADODB.Recordset"); rs = cn->Execute( "SELECT * FROM [Sheet1$]", NULL, 0 ); while ( !rs->GetBOF() && !rs->GetEndOfFile() ) { printf( "key = [%s], value = [%s]\n", (LPCTSTR)(_bstr_t)rs->Fields->Item[0L]->Value, (LPCTSTR)(_bstr_t)rs->Fields->Item[1L]->Value ); rs->MoveNext(); } rs->Close(); cn->Close(); CoUninitialize(); return 0; }
実行結果は1番目と同じです。
そして、最後に、VC++2008(C++/CLI) + ADO.NET のサンプルです。
// File : AdoExcelDotNet.cpp // Compile : cl AdoExcelDotNet.cpp /clr [Enter] // Usage : AdoExcelDotNet.exe [Enter] #using <mscorlib.dll> #using <System.dll> #using <System.Data.dll> using namespace System; using namespace System::Data; using namespace System::Data::OleDb; int main( array<System::String ^> ^args ) { OleDbConnection^ con = gcnew OleDbConnection(); String^ strFileName = gcnew String("C:\\home\\edu\\hatena\\gontakun_55\\1259456311\\book1.xls"); String^ strCon = gcnew String("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName + ";Extended Properties=\"Excel 8.0;HDR=YES;\""); con->ConnectionString = strCon; con->Open(); OleDbCommand^ cmd = gcnew OleDbCommand("SELECT * FROM [Sheet1$]", con ); OleDbDataReader^ reader = cmd->ExecuteReader(); while ( reader->Read() ) { Console::WriteLine("key = [{0}], value = [{1}]", reader["key"], reader["value"] ); } reader->Close(); con->Close(); return 0; }
これも実行結果は1番目と同じです。
なお、サンプルコードを簡略化する為にエラー処理(try ~ catch 等)は、省略してあります。
実際にコーディングする場合は、必要に応じてエラー処理を追加してください。
また、今回の ADO / ADO.NET での使用例は、Excel のデータが「表形式」(テーブル形式)であることが前提です。
データが非定型の場合は、Excel オートメーション(Excel.exe をリモート操作する方法)を使用する必要があります。
'C/C++언어 > 윈도우 프로그래밍' 카테고리의 다른 글
윈도우 버젼, 컴파일러 버젼 macro (0) | 2013.09.09 |
---|---|
VisualStudio 2012 자동주석 Macro (0) | 2013.07.27 |
윈도우7에서 원격 데스크톱 설정 #3 (0) | 2013.03.31 |
윈도우7에서 원격 데스크톱 설정 #2 (0) | 2013.03.31 |
윈도우7에서 원격 데스크톱 설정 #1 (0) | 2013.03.31 |
詳しい説明付きで大変参考になりました。
動作出来るようになり、大変感謝致します。
また、複数のサンプルまでご用意頂き、大変ありがとうございます。
今後の参考にさせて頂きます。
ありがとうございました。