VC编程操作word2010生成表格

来源:互联网 发布:servlet获取表单数据id 编辑:程序博客网 时间:2024/04/28 11:36

作者:朱金灿

来源: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 60cells.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();}

效果图如下:



参考文献:

1. VC 6.0动态生成Word表格实例

0 0
原创粉丝点击