VS2008操作WORD2007

一  简单配置

    
     首先在VC下建立简单的对话框程序,然后打开类向导,点右边的Add Class-》Visual C++   >>TypeLib中的MFC类   》》文件
,找到word的封装类库,一般在C:\\Program Files (x86)\\Microsoft Office\\OFFICE12\\MSWORD.OLB(word2007)。
添加需要使用的类。

二  替换import指令
把下面用到的头文件的import替换成下面的语句

#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE12\\MSWORD.OLB" no_namespace     raw_interfaces_only \
rename("FindText","_FindText")       \
rename("Rectangle","_Rectangle")   \
rename("ExitWindows","_ExitWindows")
 

三  可以使用的代码

//下面是可以使用的代码  VS2008+office2007

//相关头文件
#include   // 为了方便操作 VARIANT 类型变量,使用 CComVariant 模板类
#include "CApplication.h"

#include "CDocuments.h"
#include "CDocument0.h"
#include "CRange.h"
#include "CFont0.h"

#include "CParagraphs.h"
#include "CParagraph.h"

#include "CSelection.h"


#include "CTables0.h"
#include "CTable0.h"

#include "CCells.h"
#include "CCell.h"

#include "CBorders.h"



//可用代码

	  if ( !AfxOleInit() )

        {

               AfxMessageBox(_T("无法初始化COM的动态链接库!"));

               return ;

         }

        CApplication WordApp ;

        CDocuments Docs ;

        CDocument0 Doc ;

        // 首先建立一个word实例对象

        if (!WordApp.CreateDispatch(TEXT("Word.Application")) )

        {

            AfxMessageBox("创建WORD服务失败!");

            return ;  // 一定要返回,否则程序崩溃

        }

        // 显示此对象文件 ,您也可以不调用此句,不显示对象文件

        WordApp.put_Visible(true);

        // 创建文档

     	CString strFile("");

        CComVariant tpl(strFile), NewTemplate(true), DocType(0), Visble;

     
        // 各种处理代码在此
		Docs.AttachDispatch(WordApp.get_Documents());

	    Doc.AttachDispatch(Docs.Add(&tpl,&NewTemplate,&DocType,&Visble));

		CFont0 oFont;
		CParagraph oPara;
		CParagraphs oParas;
		CSelection oSel;
		CRange oRange;	

		oSel = WordApp.get_Selection();

		//第一段      ---------------------------------------
		oSel.TypeText("液压平板车主纵梁强度分析");
		oSel.TypeParagraph();

		//第二段(空格)------------------------------------
		oSel.TypeText("       ");
		oSel.TypeParagraph();		

		//第三段
		CString strParag="";
		CString str;

		//货物重量
		str="货物重量G=";
		strParag.Append(str);		
		
		str.Format("%fkg , ",100.11);
		strParag.Append(str);

        //车架重量
		str="车架重量Gf= ";
		strParag.Append(str);
		
		str.Format("%fkg , ",200.11);
		strParag.Append(str);

		 //车架长度
		str="车架长度L=  ";
		strParag.Append(str);
		
		str.Format("%fm ",300.11);
		strParag.Append(str);		 

		oSel.TypeText(strParag);
		oSel.TypeParagraph();


		//第四段--------------------------------------------------
		strParag="";
		str="挂车轴数N= ";
		strParag.Append(str);		
		
		str.Format("%d , ",400);
		strParag.Append(str);

		str.Format("(前1后2/前2后1,前轴数I=%d,后轴数J=%d),",3,4);
		strParag.Append(str);

		str.Format("轴距=%f,",5.11);
		strParag.Append(str);

		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第5段--------------------------------------------------
		strParag="";
		str.Format("挂车纵梁刚度E=%f,",5.11);
		strParag.Append(str);

		str.Format("转动惯量I=%f,",5.11);
		strParag.Append(str);

		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第6段--------------------------------------------------
		strParag="";
		str.Format("货物重心距离挂车前端距离为Lg=%f,",5.11);
		strParag.Append(str);

		oSel.TypeText(strParag);
		oSel.TypeParagraph();


		//第7段--------------------------------------------------
		strParag="";
		str.Format("各货物支点距轴线车前端距离为Y_1=%f,Y_2=%f,Y_3=%f,",5.11,5.11,5.11);
		strParag.Append(str);

		oSel.TypeText(strParag);
		oSel.TypeParagraph();
		
		//第8段--------------------------------------------------
		strParag="";
		str.Format("各轴距挂车前端距离X1=%f, X2=%f,X3=%f,X4=%f,",5.11,5.11,5.11,5.11);
		strParag.Append(str);

		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第9段--------------------------------------------------
		strParag="";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第10段--------------------------------------------------
		strParag="经计算:";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第11段--------------------------------------------------
		strParag="";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第12段--------------------------------------------------
		strParag="各液压轴支撑力分别为:F_1=,F_2=,F_3=,。。。。。。,";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第13段--------------------------------------------------
		strParag="货物支点施加于车架的力为N1=   ,N2=   ,N3= ,";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第14段--------------------------------------------------
		strParag="挂车各点所受剪力、弯矩及挠度如下表1所示.其中,最大剪力在处,剪力为:;最大弯矩在处,弯矩为:;最大弯矩在处,弯矩为:";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第15段--------------------------------------------------
		strParag="表1 挂车各点所受剪力、弯矩及挠度";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();

		//第16段-----插入表格------------------
		strParag="-----";
		oSel.TypeText(strParag);
		oSel.TypeParagraph();
		

		
		oParas.AttachDispatch(Doc.get_Paragraphs());
		
		//第一段格式
		oPara=oParas.Item(1);
		oPara.put_Alignment(1);

		//第一段字体
		oRange = oPara.get_Range();
		oFont.AttachDispatch(oRange.get_Font());
		oFont.put_Size(14);
		//oFont.put_Color(250);
		oFont.put_Bold(1);
		oRange.put_Font(oFont);


		//第15段格式,居中
		oPara=oParas.Item(15);
		oPara.put_Alignment(1);
		//第16段格式
		oPara=oParas.Item(16);
		oPara.put_Alignment(0);

        oRange = oPara.get_Range();
		oFont.AttachDispatch(oRange.get_Font());
		oFont.put_Size(12);

        //表格
		//控制表格位置
		oParas.AttachDispatch(Doc.get_Paragraphs());
		oPara=oParas.Item(16);
		oRange = oPara.get_Range();

		//插入表格
		COleVariant covTrue((short)TRUE);
	    COleVariant covFalse((short)FALSE);

		CTables0 tabs;
		tabs.AttachDispatch(Doc.get_Tables());
		CTable0 tab;
		tab.AttachDispatch(tabs.Add(oRange,9,4,&covFalse,&covTrue));

		

		CBorders oborders;
        oborders.AttachDispatch(tab.get_Borders());
        oborders.put_Enable(1);

		oRange = tab.get_Range(); 
		CCells oCells;
		oCells.AttachDispatch(oRange.get_Cells());
		oCells.put_VerticalAlignment(1);

		//插入数据
		CCell oCell;

		//位置-------------------------------
		oCell = tab.Cell(1,1);		
		oRange.AttachDispatch(oCell.get_Range());
        oRange.InsertAfter("位置 \\ 参量");

		for(int i=2;i<=9;i++)
		{
		oCell = tab.Cell(i,1);		
		oRange.AttachDispatch(oCell.get_Range());
		str.Format("X%d",i-1);
        oRange.InsertAfter(str);
		 }

		//剪力-------------------------------
		oCell = tab.Cell(1,2);		
		oRange.AttachDispatch(oCell.get_Range());
        oRange.InsertAfter("剪 力");

		for(int i=2;i<=9;i++)
		{
		oCell = tab.Cell(i,2);		
		oRange.AttachDispatch(oCell.get_Range());
		str.Format("%d",i-1);
        oRange.InsertAfter(str);
		 }

		//弯矩-------------------------------
		oCell = tab.Cell(1,3);		
		oRange.AttachDispatch(oCell.get_Range());
        oRange.InsertAfter("弯 矩");

		for(int i=2;i<=9;i++)
		{
		oCell = tab.Cell(i,3);		
		oRange.AttachDispatch(oCell.get_Range());
		str.Format("%d",i-1);
        oRange.InsertAfter(str);
		 }

		//挠度-------------------------------
		oCell = tab.Cell(1,4);		
		oRange.AttachDispatch(oCell.get_Range());
        oRange.InsertAfter("挠 度");

		for(int i=2;i<=9;i++)
		{
		oCell = tab.Cell(i,4);		
		oRange.AttachDispatch(oCell.get_Range());
		str.Format("%d",i-1);
        oRange.InsertAfter(str);
		 }
		

        // 释放各种对象

        Docs.ReleaseDispatch();

        Doc.ReleaseDispatch();

       // CComVariant SaveChanges(false), OriginalFormat, RouteDocument;

        //WordApp.Quit(&SaveChanges,&OriginalFormat,&RouteDocument );

        WordApp.ReleaseDispatch();

 

你可能感兴趣的:(c/c++/vc)