一 简单配置
首先在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();