一. 右键单击工程节点,然后选择添加类,如下图:
二. 添加TypeLib中的MFC类,如下图:
三. 选择文件,打开MSWORD.OLB, word2010的在Office14的文件夹下,如下图:
四. 生成所有的接口类代码,如下图:
五. 生成表格的代码如下:
- void CMFCDlgDlg::OnBnClickedButton1()
- {
- CApplication oWordApp;
- CDocuments oDocs;
- CDocument0 oDoc;
- CRange range;
- CParagraph paragraph;
- CParagraphs paragraphs;
- CCell cell;
- CCells cells;
- CTable0 table;
- CTables0 tables;
- CBorder border;
- CBorders borders;
- CFont0 font;
- CPageSetup pagesetup;
- //2.创建和连接word对象,初始化连接,判断当前系统是否有word进程,然后然后创建或连接对象
- LPDISPATCH pDisp;
- LPUNKNOWN pUnk;
- CLSID clsid;
- CLSIDFromProgID(L"Word.Application",&clsid);
- if(GetActiveObject(clsid,NULL,&pUnk)==S_OK)
- {
- pUnk->QueryInterface(IID_IDispatch,(void **)&pDisp);
- oWordApp.AttachDispatch(pDisp);
- }
- else
- {
- if(!oWordApp.CreateDispatch("Word.Application"))
- {
- AfxMessageBox("创建Word服务失败!");
- }
- }
- //初始化文档,生成WORD表格
- oWordApp.m_bAutoRelease=true;
- BeginWaitCursor();
- oDocs=oWordApp.get_Documents();
- COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
- oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);//加新文档
- pagesetup=oDoc.get_PageSetup();
- pagesetup.put_Orientation(1); //横向
- paragraphs=oDoc.get_Paragraphs();
- paragraph=paragraphs.get_Last();//以当前段落最后一行为表起始位置
- range=paragraph.get_Range();
- //添加制作新表格
- tables=oDoc.get_Tables();
- int nBhCount=3;
- table=tables.Add(range,5+nBhCount,6,vOpt,vOpt);
- borders=table.get_Borders();
- borders.put_Enable(1); //显示表框
- range=table.get_Range();
- cells=range.get_Cells();
- cells.put_VerticalAlignment(1);//文字居中
- #define DOC_TABLE1_WIDTH 60
- cells.SetWidth(DOC_TABLE1_WIDTH,1);
- cell=table.Cell(1,1);//合并第一行的三列
- cell.Merge(table.Cell(1,6));
- range=cell.get_Range();
- range.put_Bold(1);
- range.put_Text(" 病害统计信息"); //居中
- cell=table.Cell(2,1);
- cell.Merge(table.Cell(2,2));
- range=cell.get_Range();
- range.put_Bold(1);
- range.put_Text("组成材料");
- cell=table.Cell(2,2);
- cell.Merge(table.Cell(2,4));
- range=cell.get_Range();
- range.put_Bold(1);
- range.put_Text("病害种类");
- cell=table.Cell(2,3);
- range=cell.get_Range();
- range.put_Bold(1);
- range.put_Text("病害总数");
- for(int iBh=0;iBh<nBhCount;iBh++)
- {
- cell=table.Cell(2+iBh+1,1);
- cell.Merge(table.Cell(2+iBh+1,2));
- range=cell.get_Range();
- range.put_Bold(0);
- range.put_Text("hello1");
- cell=table.Cell(2+iBh+1,2);
- cell.Merge(table.Cell(2+iBh+1,4));
- range=cell.get_Range();
- range.put_Bold(0);
- range.put_Text("hello2");
- cell=table.Cell(2+iBh+1,3);
- range=cell.get_Range();
- range.put_Bold(0);
- range.put_Text("hello3");
- }
- cell=table.Cell(3+nBhCount,1);//合并列
- cell.Merge(table.Cell(3+nBhCount,6));
- range=cell.get_Range();
- range.put_Bold(1);
- range.put_Text(" 等级统计信息");
- for(int iCol=1;iCol<=6;iCol++)
- {
- cell=table.Cell(3+nBhCount+1,iCol);
- range=cell.get_Range();
- range.put_Bold(1);
- range.put_Text("hello4");
- cell=table.Cell(3+nBhCount+2,iCol);
- range=cell.get_Range();
- range.put_Bold(0);
- range.put_Text("hello5");
- }
- //保存,清理
- CString strSave= "E:\\doc\\test.doc";
- COleVariant vTrue((short)TRUE), vFalse((short)FALSE);
- CDocument0 oActiveDoc;
- oActiveDoc = oWordApp.get_ActiveDocument();
- oActiveDoc.SaveAs(COleVariant(strSave),COleVariant((short)0), vFalse,
- COleVariant(""), vTrue,COleVariant(""),vFalse,
- vFalse, vFalse, vFalse, vFalse,
- vOpt,vOpt,vOpt,vOpt,vOpt);
- oWordApp.put_Visible(true);
- oWordApp.ReleaseDispatch(); //退出WORD
- EndWaitCursor();
- }
效果图如下:
来自:http://blog.csdn.net/clever101/article/details/52185032