一、MFC中怎么读取Excel文件里的每个单元格内容
//第一步:打开文件CFile f;CFileException e;// 打开文件if (!f.Open("D:\\Book1.xls", CFile::modeRead, &e)){TCHAR szError[1024];e.GetErrorMessage(szError, 1024);AfxMessageBox(szError);return;}//第二步:读取版本号// 读取版本while (dwPos < dwlen){nread="f.Read((void*)&RecNo," 2);if="" (recno="=" xl_bof)="" {word="" ver,="" type;f.read((void*)&reclen,="" 2);f.read((void*)&ver,="" 2);f.read((void*)&type,="" 2);f.seek(reclen,="" cfile::current);int="" ver="0;switch" (ver){case="" biff7:ver="7;break;case" biff8:ver="8;AfxMessageBox("Biff8");break;}int" type="0;switch" (type){case="" workbook:type="5;AfxMessageBox("Workbook");break;case" worksheet:type="16;AfxMessageBox("Worksheet");break;case" chart:type="32;AfxMessageBox("Chart");break;}break;}dwPos" =="" f.getposition();}="" 第三步:读其它数据f.seektobegin();dwpos="f.GetPosition();//" 读表格数据while="" (dwpos="">< dwlen){nread="f.Read((void*)&RecNo," 2);switch="" (recno){case="" xl_bof:{f.read((void*)&reclen,="" 2);afxmessagebox("bof");}break;case="" xl_boundsheet:{dword="" temp;byte="" visi;byte="" type;tchar="" name;f.read((void*)&reclen,="" 2);f.read((void*)&temp,="" 4);f.read((void*)&visi,="" 1);f.read((void*)&type,="" 1);f.read((void*)&strlen,="" 2);f.read((void*)&name,="" strlen);char="" buf[128];memset(buf,="" 0x0,="" 128);strncpy(buf,="" &name,="" strlen);afxmessagebox(buf);}break;case="" xl_dimension:f.read((void*)&reclen,="" 2);f.seek(reclen,="" cfile::current);afxmessagebox("dimension");break;case="" 0xe2:="" interfacedf.read((void*)&reclen,="" 2);afxmessagebox("e2");break;case="" xl_sst:f.read((void*)&reclen,="" 2);f.seek(reclen,="" cfile::current);afxmessagebox("sst");break;case="" xl_number:f.read((void*)&reclen,="" 2);afxmessagebox("number");break;case="" xl_string:f.read((void*)&reclen,="" 2);afxmessagebox("string");break;case="" xl_rk:f.read((void*)&reclen,="" 2);afxmessagebox("rk");break;case="" xl_label:{f.read((void*)&reclen,="" 2);afxmessagebox("label");}break;case="" 0xd6:f.read((void*)&reclen,="" 2);afxmessagebox("rstring");break;case="" xl_eof:dwpos="dwLen;AfxMessageBox("Eof");break;default:nRead" =="" f.read((void*)&reclen,="" 2);if="" (nread="=" 0)dwpos="">
二、MFC读取excel里面内容写入到TXT
这个是使用ODBC来完成的 第一步:建立基于对话框的MFC工程,命名为MfctoExc;第二步:添加两个头文件到stdafx.h, #include #include AfxMessageBox("数据库错误: " + e->m_strError); } END_CATCH; } void CMfctoExcDlg::OnWrite() {// TODO: Add your control notification handler code here CDatabase database; CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动 CString sExcelFile,sPath; CString sSql;//获取主程序所在路径,存在sPath中 GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH); sPath.ReleaseBuffer (); int nPos; nPos=sPath.ReverseFind ('\\'); sPath=sPath.Left (nPos); sExcelFile = sPath + "\\Demo.xls"; // 要建立的Excel文件 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 Exceldemo (Num Number,Name TEXT,Age NUMBER)";//可以用中文表示序号,姓名,年龄等 database.ExecuteSQL(sSql); // 插入数值 sSql = "INSERT INTO Exceldemo (Num,Name,Age) VALUES (1,'小西',24)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO Exceldemo (Num,Name,Age) VALUES (2,'小东',22)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO Exceldemo (Num,Name,Age) VALUES (3,'小朱',25)"; database.ExecuteSQL(sSql); sSql = "INSERT INTO Exceldemo (Num,Name,Age) VALUES (4,'小鸭',27)"; database.ExecuteSQL(sSql); } // 关闭数据库 database.Close(); AfxMessageBox("Excel文件写入成功!"); } CATCH_ALL(e) { TRACE1("Excel驱动没有安装: %s",sDriver); } END_CATCH_ALL; } 第五步:添加成员函数 CString CMfctoExcDlg::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; } 文件存储路径设置:CString filename, sExcelFile ; CFileDialog fileDlg (FALSE, "Path", filename,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, "*.xls"); if( fileDlg.DoModal()==IDOK) { sExcelFile = fileDlg.GetPathName(); // 要建立的Excel文件 CFileFind finder; BOOL bWorking = finder.FindFile(sExcelFile);//寻找文件 if (bWorking)//如果已经存在文件,则删除 { CFile::Remove((LPCTSTR)sExcelFile); } } else return ; 将变量写入Excel可以用下面的笨方法:for(int i=0;i<5;i++) {="" ssql="INSERT INTO Exceldemo (。 //第一步:打开文件CFile f;CFileException e;// 打开文件if (!f.Open(" d:\\book1.xls",="" cfile::moderead,="" &e)){tchar="" szerror[1024];e.geterrormessage(szerror,="" 1024);afxmessagebox(szerror);return;}//第二步:读取版本号//="" 读取版本while="" (dwpos="">5;i++)>< dwlen){nread="f.Read((void*)&RecNo," 2);if="" (recno="=" xl_bof)="" {word="" ver,="" type;f.read((void*)&reclen,="" 2);f.read((void*)&ver,="" 2);f.read((void*)&type,="" 2);f.seek(reclen,="" cfile::current);int="" ver="0;switch" (ver){case="" biff7:ver="7;break;case" biff8:ver="8;AfxMessageBox("Biff8");break;}int" type="0;switch" (type){case="" workbook:type="5;AfxMessageBox("Workbook");break;case" worksheet:type="16;AfxMessageBox("Worksheet");break;case" chart:type="32;AfxMessageBox("Chart");break;}break;}dwPos" =="" f.getposition();}="" 第三步:读其它数据f.seektobegin();dwpos="f.GetPosition();//" 读表格数据while="" (dwpos="">< dwlen){nread="f.Read((void*)&RecNo," 2);switch="" (recno){case="" xl_bof:{f.read((void*)&reclen,="" 2);afxmessagebox("bof");}break;case="" xl_boundsheet:{dword="" temp;byte="" visi;byte="" type;tchar="" name;f.read((void*)&reclen,="" 2);f.read((void*)&temp,="" 4);f.read((void*)&visi,="" 1);f.read((void*)&type,="" 1);f.read((void*)&strlen,="" 2);f.read((void*)&name,="" strlen);char="" buf[128];memset(buf,="" 0x0,="" 128);strncpy(buf,="" &name,="" strlen);afxmessagebox(buf);}break;case="" xl_dimension:f.read((void*)&reclen,="" 2);f.seek(reclen,="" cfile::current);afxmessagebox("dimension");break;case="" 0xe2:="" interfacedf.read((void*)&reclen,="" 2);afxmessagebox("e2");break;case="" xl_sst:f.read((void*)&reclen,="" 2);f.seek(reclen,="" cfile::current);afxmessagebox("sst");break;case="" xl_number:f.read((void*)&reclen,="" 2);afxmessagebox("number");break;case="" xl_string:f.read((void*)&reclen,="" 2);afxmessagebox("string");break;case="" xl_rk:f.read((void*)&reclen,="" 2);afxmessagebox("rk");break;case="" xl_label:{f.read((void*)&reclen,="" 2);afxmessagebox("label");}break;case="" 0xd6:f.read((void*)&reclen,="" 2);afxmessagebox("rstring");break;case="" xl_eof:dwpos="dwLen;AfxMessageBox("Eof");break;default:nRead" =="" f.read((void*)&reclen,="" 2);if="" (nread="=" 0)dwpos=""> 方法/步骤 打开需要插入对象文件的Excel表格, 用鼠标单击要插入对象文件单元格,然后依次点击"插入"菜单--"对象",窗口会自动弹出"对象"对话框, 在"对象"对话框中选择"由文件创建"选项卡,单击"浏览",选择需要插入的对象文件,此处我们先选择一个Excel文件插入。 选择"对象"对话框中的"显示图标",点击"更改图标",窗口会自动弹出"更改图标"对话框。如 将"图标标题"中的文件路径及文件扩展名删掉,只保留文件名称,如下图所示。然后点击"确定"按钮。 在"对象"对话框中点击"确定"按钮,Excel文件就插入完毕了。在阅读时,只需双击这个Excel文件,就可以将之打开了。 可以用多种方法,比如说用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=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;}// 读取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;。 转载请注明出处51数据库 » mfc读取word表格三、MFC中怎么读取Excel文件里的每个单元格内容
四、如何在MFC对话框中嵌入Excel表格
五、MFC怎么读写EXCEL文件