大家一起讨论讨论有关用DELPHI操作WORD这方面的问题吧 (300分)

  • 主题发起人 主题发起人 zla
  • 开始时间 开始时间
Z

zla

Unregistered / Unconfirmed
GUEST, unregistred user!
大家一起讨论讨论有关用DELPHI操作WORD这方面的问题吧 !
我在写一个操作word的程序,在程序中我想调出word中的内置对话框
WordApplication1.CommandBars.Item['File'].Controls[9].Execute
这样我调出了“页面设置”对话框,但是我打开word时使
WordApplication1.visible:=false的,不想显示出word来,
只是想页面设置完成后,保存设置,在这个过程中并不想显示出word,
我在调出“页面设置”对话框时word并未显示,但是我只要点“页面设置”对话框上的“确定”或“取消”这是word就出来了,
有高手可以完成通过调用word的“页面设置”在不显示word的前提下,保存设置吗!
小弟十分感谢!
我是事先建了几个word文档设置好了格式作为模板,目的是通过拷贝这些文件形成新的文件
这样新文件中就有了固定的格式,但是事先建好的模板要能改才可以,但是在改模板时
并不需要把模板文档显示出来呀,而且也必需通过word的内置对话框设置文档格式。
有那为高手能实现这样的功能呀,有别的思路也可以的!
 
先参考一下这篇帖子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=737517
 
var
VarWord: Variant;// 创建 WORD时所用
begin
try
// 1. 建立 OleObject,连接 word97
VarWord:=CreateOleObject('word.basic');
// 2. 建立 Word97的新文件
VarWord.FileNew;
// 3. 设置 Word97的基本状态
VarWord.ViewZoom75; //设置显示比例为 75%
VarWord.ViewPage; //改为页面显示方式
// 4. 将当前数据控件上的信息发送至 Word97
// 4.1 发送文号数据
VarWord.CenterPara; //居中
Varword.font('宋体 '); //设置字体
VarWord.FontSize(14); //设置字号
varword.insert(#13+#13+ Edit1.Text+#13+#13+#13);
// 4.2 发送标题数据
VarWord.font('黑体 ');
VarWord.Fontsize(16);
VarWord.insert( Edit1.text+#13);
// 4.3 发送收文单位数据
VarWord.LeftPara; //左对齐
VarWord.Font('宋体 ');
VarWord.fontSize(14);
VarWord.Insert(#13+ Edit1.Text+': '+#13);
// 4.5 发送正文数据
VarWord.fontSize(14);
VarWord.Insert( Edit1.Text+#13);
// 4.6 发送发文单位数据
VarWord.RightPara; //右对齐
VarWord.fontSize(14);
VarWord.Insert( Edit1.Text+#13);
// 5 最后设置
VarWord.StartOfdocument; //到文首
VarWord.AppMaxiMize; //设置窗口最大化
VarWord.AppShow; //显示应用程序
except
showmessage('运行 Microsoft Word 失败! ');
end; //end of try
end;
//end:数据发送到 word事件

 
打开DELPHI
转到severs组件板
拉一个WordApplication1,改名为WordApplication
一个WordDocument1改名为WordDocument
转到dialogs组件板
拉一个OpenDialog1,改名为dlgopen
再拉4个button,将以下四段代码依次放入就行了
启动word时用如下代码:
begin
try
wordapplication.connect;
except
messagedlg('word may not be installed', mterror, [mbok], 0);
abort;
end;
wordapplication.visible := true;
wordapplication.caption := 'delphi automation';
end;
/////////////////////////////////////
关闭word用如下代码。如果想保存doc文件,请修改savechanges变量的内容:
var
savechanges, originalformat, routedocument: olevariant;
begin
savechanges := wddonotsavechanges;
originalformat := unassigned;
routedocument := unassigned;
try
wordapplication.quit(savechanges, originalformat, routedocument);
wordapplication.disconnect;
except
on e: exception do
begin
showmessage(e.message);
wordapplication.disconnect;
end;
end;
end;
/////////////////////////////////////
让word打开一个指定的文件,需要先放置opendialog,然后调用wordapplication.documents.open:
var
itemindex :olevariant;
filename, confirmconversions, readonly, addtorecentfiles,
passworddocument, passwordtemplate, revert,
writepassworddocument, writepasswordtemplate, format: olevariant;
begin
if not dlgopen.execute then
exit;
{open document}
filename := dlgopen.filename;
confirmconversions := false;
readonly := false;
addtorecentfiles := false;
passworddocument := '';
passwordtemplate := '';
revert := true;
writepassworddocument := '';
writepasswordtemplate := '';
format := wdopenformatdocument;
wordapplication.documents.open( filename, confirmconversions,
readonly, addtorecentfiles, passworddocument, passwordtemplate,
revert, writepassworddocument, writepasswordtemplate, format );
{assign worddocument component}
itemindex := 1;
worddocument.connectto(wordapplication.documents.item(itemindex));
{turn spell checking of because it takes a long time if enabled and slows down winword}
wordapplication.options.checkspellingasyoutype := false;
wordapplication.options.checkgrammarasyoutype := false;
end;
/////////////////////////////////////
让word替换标记字符串要使用worddocument.range.find.execute,这里用delphi替换了<#name>:
var
findtext, matchcase, matchwholeword, matchwildcards, matchsoundslike,
matchallwordforms, forward, wrap, format, replacewith, replace: olevariant;
begin
findtext := '<#name>';
matchcase := false;
matchwholeword := true;
matchwildcards := false;
matchsoundslike := false;
matchallwordforms := false;
forward := true;
wrap := wdfindcontinue;
format := false;
replacewith := 'delphi';
replace := true;
worddocument.range.find.execute( findtext, matchcase, matchwholeword,
matchwildcards, matchsoundslike, matchallwordforms, forward,
wrap, format, replacewith, replace );
end;
/////////////////////////////////////

 
WordApplication1.CommandBars.Item['File'].Controls[9].Execute


2004-5-6 10:08:25 http://www.delphibbs.com/delphibbs/dispq.asp?lid=737517


2004-5-6 15:15:05 uses ComObj;
procedure DocPageSetup(const DocFileName: string);
const
wdAlertsNone = $00000000;
wdDialogFilePageSetup = $000000B2;
var
DocApp: OleVariant;
begin
try
try
DocApp := CreateOleObject('Word.Application');
DocApp.DisplayAlerts := wdAlertsNone;
DocApp.Documents.Open(DocFileName);
DocApp.Dialogs.Item(wdDialogFilePageSetup).Show;
DocApp.Visible := False;
DocApp.ActiveDocument.Save;
except
end;
finally
if not VarIsEmpty(DocApp) then
DocApp.Quit;
DocApp := Unassigned;
end;
end;


2004-5-7 11:10:04 type
TTestData = array of record
MaxVal,
MinVal: Double;
end;

procedure AddDataToWordTable(const TestData: TTestData);
const
wdAlertsNone = $00000000;
wdAutoFitFixed = $00000000;
wdAlignRowCenter = $00000001;
wdAlignParagraphCenter = $00000001;
wdCellAlignVerticalCenter = $00000001;
var
WordApp, WordTbl: OleVariant;
I: Integer;
begin
try
try
WordApp := CreateOleObject('Word.Application');
WordApp.DisplayAlerts := wdAlertsNone;
WordApp.Documents.Add;
WordApp.Selection.TypeText('单位名称:“要写入的数据”');
WordApp.Selection.TypeParagraph;
WordTbl := WordApp.ActiveDocument.Tables.Add(WordApp.Selection.Range, Length(TestData) + 1, 3);

//设置表格格式
WordTbl.AutoFitBehavior(wdAutoFitFixed);//固定列宽
WordTbl.AllowPageBreaks := False;//不允许跨页断行
WordTbl.Rows.Alignment := wdAlignRowCenter;//表格居中方式
WordTbl.Borders.OutsideLineStyle := 1;
WordTbl.Borders.OutsideLineWidth := 12;
WordTbl.Borders.InsideLineStyle := 1;
WordTbl.Borders.InsideLineWidth := 4;
WordTbl.Range.Font.Name := '宋体';
WordTbl.Range.Font.Size := 9;
WordTbl.Select;
WordApp.Selection.Paragraphs.Alignment := wdAlignParagraphCenter;//单元格水平居中方式
WordTbl.Range.Cells.VerticalAlignment := wdCellAlignVerticalCenter;//单元格垂直居中方式
WordTbl.Rows.Height := 16;//设置行高

//填入数据


2004-5-9 9:30:41 用Word 2000 进行简繁转换,以下是成功代码。

procedure TForm1.Button1Click(Sender: TObject);
var
doc,app:olevariant;
s:string;
begin
doc:=createOleobject('Word.Document');
app:=doc.application;
app.Selection.typetext(Memo1.text);
app.Selection.wholestory;
app.selection.select;
app.WordBasic.ToolsSCTCTranslate(0,0,0);//简转繁
// app.WordBasic.ToolsTCSCTranslate(0,0,0);//繁转简
s:=app.selection.text;
delete(s,length(s),1);
s:=stringreplace(s,#13,#13#10,[rfReplaceAll]);
memo1.text:=s;
doc.close(0);
end;

 
wqhatnet你好,你的下面一段代码能实现调出“页面设置”对话框,
但是当点击“页面设置”对话框的“确定”或“取消”按钮时word文档就显示出来了,虽然
DocApp.Visible := False;马上有隐藏word,但是还是显示一下,你能彻底使word不显示吗
procedure DocPageSetup(const DocFileName: string);
const
wdAlertsNone = $00000000;
wdDialogFilePageSetup = $000000B2;
var
DocApp: OleVariant;
begin
try
try
DocApp := CreateOleObject('Word.Application');
DocApp.DisplayAlerts := wdAlertsNone;
DocApp.Documents.Open(DocFileName);
DocApp.Dialogs.Item(wdDialogFilePageSetup).Show;
DocApp.Visible := False;
DocApp.ActiveDocument.Save;
except
end;
finally
if not VarIsEmpty(DocApp) then
DocApp.Quit;
DocApp := Unassigned;
end;
end;
 
嘿嘿,要word不显示,又要显示Word内部的对话框?

用一般的方法实现不了的。想想其他另类的方法吧
 
互相帮助嘛:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2492267
 
哦 , 不错。高手都在这里啊。好。 小弟这里有200多分没有人要,各位帮忙分了吧。呵呵:) 吆! 忘了给各位鼓掌了。 上面很精彩的,我慢慢看。
 
对不起,我忘了贴问题地址了。 呵呵:) 记性不好。呵呵:)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2604145
 
大家继续讨论,这方面的东西资料很少
 
如果是把每个模板放在不同的路径下,只需更改word模板的位置就行了,这样word不出现,我做过的,但是对word2003有时会出现
 
雪逸能详细说一下吗??等!!
 
有高手在啊,那我顺便问一个菜问题,用delphi打开的word,然后用户直接关闭word,则程序运行完毕会报错说rpc服务不可用,那怎样获取word本身的关闭消息,使得delphi不报那个错误呢
 
对WordApplication1.Options.DefaultFilePath[wdUserTemplatesPath]赋予一个你想要用到的模板路径,这样,在你打开word时,word就会自动调入你做好的模板,这样,word不会出现,但是在进程中已经打开了word。
 
TO 雪逸
您能帮我详细的解答一下吗,我还是不太清楚
我其实想在不显示出“模板”的前提下,修改“模板”,然后保存设置

 
我用WordApp := CreateOleObject('Word.Application');创建了一个文档,那请问如何设置字体呢?譬如我第一行的字要求红色,宋体,18号,居中。第二行要求蓝色,楷体,9,右对其。谢谢
 
后退
顶部