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

posted on 2016-08-11 17:54  岚之山  阅读(1393)  评论(0编辑  收藏  举报

导航