|
// *********************************************************
// リストボックスにExcelシートの一覧を追加
// 戻り値 : 成功 true, 失敗 false
// ※ ADO 版
// *********************************************************
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "EndOfFile")
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
BOOL LboxEnumExcelSheetAdo( HWND hList, int nIndex, LPCTSTR szFile )
{
if ( *szFile == 0x00 ) {
LboxListInsert( hList, nIndex, "*ERROR\tファイル名を指定して下さい" );
return false;
}
if ( !PathFileExists( szFile ) ) {
LboxListInsert( hList, nIndex, "*ERROR\tファイルが存在しません" );
return false;
}
LPTSTR lpExt;
lpExt = PathFindExtension( szFile );
if ( *lpExt != '.' ) {
LboxListInsert( hList, nIndex, "*ERROR\tExcelではありません" );
return false;
}
if( StrStrI( lpExt, "xls" ) == NULL ) {
LboxListInsert( hList, nIndex, "*ERROR\tExcelではありません" );
return false;
}
BOOL bRet;
_ConnectionPtr pCn;
_RecordsetPtr pRs;
_variant_t vValue;
pRs = NULL;
pCn = NULL;
CoInitialize(NULL);
_bstr_t ConnectString("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
_bstr_t StringBuffer("");
StringBuffer.operator = (szFile);
ConnectString.operator += (StringBuffer);
StringBuffer.operator = (";Extended Properties=\"Excel 8.0;\"");
ConnectString.operator += (StringBuffer);
try {
TESTHR(pCn.CreateInstance(__uuidof(Connection)));
pCn->Open(ConnectString, "", "", adConnectUnspecified);
TESTHR(pRs.CreateInstance(__uuidof(Recordset)));
pRs = pCn->OpenSchema( adSchemaTables );
while( !(pRs->EndOfFile) ) {
vValue = pRs->Fields->GetItem("TABLE_NAME")->Value;
StringBuffer.operator = (vValue);
LboxListInsert( hList, nIndex, (LPTSTR)StringBuffer );
pRs->MoveNext();
nIndex++;
}
pRs->Close();
pRs.Release();
pRs = NULL;
pCn->Close();
pCn.Release();
pCn = NULL;
bRet = true;
}
catch (_com_error &e)
{
LboxListInsert( hList, nIndex, e.ErrorMessage() );
bRet = false;
}
CoUninitialize();
return bRet;
}
| |