人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Visual C++ 2008(Visual Studio)を使用しています。
エクセルファイルに記入してある設定値を読み出したいのですが、検索してもVC++2005やVC#は出てきますが
VC++2008が出てきません。
どなたかご教授お願いします。
また、参考になるURLなどありましたら、合わせてお願い致します。


●質問者: gontakun_55
●カテゴリ:コンピュータ
✍キーワード:C++ URL VC VC++ Visual Studio
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● chyopper
●10ポイント

Visual Studio 2008 + MFCでExcelを操作するには

http://takabosoft.com/20091030101433.html

◎質問者からの返答

ありがとうございます。

見てみましたが、私にはさっぱりでした。

下の質問でも書いていますが、本業以外で必要にせまられている状況ですので、基本的な所は

そのまま使えるものが無いかと探しています。

そんな都合の良いものはないと言われるのは判っていますが、宜しくお願い致します。


2 ● azuco1975
●0ポイント

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35784&fo...

◎質問者からの返答

ありがとうございます。

サンプルがあると思われるURL先が無いみたいです。

メインページから辿ってみましたが、見つけられませんでした。


3 ● cx20
●200ポイント ベストアンサー

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 をリモート操作する方法)を使用する必要があります。

◎質問者からの返答

詳しい説明付きで大変参考になりました。

動作出来るようになり、大変感謝致します。

また、複数のサンプルまでご用意頂き、大変ありがとうございます。

今後の参考にさせて頂きます。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ