• 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();
    }

    效果图如下:



    参考文献:

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

  • 相关阅读:
    python学习笔记--Django入门一 网页显示时间
    python学习笔记--easy_install和pip
    python学习笔记--Django入门0 安装dangjo
    Linux学习笔记总结--memcached配置
    python学习笔记--基础语法
    python学习笔记--导入tab键自动补全功能的配置
    Linux学习笔记总结--ssh认证登录
    ABAP 通过字段找表程序
    smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强
    SE18 BADI定义 / SE19 BADI 实现
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469817.html
Copyright © 2020-2023  润新知