基于VC下MFC调用Word XP生成报表推荐文档Word文件下载.docx
- 文档编号:16538952
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:8
- 大小:18.63KB
基于VC下MFC调用Word XP生成报表推荐文档Word文件下载.docx
《基于VC下MFC调用Word XP生成报表推荐文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于VC下MFC调用Word XP生成报表推荐文档Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
\\ProgramFiles\\MicrosoftOffice\\Office10\\MSWORD.OLB"
no_namespace\raw_interfaces_only\
rename("
FindText"
"
_FindText"
)\
Rectangle"
_Rectangle"
ExitWindows"
_ExitWindows"
)
如果你使用的是其他版本的Word,那么可以根据下表修改MSWORD.OLB库路径。
表1MSWORD.OLB库路径
Office版本
路径
Office97
\ProgramFiles\MicrosoftOffice\Office
Office2000
OfficeXP
\ProgramFiles\MicrosoftOffice\Office10
Office2003
\ProgramFiles\MicrosoftOffice\Office11
Office2007
\ProgramFiles\MicrosoftOffice\Office12
第二步,调用Word实现个性报表。
引入我们要用到的头文件,在例子中我用到了以下头文件,其意义如何:
#include"
report\\CApplication.h"
//word程序对象
report\\CDocuments.h"
//文档集对象
report\\CDocument0.h"
//单个doc对象
report\\CSelection.h"
//该对象代表窗口或窗格中的当前所选内容,使用率最高
report\\CCell.h"
//表格单元格
report\\CCells.h"
//表格单元格集合
report\\CRange.h"
//该对象代表文档中的一个连续范围
report\\CTable0.h"
//单个表格
report\\CTables0.h"
//表格集合
report\\CFont0.h"
//字体
report\\CParagraphs.h"
//段落集合
report\\CParagraphFormat.h"
//段落格式
report\\CParagraph.h"
//单个段落
report\\CnlineShapes.h"
//Inline图形对象集合
report\\CnlineShape.h"
//单个Inline图形对象
下面是调用word生成报表代码:
CApplicationoWord;
//wordApp
CDocumentsoDocs;
//Docs
CDocument0oDoc;
//doc
if(!
oWord.CreateDispatch(_T("
Word.Application"
)))//实例化oWord
{
AfxMessageBox(_T("
wordfailedtostart!
"
));
}
else
//Setthevisibleproperty
oWord.put_Visible(FALSE);
//开始不可见
//Addanewdocument
oDocs=oWord.get_Documents();
COleVariantvDocType((short)0);
//GettheAppPath
charfileName[MAX_PATH];
GetModuleFileName(NULL,fileName,MAX_PATH);
chardir[260];
chardirver[100];
_splitpath(fileName,dirver,dir,NULL,NULL);
CStringstrAppPath=dirver;
strAppPath+=dir;
CStringstrTpl=strAppPath+_T("
\\template.dot"
);
//模板路径
COleVariantvTpl(strTpl);
//addadoc
oDoc=oDocs.Add(vTpl,vFalse,vDocType,vTrue);
//执行指定宏”信息”
oWord.Run(_T("
信息"
),vOptional,
vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,
vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional);
//声明一个CSelection对象,并实例化
CSelectionwordSelection=oWord.get_Selection();
wordSelection.TypeText(_T("
虚拟试验仿真报表"
wordSelection.HomeKey(COleVariant((short)wdLine),COleVariant((short)1));
//返回当前行首,并选择当前行
//设置选择区域字体
CFont0font=wordSelection.get_Font();
font.put_Name(_T("
微软雅黑"
//设置为“标题1“样式
wordSelection.put_Style(COleVariant((short)wdStyleHeading1));
//获得当前段落,并设置对齐方式
CParagraphlastPara=getCurParagraph(oDoc);
lastPara.put_Alignment(wdAlignParagraphCenter);
//结束当前段落编辑,移动光标到段落后
wordSelection.EndOf(COleVariant((short)wdParagraph),COleVariant((short)0));
//生成表格
MakeRTITable(oDoc,wordSelection);
//以下为为不同段落设置不同字体和对齐方式示例
wordSelection.TypeParagraph();
//新起一段
endofthestory!
font=wordSelection.get_Font();
font.put_Size(20);
lastPara=getCurParagraph(oDoc);
lastPara.put_Alignment(wdAlignParagraphJustify);
wordSelection.EndOf(COleVariant((short)wdParagraph),COleVariant((short)wdMove));
wordSelection.TypeParagraph();
font.put_Size(10);
//以下为插入图片示例
CStringstrPicture=strAppPath+_T("
\\p.jpg"
CnlineShapesnLineShapes=wordSelection.get_InlineShapes();
CnlineShapenLineshape=nLineShapes.AddPicture(strPicture,vFalse,vTrue,vOptional);
//Word程序可见,显示报表
oWord.put_Visible(TRUE);
//保存成果
CStringstrSavePath=strAppPath;
strSavePath+=_T("
\\报表.doc"
oDoc.SaveAs(COleVariant(strSavePath),vOptional,vOptional,vOptional,vOptional,
vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional,vOptional);
其中,MakeRTITable()和getCurParagraph()定义如下:
voidCMyReport:
:
MakeRTITable(CDocument0&
oDoc,CSelection&
selection)
{
intnRowSize=10;
nRowSize=nRowSize==0?
2:
nRowSize;
//newparagraph
selection.TypeParagraph();
//Addtabletitle
selection.TypeText(RTITableTitle);
CParagraphlastPara=getCurParagraph(oDoc);
selection.EndOf(COleVariant((short)wdParagraph),COleVariant((short)wdMove));
//Addtable
CTables0wordTables=oDoc.get_Tables();
CRangewordRange=selection.get_Range();
CTable0wordTable=wordTables.Add(wordRange,nRowSize,RTITableColumnSize,vTrue,vFalse);
//添加表格
wordRange=wordTable.get_Range();
//Makeheader
CCellcell;
for(inti=1;
i<
RTITableColumnSize+1;
i++)
cell=wordTable.Cell(1,i);
//表格第一行第i列单元格
cell.Select();
selection.TypeText(RTITableFieldArray[i-1]);
selection.EndOf(COleVariant((short)wdStory),COleVariant((short)wdMove));
//结束表格编辑
}
CParagraphCMyReport:
getCurParagraph(CDocument0&
curDoc)
CParagraphsparagraphs=curDoc.get_Paragraphs();
CParagraphlastPara=paragraphs.get_Last();
returnlastPara;
把表格列名称定义为常量,如下。
#defineRTITableColumnSize6
constCStringRTITableFieldArray[RTITableColumnSize]={_T("
序号"
),_T("
属性名称"
数据类型"
),_T("
数据长度"
订购/发布"
绑定属性/订购属性"
)};
constCStringRTITableTitle=_T("
表订购/发布属性列表"
注释:
(1)
必须初始化Ole环境才可调用word.即在程序入口InitInstance()调用AfxOleInit函数;
(2)
注意下面几个函数用法
1)
TypeParagraph();
//新起一段
2)
TypeText(_T("
3)
EndOf(COleVariant((short)wdParagraph),
COleVariant((short)wdMove));
//挪动光标到段末
4)
wordSelection.HomeKey(COleVariant((short)wdLine),COleVariant((short)wdExtend));
//选择当前行
最后2个函数的第一个参数取值可以是
enumWdUnits
wdCharacter=1,//字母
wdWord=2,//单词
wdSentence=3,//句子
wdParagraph=4,//段落
wdLine=5,//行
wdStory=6,//所选区域
wdScreen=7,//当前屏幕
wdSection=8,//部分
wdColumn=9,//列
wdRow=10,//行
wdWindow=11,//窗口
wdCell=12,//单元格
wdCharacterFormatting=13,//字体格式
wdParagraphFormatting=14,//段落格式
wdTable=15,//表格
wdItem=16//项目
};
总结,由以上代码我们可以看出,其实调用Word实现简单报表的生成并不难。
但是,要生成一个精美的报表还是得需要下很大功夫才成。
我给的例子仅仅使用了Word的最最基本的功能,若是想调用Word的其他高级功能,如生成直方图表格等,就得利用录制“宏“来研究如何实现具体操作了。
还有就是得参考OFFICEVBA手册,了解大多数函数调用格式。
源代码和VBA手册我均上传到我的共享资料里,有兴趣的朋友可以去下载.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于VC下MFC调用Word XP生成报表推荐文档 基于 VC MFC 调用 Word XP 生成 报表 推荐 文档