使用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:刷新指定文档


希望各位高手不吝赐教,集思广益,一起来完善
...全文
140 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
内容概要:本文针对孤岛微电网在运行中面临的功率分配不均、电压频率波动等问题,提出了一种基于多智能体一致性演化的自适应虚拟阻抗容错控制与二次稳态补偿机制,并通过Simulink平台进行仿真实现。研究采用多智能体系统(MAS)框架,将各分布式电源建模为具备局部信息交互能力的智能体,利用一致性算法实现全局协同控制;结合自适应虚拟阻抗技术动态调节等效输出阻抗,有效克服线路阻抗差异导致的有功与无功功率耦合问题,提升功率均分精度;同时设计二次控制补偿环节,消除一次下垂控制引入的静态偏差,恢复电压和频率至额定水平。该机制具备良好的容错能力,在部分节点发生故障或通信中断时可自动重构控制结构,维持系统稳定运行,适用于高可靠性和自治性要求的孤岛微电网场景。; 适合人群:具备电力系统、自动化或电气工程等相关专业背景,熟悉微电网控制、多智能体系统理论及现代控制方法的研究生、科研人员及工程技术人员。; 使用场景及目标:①为孤岛微电网提供高精度、强鲁棒性的分布式协同控制解决方案;②解决传统下垂控制中存在的功率分配不准与电能质量下降问题;③实现系统在故障扰动下的自主容错与快速恢复,提升微电网的自愈能力与运行可靠性。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制策略的实现细节,重点关注多智能体通信拓扑构建、一致性协议设计、虚拟阻抗自适应律以及二次补偿控制器的参数整定方法,同时可通过修改故障场景和通信条件进行对比实验,全面掌握该机制的动态响应特性与适应范围。

5,943

社区成员

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

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