VC编程操作word2010生成表格
作者:朱金灿
来源:http://blog.csdn.net/clever101
一. 右键单击工程节点,然后选择添加类,如下图:
二. 添加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(); }
效果图如下:
参考文献: