c+++はexcelのコードを読みます。詳しくは分かります。
3464 ワード
c+++はどうやってエクセルを読みますか?C++ODBC操作エクセル全過程
ODBCでExcelテーブルファイルを直接読み、書きたい場合は、まずODBCにExcelテーブルファイルがインストールされているドライバ「MICROFT EXCEL DRIVER(*.XLS)」を確保すること。次に、次のステップに従って、
1.StdAfx.hファイルに追加する:
ODBCでExcelテーブルファイルを直接読み、書きたい場合は、まずODBCにExcelテーブルファイルがインストールされているドライバ「MICROFT EXCEL DRIVER(*.XLS)」を確保すること。次に、次のステップに従って、
1.StdAfx.hファイルに追加する:
#include <afxdb.h>
#include <odbcinst.h>
2.ODBCでExcelファイルを直接作成する(暫定ファイル名:Demo.xls)
// Excel
void CRWExcel::WriteToExcel()
{
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel
CString sExcelFile = "c:\\demo.xls"; // Excel
CString sSql;
TRY
{
//
sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, sExcelFile, sExcelFile);
// ( Excel )
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// ( 、 )
sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
database.ExecuteSQL(sSql);
//
sSql = "INSERT INTO demo (Name,Age) VALUES (' ',26)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES (' ',22)";
database.ExecuteSQL(sSql);
sSql = "INSERT INTO demo (Name,Age) VALUES (' ',27)";
database.ExecuteSQL(sSql);
}
//
database.Close();
}
CATCH_ALL(e)
{
TRACE1("Excel : %s",sDriver);
}
END_CATCH_ALL;
}
3.ODBCでExcelファイルを直接読み込む(仮ファイル名:Demo.xls)
// Excel
void CRWExcel::ReadFromExcel()
{
CDatabase database;
CString sSql;
CString sItem1, sItem2;
CString sDriver;
CString sDsn;
CString sFile = "Demo.xls"; // Excel
// Excel "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// Excel
AfxMessageBox(" Excel !");
return;
}
//
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, sFile);
TRY
{
// ( Excel )
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// .
sSql = "SELECT Name, Age "
"FROM demo "
"ORDER BY Name ";
//
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
//
while (!recset.IsEOF())
{
// Excel
recset.GetFieldValue("Name ", sItem1);
recset.GetFieldValue("Age", sItem2);
//
recset.MoveNext();
}
//
database.Close();
}
CATCH(CDBException, e)
{
// ...
AfxMessageBox(" : " + e->m_strError);
}
END_CATCH;
}
// ODBC Excel
CString CRWExcel::GetExcelDriver()
{
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;
// ( odbcinst.h )
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
return "";
// Excel...
do
{
if (strstr(pszBuf, "Excel") != 0)
{
// !
sDriver = CString(pszBuf);
break;
}
pszBuf = strchr(pszBuf, '\0') + 1;
}
while (pszBuf[1] != '\0');
return sDriver;
}
以上はc+++で、どのようにエクセルの詳しい内容を読み取りますか?