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

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clever101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值