MFC读写Excel、word文件。
展开全部 基本步骤(1)创建)一个 MFC 的程序工程。
注意:在VC中对WORD进行操作需要在MFC AppWizard - Step 2 of4中的Automaiton选项上打上勾。
(2)Ctrl+W 执行 ClassWizard(本文按照 VC6 操作,示例程序是在VC6 下编写测试的)。
(3)Add Class...\From a type Library... 在 Office目录中,找到想使用的类型库。
(我使用的是 Office2003,其Word 的类型库文件,保存在 E:\ProgramFiles\Microsoft Office\Office12\MSWOR.OLB)。
(4)选择类型库文件后,在弹出的对话窗中继续选择要添加的类。
具体选择什么类,要看你将来在程序中打算调用什么功能。
当然,也可以不用考虑这么多,用鼠标和Shift键配合,全部选择也可以。
(5)初始化COM。
方法一,找到App的InitInstance()函数,在其中添加AfxOleInit()函数的调用;方法二,在需要调用COM功能的地方 CoInitialize(NULL),调用完毕后CoUninitialize()。
(6)在你需要调用 Office 功能函数的 cpp 文件中 #include //为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类 #include "文件名.h" //具体的头文件名,是由装载类型库的文件名决定的,如MSWORD。
示例程序: //word应用程序 _Application app; //初始化连接 app.CreateDispatch("word.Application"); Documents doc; CComVarianta(_T(strWord)),b(false),c(0),d(true),aa(0),bb(1); _Document doc1; doc.AttachDispatch(app.GetDocuments()); doc1.AttachDispatch(doc.Add(&a,&b,&c,&d)); Range range; //求出文档的所选区域 range=doc1.GetContent();//取出文件内容 str=range.GetText(); m_richedit.SetWindowText(str); //关闭 app.Quit(&b,&c,&c); //释放环境 app.ReleaseDispatch();
在MFC中,如何读取Excel文件和doc文件内容,并显示出来啊;谢谢啊...
刚好前段时间弄过。
我把大致的代码粘上你看下吧。
是C#的。
和你说下思路吧,先在WORD中画好要打印的表,并且设置好,横向的可以在“文件”->;“页面设置”里设置。
然后把要绑定数据库的部分插入书签。
打印的时候调用设计好的那个WORD文件把数据库的内容绑定到书签就行了。
首先要在程序中引入COM组件中的Microsoft Word 11。
安装的word中要包括.net编程组件和Interop(默认是不安装的)。
public void bindAndPrint(){ //绑定Work和数据库Microsoft.Office.Interop.Word.Application app = null;Microsoft.Office.Interop.Word.Document doc = null;object missing = System.Reflection.Missing.Value;object templateFile = Application.StartupPath + @"\word模板.doc";try{app = new Microsoft.Office.Interop.Word.ApplicationClass();doc = app.Documents.Add(ref templateFile, ref missing, ref missing, ref missing);try{foreach (Microsoft.Office.Interop.Word.Bookmark bm in doc.Bookmarks){bm.Select();string item = bm.Name;if (item.Equals("title")) //word中的书签名"title"{bm.Range.Text = title; //title为要替换书签的变量, //即可以将数据库中的值读入title中}}}catch{ } //打印 doc.PrintOut(ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing);}catch (Exception exp){MessageBox.Show(exp.Message, this.Text);} //结束word进程 finally{object saveChange = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;if (doc != null) doc.Close(ref saveChange, ref missing, ref missing);if (app != null) app.Quit(ref missing, ref missing, ref missing);} break;} 希望能帮到你!
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 = dwLen;break;}}//第四步:关闭文件f.Close();
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 { 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 { 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: // INTERFACED f.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 = dwLen; break; } }//第四步:关闭文件 f.Close();
MFC读取excel里面内容写入到TXT
这个是使用ODBC来完成的第一步:建立基于对话框的MFC工程,命名为MfctoExc;第二步:添加两个头文件到stdafx.h, #include #include 第三步:添加两个按钮控件和一个List Box控件,给List Box添加控制变量CListBox m_ExcelList;添加DDX_Control(pDX, IDC_LIST_BOX, m_ExcelList);第四步:给两个按钮添加两个功能函数,读写excelvoid CMfctoExcDlg::OnRead() {// TODO: Add your control notification handler code hereCDatabase database; CString sSql; CString sItem1, sItem2,sItem3; CString sDriver; CString sDsn; CString sFile,sPath;//获取主程序所在路径,存在sPath中GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer (); int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);sFile = sPath + "\\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 Num,Name, Age " //设置索引顺序 "FROM Exceldemo " ; "ORDER BY Name "; // 执行查询语句 recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly); // 获取查询结果 while (!recset.IsEOF()) { //读取Excel内部数值 recset.GetFieldValue("Num", sItem1); recset.GetFieldValue("Name", sItem2); recset.GetFieldValue("Age", sItem3); //显示记取的内容 m_ExcelList.AddString( sItem1 + " --> "+sItem2+ " --> "+sItem3 ); // 移到下一行 recset.MoveNext(); } // 关闭数据库 database.Close(); } CATCH(CDBException, e) { // 数据库操作产生异常时... AfxMessageBox("数据库错误: " + e->m_strError); } END_CATCH;}void CMfctoExcDlg::OnWrite() {// TODO: Add your control notification handler code hereCDatabase 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 (Num,Name,Age) VALUES ("; str0.Format("%d...
如何用C++读取word中的图片,最好显示在MFC
#include int main () { FILE * fpPhoto, * fpText, * fpTarget ; int iRead ; char szBuf[100] ; printf ("请输入第一个文件名(jpg):\n") ; gets (szBuf) ; fpPhoto = fopen (szBuf, "rb") ; printf ("请输入第二个文件名(txt):\n") ; gets (szBuf) ; fpText = fopen (szBuf, "rb") ; printf ("请输入目的文件名(jpg):\n") ; gets (szBuf) ; fpTarget = fopen (szBuf, "wb") ;
C++中怎么样读取word或excel中的数据?读取后可不可以可以不可以放...
1、添加OLE/COM支持。
首先,应用程序必须添加对OLE/COM的支持,才能导入OLE/COM组件。
本文使用的是MFC对话框程序,在创建工程的向导中选中Automation选项即可为程序自动添加相应的头文件和OLE库初始化代码。
通过查看源代码,可以知道在stdafx.h的头文件中,添加了OLE/COM很多类所需添加的头文件。
#include // MFC 自动化类同时,在应用程序类的InitInstance函数中,添加了OLE/COM的初始化代码,如下所示:// 初始化 OLE 库if (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}2、导入并封装Excel中的接口Excel作为OLE/COM库插件,定义好了各类交互的接口,这些接口是跨语言的接口。
VC可以通过导入这些接口,并通过接口来对Excel的操作。
由于本文只关心对Excel表格中的数据的读取,主要关注几个_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range等几个接口。
Excel的各类接口的属性、方法可以通过MSDN的Office Development进行查询。
VS2010导入OLE/COM组件的接口的步骤为:Project->Class Wizard->Add Class->MFC Class From TypeLib,先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再选择要导入的Excel类型库中的接口。
在完成接口导入后,VS2010将自动为导入的接口创建相应的实现类,用于对接口属性和方法的实现。
由于标准的C++没有属性访问器,只能添加一个两个存取函数来实现对属性的访问,通过在属性名称前加上get_和put_前缀分别实现对属性的读写操作。
即,由VC自动完成C++类对接口的封装。
转载请注明出处51数据库 » mfc读取word表格
小龅牙o哔哔哔