问题描述
我现在有一个项目,一部分信息存在数据库中,每次需要从数据库中提取处信息来项一个word文件中填充信息填充的位置由bookmark书签来决定。现在需要的时候怎么清空原来的内容。原来的bookmark中有文本,也由可能是table。我试了很多办法,包括bookmark.delete()方法的调用,都没有删除成功。
解决方案
解决方案二:
我这delphi替换里面的标签包括:文字和图片。unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj,Word2000,OleServer;typeTForm1=class(TForm)Button1:TButton;WordApplication1:TWordApplication;WordDocument1:TWordDocument;Button2:TButton;Button3:TButton;Button4:TButton;Button5:TButton;OpenDialog1:TOpenDialog;SaveDialog1:TSaveDialog;procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton4Click(Sender:TObject);procedureButton5Click(Sender:TObject);private{Privatedeclarations}wordApp,wordDoc:Variant;public{Publicdeclarations}end;varForm1:TForm1;implementation{$R*.dfm}//启动procedureTForm1.Button2Click(Sender:TObject);begintryWordApplication1.Connect;exceptMessageDlg('没有安装Word',mtError,[mbok],0);Abort;end;WordApplication1.Visible:=True;WordApplication1.Caption:='安全计算软件';WordApplication1.Options.CheckSpellingAsYouType:=False;WordApplication1.Options.CheckGrammarAsYouType:=False;end;//连接procedureTForm1.Button4Click(Sender:TObject);varFileName:OleVariant;ConfirmConversions:OleVariant;ReadOnly:OleVariant;AddToRecentFiles:OleVariant;PasswordDocument:OleVariant;PasswordTemplate:OleVariant;Revert:OleVariant;WritePasswordDocument:OleVariant;WritePasswordTemplate:OleVariant;Format:OleVariant;Encoding:OleVariant;Visible:OleVariant;ItemIndex,Template,NewTemplate,DocuType:OleVariant;beginOpendialog1.InitialDir:=ExtractFileDir(paramstr(0));Opendialog1.Filter:='赖勇军的文档文件(*.DOC)|*.DOC';//文件打开的初始路径ConfirmConversions:=False;ReadOnly:=False;AddToRecentFiles:=False;PasswordDocument:='';PasswordTemplate:='';Revert:=True;WritePasswordDocument:='';WritePasswordTemplate:='';Format:=wdOpenFormatAllWord;Encoding:=8437;Visible:=True;ItemIndex:=1;Template:=EmptyParam;NewTemplate:=False;DocuType:=wdNewBlankDocument;Visible:=true;tryifOpendialog1.ExecutethenbeginFileName:=Opendialog1.FileName;//'f:a.dot';//打开WordApplication1.Documents.Open(FileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);//WordApplication1.Documents.Open(FileName,ConfirmConversions,ReadOnly,AddToRecentFiles,PasswordDocument,PasswordTemplate,Revert,WritePasswordDocument,WritePasswordTemplate,Format,Encoding,Visible);endelse//新建WordApplication1.Documents.Add(Template,NewTemplate,DocuType,Visible);exceptshowmessage('打开新建文档失败!');exit;end;WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));end;//替换procedureTForm1.Button1Click(Sender:TObject);varBookMark_Name:OLEVariant;LinkToFile,SaveWithDocument,LyjSelection:OLEVariant;FPicture:OLEVariant;beginBookMark_Name:='bzr';ifWordDocument1.BookMarks.Exists(BookMark_Name)thenbeginWordDocument1.BookMarks.Item(BookMark_Name).Select;WordDocument1.Bookmarks.Item(BookMark_Name).Range.Text:='赖勇军';end;BookMark_Name:='shr';ifWordDocument1.BookMarks.Exists(BookMark_Name)thenbeginWordDocument1.BookMarks.Item(BookMark_Name).Select;WordDocument1.Bookmarks.Item(BookMark_Name).Range.Text:='赵文群';end;BookMark_Name:='tp';//插入图片的位置ifWordDocument1.BookMarks.Exists(BookMark_Name)thenbeginWordDocument1.BookMarks.Item(BookMark_Name).Select;LinkToFile:=False;SaveWithDocument:=True;FPicture:=WordApplication1.Selection.InlineShapes.AddPicture(ExtractFileDir(paramstr(0))+'1.bmp',LinkToFile,SaveWithDocument,EmptyParam);WordApplication1.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;{FPicture.ConvertToShape.Select;//转成可移动模式...WordApplication1.Selection.ShapeRange.WrapFormat.type_:=wdWrapNone;//无环绕这样才能衬于文字下方或浮于上方WordApplication1.Selection.ShapeRange.ZOrder(4);//显示在文字上方}{msoBringToFront=$00000000;msoSendToBack=$00000001;msoBringForward=$00000002;msoSendBackward=$00000003;msoBringInFrontOfText=$00000004;msoSendBehindText=$00000005;}end;BookMark_Name:='zjl';ifWordDocument1.BookMarks.Exists(BookMark_Name)thenbeginWordDocument1.BookMarks.Item(BookMark_Name).Select;WordDocument1.Bookmarks.Item(BookMark_Name).Range.Text:='张鹏';end;end;//断开procedureTForm1.Button5Click(Sender:TObject);varFileName:OleVariant;EParam:OleVariant;SaveChanges:OleVariant;//关闭时是否保存beginSaveChanges:=False;Savedialog1.InitialDir:=ExtractFileDir(paramstr(0));Savedialog1.Filter:='赖勇军的电子文件(*.DOC)|*.DOC';//文件打开的初始路径ifnotSavedialog1.ExecutethenbeginWordDocument1.Close(SaveChanges);exit;end;FileName:=Savedialog1.FileName;EParam:=EmptyParam;tryWordDocument1.SaveAs(FileName,EParam);WordDocument1.Close;showmessage('文件保存成功!');exceptshowmessage('文档保存失败!');end;end;//退出procedureTForm1.Button3Click(Sender:TObject);varSaveChanges,OriginalFormat,RouteDocument:OleVariant;beginSaveChanges:=WdDoNotSaveChanges;OriginalFormat:=UnAssigned;RouteDocument:=UnAssigned;tryWordApplication1.Quit(SaveChanges,OriginalFormat,RouteDocument);WordApplication1.Disconnect;exceptonE:ExceptiondobeginShowmessage(E.Message);WordApplication1.Disconnect;end;end;end;end.
解决方案三:
一种方法:Word.BookmarkswdBookmarks=wdDoc.Bookmarks;Word.BookmarkwdBookmark;longlngCount=wdBookmarks.Count;Word.SelectionwdSel;objectoIndex;for(longi=1;i<=lngCount;i++){oIndex=(object)i;wdBookmark=wdBookmarks.get_Item(refoIndex);wdBookmark.Select();wdSel=wdApp.Selection;wdSel.Text="从数据库中读取的值";}
解决方案四:
要有table或chart的话就读取书签,判断书签内容是text、table或chart,作相应处理。
解决方案五:
引用3楼shihaojie1219的回复:
要有table或chart的话就读取书签,判断书签内容是text、table或chart,作相应处理。
你好,怎么判断bookmark的内容是table还是其他的内容呢。用bookmark.tables.count>1吗?我的模板每个页面都是框在一个table的单元格中的,开始的时候书签是在这个单元格中的,里面还没有填充内容。但是我调用的bookmark.tables.count的时候还是大于1.不晓得这是怎么搞的。能加你详谈吗?我的邮箱wb1125@126.com
解决方案六:
学习了,希望能和大家多交流,以后常来往http://hi.csdn.net/space.html
解决方案七:
引用4楼wb1122的回复:
引用3楼shihaojie1219的回复:要有table或chart的话就读取书签,判断书签内容是text、table或chart,作相应处理。你好,怎么判断bookmark的内容是table还是其他的内容呢。用bookmark.tables.count>1吗?我的模板每个页面都是框在一个table的单元格中的,开始的时候书签是在这个单元格中的,里面还没有填充内容……
------------bookmark.tables.count>1?bookmark有tables属性?应该是bookmark.Range.tables.count>1也可以把table所在的bookmark编订特殊的名称,读取bookmark名称,根据名称判断bookmark内容是否是table
解决方案八:
你好,我用你的方法来设置书签的值,他每次能选中值但是后面还是附加到里面去了,不是替换原来的内容。你知道是什么原因嘛!