1. 程式人生 > >對word文件的操作

對word文件的操作

Var
ItemIndex :OleVariant;
FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
PasswordDocument, PasswordTemplate, Revert,
WritePasswordDocument, WritePasswordTemplate, Format: OleVariant;

vBookMark: BookMark;
i:integer;

fName : OleVariant;
sfName : string;
begin
try
Wordapp.Connect;
except
Wordapp.Quit;
Application.MessageBox('連線WORD伺服器失敗,請確定您已經正確安裝。','錯誤框',MB_OK+MB_ICONSTOP);
Abort;
end;

Wordapp.Visible := false;
Wordapp.AutoQuit:=True;
WordApp.Caption := '隨便寫';

FileName:=self.ado.Fieldbyname('檔案存放路徑').AsString;//模板檔案,在編譯程式前先建立這個檔案,放在C盤

//引數賦值
ConfirmConversions := False;
ReadOnly := False;
AddToRecentFiles := False;
PasswordDocument := '';
PasswordTemplate := '';
Revert := True;
WritePasswordDocument := '';
WritePasswordTemplate := '';
Format := wdOpenFormatDocument;

//開啟文件(模板)
WordApp.Documents.OpenOld( FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format );

ItemIndex := 1;
WordDocument1.ConnectTo(WordApp.Documents.Item(ItemIndex));

{Turn Spell checking of because it takes a long time if enabled and slows down Winword}
WordApp.Options.CheckSpellingAsYouType := False;
WordApp.Options.CheckGrammarAsYouType := False;

//這裡對開啟的模板進行替換操作,程式碼你應該有了


//另存為

Wordapp.Visible:=True;
Wordapp.AutoQuit:=False;


self.WordApp.Disconnect;

Application.MessageBox('報告生成完畢!','提示',MB_OK);
end;
.////////////////////////////////////////////////////////////////////


Wordapplication1.Documents.Add(Template,NewTemplate,DocumentType,Visible)

Template: 使用模板的名稱
NewTemplate: 新建文件的型別,True表示為模板,False表示為文件
DocumentType: 文件型別,預設為空白文件
Visible: 打撈的視窗是否可見

舉例:
var
visible,Template,NewTemplate,DocuType: OleVariant;
//賦初值
Template:='';
NewTemplate:=False;
DocuType:=wdNewBlankDocument;
Visible:=true;
//然後使用
wordapplication1.documents.add(Template,NewTemplate,DocuType,Visible);

網上有很多啊,給你貼一篇:


一、Delphi程式啟動Word
採用CreateOleObjects的方法來啟動Word,呼叫VBA程式碼,具體實現過程為:
首先使用GetActiveOleObject('Word.Application')判斷當前記憶體中是否存在Word程式,如果存在,
則直接連線,如果沒有Word程式,則使用CreateOleObject('Word.Application')啟動Word

二、Delphi程式新建Word文稿
格式:WordDocuments.Add(Template,NewTemplate,DocumentType,Visible)
Template: 使用模板的名稱,
NewTemplate: 新建文件的型別,True表示為模板,False表示為文件
DocumentType: 文件型別,預設為空白文件
Visible: 打撈的視窗是否可見

舉例:Doc_Handle:=Word_Ole.Documents.Add(Template:='C:\Temlate.dot',NewTemplate:=False);

三、Delphi程式開啟Word文稿
格式:WordDocuments.Open(FileName,ConfirmConversions,ReadOnly,PassWordDocument,
PasswordTemplate,Revent,WritePasswordDocument,WritePassWordTemplate,
Format,Encoding,Visible)

FileName: 文件名(包含路徑)
Confirmconversions: 是否顯示檔案轉換對話方塊
ReadOnly: 是否以只讀方式開啟文件
AddToRecentFiles: 是否將檔案新增到"檔案"選單底部的最近使用檔案列表中
PassWordDocument: 開啟此文件時所需要的密碼
PasswordTemplate: 開啟此模板時所需要的密碼
Revert: 如果文件已經,是否重新開啟文件
WritePasswordDocument: 儲存對文件更改時所需要的密碼
WritePasswordTemplate: 儲存對模板進行更改時所需要的密碼
Format: 開啟文件時所需使用的檔案轉換器
Encoding: 所使用的文件內碼表
Visible: 開啟文件的視窗是否可見

舉例:
Doc_Handle:=Word_Ole.Documents.open(FileName:=Doc_File,ReadOnly:=False,
AddToRecentFiles:=False);

四、Delphi程式儲存Word文稿
格式:WordDocuments.SaveAs(FileName, FileFormat, LockComments, Password,
AddToRecentFiles, WritePassword, ReadOnlyRecommended, 
EmbedTrueTypeFonts, SaveNativePictureFormat, SaveFormsData, 
SaveAsAOCELetter)

FileName: 檔名。預設為當前資料夾和檔名。
FileFormat 文件儲存的格式。
LockComments 如果為 True,則此文件只允許進行批註。
Password 開啟文件時的口令。
AddToRecentFiles 如果為True,則將文件添至"檔案"選單中最近使用的文件列表中。
WritePassword 儲存對文件的修改所需的口令。
ReadOnlyRecommended 如果為 True,在每次開啟文件時,Word 將建議使用者採用只讀方式。
EmbedTrueTypeFonts 如果為 True,則將文件與 TrueType 字型一起儲存。
SaveNativePictureFormat 如果為 True,則從其他系統平臺(例如 Macintosh)匯入的圖形僅儲存其 Windows 版本。
SaveFormsData 如果為 True,則將窗體中使用者輸入的資料存為一條資料記錄。
SaveAsAOCELetter 如果文件包含一個附加,當此屬性值為 True 時,將文件存為一篇 AOCE 信箋(同時儲存郵件)。

舉例:
Word_Ole.Documents.SaveAs(FileName:=Doc_File,FileFormat=wdFormatDocument,
AddToRecentFiles=False);

五、從資料庫讀取檔案到本地硬碟和從本地硬碟讀取檔案到資料庫

在資料庫上使用Image二進位制欄位儲存,使用Stream流的方式。

建立檔案流:
Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);
Word_FileStream.Position:=0;

儲存到資料庫的Image欄位:
TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);

從資料庫讀取檔案到本地硬碟:
TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);

釋放檔案流:
Word_FileStream.Free;

六、全域性訊息的定義
因為word和Delphi程式是兩個軟體,相互之間通訊比較麻煩,所以使用全域性訊息的方法進行。
全域性訊息必須首先註冊,Windows返回系統空閒的訊息號,當註冊的訊息相同時,
Windows系統返回同一個值,這樣就保證了使用這個訊息號在兩個程式之間通訊。

定義訊息的辦法:
szMessageString: pchar = 'XIDIAN_11_Stone';
FMyJoinMessage := RegisterWindowMessage(szMessageString);

傳送訊息的方法:
SendMessage(對方控制代碼,訊息,訊息附帶短變數,訊息附帶長變數)

七、Delphi程式接收訊息的方法
Delphi接收訊息有兩種,一是過載特定訊息,二是過載WndProc函式,在裡面選擇相應訊息進行處理。
法一,每次只能處理一條訊息,而法二能夠


/////////////////////
var
vWord,vDoc,vRange : Variant ;
sText,sReplace : string ;
lReturn : Boolean ;
begin
sText := 'ABCDEFG' ; //原文字串
sReplace := 'GFEDCBA' ; //新字串
vWord := CreateOleObject('Word.Application') ;//建立Word執行緒
try
//開啟要操作的檔案
vDoc := vWord.Documents.Open(ado.fieldbyname('檔案存放路徑').AsString);
vDoc.Select ; //選取中整個文件
vRange := vDoc.Range ; //替換範圍
lReturn := True ;
while lReturn do
begin //找到並替代成功則返回 True 共11個引數
lReturn := vDoc.Range.Find.Execute(sText,,,,,,,,,sReplace,True) ;
end ;
finally
vDoc.Close(True) ; //關閉文並儲存
vWord.Quit(False) ; //退出Word
end ;
end;