新浪博客

BCB操作Word文档

2018-08-27 10:46阅读:
C++ Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46


//------------------------------------------------------------------------------
//程序实例
//------------------------------------------------------------------------------
void __fastcall TForm1::btnPrnClick(TObject *Sender)
{
Variant WordApp, WordDocs, WordDoc;
Variant word
_activedoc;
Variant word_select;
Variant word_table;
Variant my_cell;
//创建Word对象:
try
{
WordApp = Variant::CreateObject(
'Word.Application');
}
catch (...)
{
ShowMessage(
'运行Word出错,请确认安装了Office2003!');
WordApp = Unassigned;
return;
}
//打开Word文档:
WordDocs = WordApp.OlePropertyGet('Documents');
WordDoc = WordDocs.OleFunction(
'Open', 'd:\\GongTab\\test.doc');
WordApp.OlePropertySet(
'Visible', true);
WordDoc = WordApp.OlePropertyGet(
'Documents');
word_activedoc = WordApp.OlePropertyGet(
'ActiveDocument');
//修改表格:
word_table = word_activedoc.OlePropertyGet('Tables').OleFunction('Item', 1);
//设置号牌号码
my_cell = word_table.OleFunction('Cell', (Variant)2, (Variant)2);
my_cell.OlePropertySet(
'Range', edtHPHM->Text.c_str());
//保存修改内容:
word_activedoc.OleProcedure('Save');
//打印文档:
WordApp.OlePropertyGet('ActiveDocument').OleFunction('PrintOut');
WordApp.OleProcedure(
'Quit');
}


下面以COM方式来操纵WORD。
#include 'Word_2K_SRVR.h'
#include 'Word_2k.h'
#include
#include
#include
包括以上头文件,注意头文件的先后顺序。(实测不包含这些头文件也可以的,原因不知!)
//注意:要包含头文件
#include 'Word_2k.h'
#include
#include
定义:
Variant WordApp,WordDocs,WordDoc;
Variant WordWindows,WordWindow;
Variant WordParas,WordPara;
Variant WordRange;
创建Word对象:
WordApp=CreateOleObject('Word.Application');
WordDocs=WordApp.OlePropertyGet('Documents');
打开Word文档:
WordDoc=WordDocs.OleFunction('Open','c:\\test.doc');
WordApp.OlePropertySet('Visible',true);
显示Word文档的路径名和文件名:
ShowMessage(WordDoc.OlePropertyGet('FullName'));
ShowMessage(WordDoc.OlePropertyGet('Name'));
ShowMessage(WordDoc.OlePropertyGet('Path'));
结束Word程序:
WordApp.OleProcedure('Quit');
另存为其它格式:
WordDoc=WordApp.OlePropertyGet('ActiveDocument');
WordDoc.OleFunction('SaveAs','c:\\test.html',wdFormatHTML);
新建一个文档:
WordDocs.OleProcedure('Add');
关闭文档:
VBA: Document.close(SaveChanges,OriginalFormat,RouteDocument);
SaveChanges:如果文档修改过,这个参数决定是否保存这些变化:
wdSaveChanges
wdDoNotSaveChanges
wdPromptToSave
OriginalFormat:当保存文档时,指定使用的格式
wdOriginalFormat 用它的原始格式保存文档
wdWordDocument 用Word格式保存文档
wdPromptUser 问用户是否想用原始格式保存文档。
RouteDocument:如果置为True,这个参数告诉Word发送文档到下一个接受方
跳转到文档中的指定位置:
显示段落标记:
VBA代码:Application.ActiveDocument.Windows(1).View.ShowParagraphs=true;
WordDoc=WordApp.OlePropertyGet('ActiveDocument');
Variant WordWindows=WordDoc.OlePropertyGet('Windows');
WordWindow=WordWindows.OleFunction('Item',1);//用Item属性返回集合中的对象
Variant WordView=WordWindow.OlePropertyGet('View');
WordView.OlePropertySet('ShowParagraphs',true);
显示全部非打印字符:
VBA代码:Application.ActiveDocument.Windows(1).View.ShowAll=true;
最近使用文件列表:
Application.DisplayRecentFiles,要控制列表中的表项数目,使用RecentFiles.Maxium
设置保存Word使用的缺省文件格式:
Application.DefaultSaveFormat='MsWord6Exp'
读取Word文档转换器:
Variant fcs,fc,lastparagraph;
fcs=WordApp.OlePropertyGet('FileConverters');
int count=fcs.OlePropertyGet('Count');//读取文件转换器的数目
int i;
for(i=1;i<=count;i++)
{
fc=fcs.OleFunction('Item',i);
ListBox1->Items->Add((AnsiString)fc.OlePropertyGet('FormatName'));
}
打印预览:
WordDoc=WordApp.OlePropertyGet('ActiveDocument');
WordDoc.OleProcedure('PrintPreview');
全选:
WordDoc=WordApp.OlePropertyGet('ActiveDocument');
WordDoc.OleProcedure('Select');
如何截获Word文档的New,Open和Close事件?
设置段落字体:使用Range对象
WordDoc=WordApp.OlePropertyGet('ActiveDocument');
WordParas=WordDoc.OlePropertyGet('Paragraphs');
WordPara=WordParas.OleFunction('Item',1);
WordRange=WordPara.OlePropertyGet('Range');
WordRange.OlePropertySet('Bold',true);
WordRange.OlePropertySet('Italic',true);
也可以使用Selection对象:
Variant WordSelection=WordApp.OlePropertyGet('Selection');
Variant WordFont=WordSelection.OlePropertyGet('Font');
WordFont.OlePropertySet('Bold',true);
WordFont.OlePropertySet('Italic',true);
我原来用ExcelApplication方式,发现很多属性与方法不支持,后来改用OLE方式,发现几乎所有offfice2000宏语言中的属性
与方法全部支持
OleContainer组件有一个LoadFromStream的方法,先从数据库中将Word内容读取到一个流中,然后装载到OleContainer就可以了。
调用就按楼上的,至于你想改变字体还是干别的什么,你打开word,用录制宏,把你想干的事情干一遍,再停止录制,再看VBA源码,
在BCB中用OleFunction等方法实现

我的更多文章

下载客户端阅读体验更佳

APP专享