• 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表格实例

  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469817.html
Copyright © 2020-2023  润新知