使用TWordApplication控件控制WORD的问题(封装成一个类)

happy243 2002-06-22 03:43:31
我想写一个WordControl类
内部封装TwordApplication和TwordDocument

主要属性
CurrentDoc:OleVariant;//当前文档的数据 只读 (GetDocData)
CurrentDocIndex:integer;//当前文档索引
CurrentDocName:String; //当前文档名称
DocCount:integer; 当前打开的文档数目
DocsStly::array [0.. DocCount-1] of Char //文档的打开类型;由L:由对象打开 R:由用户手工打开
Document: TwordDocument; //当前文档对象

希望能够实现以下方法

Create:初始化对象,并创建WORD
Destory:释放对象内的所有资源
OpenDoc:打开一个文档
GetDocData:获得指定文档的数据
SaveDocToDisk:保存文档的磁盘
ReplaceTextToDoc:替换文档中的指定信息
WriteTextToDoc: 向文档指定位置添加指定文字
PrintDoc:打印指定文档
RefreshDoc:刷新指定文档


希望各位高手不吝赐教,集思广益,一起来完善
...全文
82 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovewill 2002-06-23
  • 打赏
  • 举报
回复
UP
happy243 2002-06-22
  • 打赏
  • 举报
回复
我先写点吧,感觉效果不大好

unit WordControl;

interface

uses
Classes, SysUtils, Variants, Word2000, Office2000;

type
TWordControl = class
private
FCurrentDocIndex: Integer;
FCurrentDocName: String;
FDocCount: Integer;
FDocument: TWordDocument;
protected
FWordApplication: TWordApplication;
FWordDocument: TWordDocument;
public
FDocsStyle: array of Char;
//文档的打开类型 L :由对象打开 R: 由应用程序打开

constructor Create(shown: Boolean = True); //是否显式调用,默认为是
destructor Destroy; override;

function GetDocData(): OleVariant;
function OpenDoc(ADocName:WideString): Integer; overload; //打开外部文件
function OpenDoc(ADocName:WideString ;ADocData: OleVariant): Integer; overload; //打开数据库文件
function SaveDocToDisk(ADocName: WideString): Integer;
function ReplaceTextToDoc(AdocName,AOldText,ANewText:String): Boolean;
procedure PrintDoc(); //打印当前活动文档
procedure PrintViewDoc(); //打印预览当前活动文档
procedure RefreshDoc(); //刷新文档


published
property CurrentDoc: OleVariant read GetDocData; //获得当前文档的内容
property CurrentDocIndex: Integer read FCurrentDocIndex; //当前文档索引
property CurrentDocName: String read FCurrentDocName; //当前文档名称
property DocCount: Integer read FDocCount; //当前打开的文档数目
property Document: TWordDocument read FDocument;
//当前的文档对象,此外是为方便实际应用中进一步的对文档的控制要求。
//property DocsStyle: array of char read FDocsStyle;
end;

implementation

{ TWordControl }

constructor TWordControl.Create(shown: Boolean);
//var
// Template, NewTemplate, ItemIndex: OleVariant;
begin
inherited Create;
FWordApplication := TWordApplication.Create(nil);
FWordDocument := TWordDocument.Create(nil);
// FWordApplication.AutoQuit := True;
FWordApplication.Visible := shown;
FDocCount := 0;
end;

destructor TWordControl.Destroy;
begin
if Assigned(FWordApplication) then
FWordApplication.Free;
if Assigned(FWordDocument) then
FWordDocument.Free;
inherited;
end;

function TWordControl.GetDocData: OleVariant;
begin
Result := Variant(FWordDocument.Content as IDispatch);
end;

function TWordControl.OpenDoc(ADocName: WideString): Integer;
var
FileName,i : OleVariant;
begin
FileName := ADocName;
FDocCount := FDocCount + 1;
i := FDocCount;
FWordApplication.Documents.Open(FileName,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
FWordDocument.ConnectTo(FWordApplication.Documents.Item(i));
Result := 0;
end;

function TWordControl.OpenDoc(ADocName: WideString;
ADocData: OleVariant): Integer;
begin
// FWordDocument.Content := (ADocData as IDispatch);
Result := 0;
end;

procedure TWordControl.PrintDoc();
var
i: OleVariant;
begin
FWordDocument.PrintOut;
end;

procedure TWordControl.PrintViewDoc();
begin
FWordDocument.PrintPreview;
end;

procedure TWordControl.RefreshDoc;
begin
FWordDocument.Reload;
{ i := FDocCount;
FWordDocument.Disconnect;
FWordDocument.ConnectTo(FWordApplication.Documents.Item(i)); }
end;

function TWordControl.ReplaceTextToDoc(AdocName, AOldText,
ANewText: String): Boolean;
var
FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike,
MatchAllWordForms, _Forward, Wrap, Format, ReplaceWith, Replace: OleVariant;
begin
FindText := AOldText;
MatchCase := False;
MatchWholeWord := False;
MatchWildcards := False;
MatchSoundsLike := False;
MatchAllWordForms := False;
_Forward := True;
Wrap := wdFindContinue;
Format := False;
ReplaceWith := ANewText;
Replace := wdReplaceAll;

Result := FWordDocument.Content.Find.Execute(FindText, MatchCase, MatchWholeWord,
MatchWildcards, MatchSoundsLike, MatchAllWordForms,
_Forward, Wrap, Format, ReplaceWith,
Replace, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
end;

function TWordControl.SaveDocToDisk(ADocName: WideString): Integer;
var
SaveChanges: OleVariant;
FileName: OleVariant;
begin
SaveChanges := wdSaveChanges;
FileName := ADocName;
//FWordApplication.Quit(SaveChanges);
FWordDocument.SaveAs(FileName);
FWordDocument.Close(SaveChanges);
//FWordApplication.Visible := False;
//FDocCount := FDocCount - 1;
Result := 0;
end;



end.
happy243 2002-06-22
  • 打赏
  • 举报
回复
UP
1.所需的三个控件: ChooseWA: TWordApplication; ChooseWD: TWordDocument; ChooseWF: TWordFont; 2.检查计算机是否安装了WORD try ChooseWA.Connect; except MessageBox(handle,'无法链接,请确认电脑上是否安装Word XP/2003及以上版本','连接出错', MB_Ok or MB_ICONERROR); Abort; end; 3.关闭WORD拼写检查 //因为Word进行拼写检查需要很多时间,所以首先关闭检查 ChooseWA.Options.CheckSpellingAsYouType := False; ChooseWA.Options.CheckGrammarAsYouType := False; 4.新建一个文档并设置文档的标题 var NewDocument: _Document; ItemIndex: OleVariant; ItemIndex := 1; NewDocument := ChooseWA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); ChooseWD.ConnectTo(NewDocument); ChooseWD.Windows.Item(ItemIndex).Caption := '我新建的第一个文档';//此文档的第一个窗口的标题,试卷 名称 5.写入数据 ChooseWD.Range.InsertAfter('第一行数据'+#13);//#13代表换行 6.设置字体格式 procedure SetFont(aBold,aItalic,aShadow,aSize:integer); begin ChooseWF.ConnectTo(ChooseWD.Sentences.Get_Last.Font); ChooseWF.Name := '宋体'; ChooseWF.Bold := aBold; ChooseWF.Italic := aItalic; ChooseWF.Shadow := aShadow; ChooseWF.Size := aSize; end; 如:SetFont(1,0,0,22);//设置字体为22号 7.向WORD中写入表格 (1)插入表格: ChooseWD.Tables.Add(ChooseWD.Words.Last, RowNum, ColNum,EmptyParam,EmptyParam);//RowNum为行数, ColNum为列数 (2)插入数据: ChooseWD.Tables.Item(1).Cell(1,1).Range.Text := '第一行第一列'; ChooseWD.Tables.Item(1).Cell(2,1).Range.Text := '第二行第一列'; 8.向WORD写入图片 var Img: TImage; MyFormat: Word; AData: Cardinal; APalette: HPALETTE; Img.Picture.LoadFromFile('文件路径');//从文件夹中导入图片至控件 Img.Picture.SaveToClipboardFormat(MyFormat,AData,APalette);//将图片转存到剪贴板中 Clipboard.SetAsHandle(MyFormat,AData);//将剪贴板中的图片复制出来,注意添加Clipbrd单元 ChooseWD.Sentences.Last.Paste;//在WORD中粘贴图片 9.在界面中显示WORD文档 ChooseWA.Visible:=true; 10.断开与WORD的链接 ChooseWA.Disconnect; ChooseWD.Disconnect; Chart1.SaveToBitmapFile(‘文件名.bmp’);

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧