CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)") // Excel安装驱动
CString sSql
CString sFileName
CFileDialog fDlg(false, _T("xls"), NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("xls File (*.xls)|*.xls|"),NULL)
if(fDlg.DoModal()==IDOK)
{
sFileName = fDlg.GetPathName()
}
else
{
return false
}
try
{
// 创建进行存取的字符串
sSql.Format(_T("DRIVER={%s}DSN=''FIRSTROWHASNAMES=1READONLY=FALSECREATE_DB=%sDBQ=%s"),sDriver, sFileName, sFileName)
if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
{
// 创建表结构
sSql = _T("create table 数据管理(序号 int,分公司 char(10),时间 char(10))")
CMySqlite mysql
database.ExecuteSQL(sSql)
for (int i = 0i < countDMflasei++)
{
sSql.Format(_T("INSERT INTO 数据管理(序号,分公司,时间) VALUES(%d,'%s','%s')"),xx,xx,xx)
database.ExecuteSQL(sSql)
}
}
// 关闭数据库
database.Close()
AfxMessageBox(_T("数据导出成功!"))
}
catch( _com_error *e)
{
AfxMessageBox(e->ErrorMessage())
}
MFC访问EXCEL,那可是比较麻烦的了。给个以前做过的项目。是访问数据库的 你自己整理着看下 希望有帮助。if(m_bDataBase) //有数据库
{
HRESULT hr
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection")///创建Connection对象
if(SUCCEEDED(hr))
{
m_pConnection->ConnectionTimeout=3///设置超时时间为3秒
CString szOpen = theApp.m_szDataMisDir
if(szOpen.Right(1) != "\\")
szOpen += "\\"
//hr = m_pConnection->Open(Filepath,"","",adModeUnknown)
#ifndef _OFFICE97
szOpen = "Provider=Microsoft.Jet.OLEDB.4.0Data Source="+szOpen+"BiocaDatabase.mdb"
#else
szOpen = "Provider=Microsoft.Jet.OLEDB.3.51Data Source="+szOpen+"BiocaDatabase.mdb"
#endif
hr = m_pConnection->Open((_bstr_t)szOpen,"","",adModeUnknown)
}
}
catch(_com_error e)//捕捉异常
{
CString temp
if(m_bChinese) temp.Format("连接数据库错误信息:%s",e.ErrorMessage())
else temp.Format("Connecting database failure:%s",e.ErrorMessage())
AfxMessageBox(temp)
m_pConnection = NULL
}
//如果当前数据库为空,则导入最近使用的数据库
if(m_pConnection!=NULL)
{
CString szSQL = "SELECT * FROM TestData"
_RecordsetPtr pSearchRecordSet
try
{
pSearchRecordSet.CreateInstance("ADODB.Recordset")
pSearchRecordSet->Open((_variant_t)szSQL,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText)
if(pSearchRecordSet->adoEOF)
{
if(!CopyFile(m_szDesFileName1,m_szDataMisDir+"\\BiocaDatabase.mdb",FALSE))
{
//判断是否是装完软件后第一次运行
int RunNo=GetProfileInt("RunNo","No",0)//第一次运行
if(RunNo==0) WriteProfileInt("RunNo","No",1)//已经运行过了
else
{
if(m_bChinese) AfxMessageBox("导入数据库失败!")
else AfxMessageBox("Input database failure!")
}
}
}
}
catch(_com_error e)///捕捉异常
{
CString temp
if(m_bChinese) temp.Format("导入数据库出错:%s",e.ErrorMessage())
else temp.Format("Input database failure:%s",e.ErrorMessage())
AfxMessageBox(temp)
}
} //if(!m_pConnection=NULL)
} //if(m_bDataBase)
可以用多种方法,比如说用ODBC对excel数据库进行 *** 作,或者说用excel 的COM接口进行编程。我找到一个例子关键代码如下://创建并写入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=1READONLY=FALSECREATE_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
}
// 读取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("ODBCDRIVER={%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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)