zoukankan      html  css  js  c++  java
  • 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表格实例

  • 相关阅读:
    MySQL-基本sql命令
    Java for LeetCode 203 Remove Linked List Elements
    Java for LeetCode 202 Happy Number
    Java for LeetCode 201 Bitwise AND of Numbers Range
    Java for LeetCode 200 Number of Islands
    Java for LeetCode 199 Binary Tree Right Side View
    Java for LeetCode 198 House Robber
    Java for LeetCode 191 Number of 1 Bits
    Java for LeetCode 190 Reverse Bits
    Java for LeetCode 189 Rotate Array
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469817.html
Copyright © 2011-2022 走看看