delphi控制word的问题?(200分)

P

pp虫

Unregistered / Unconfirmed
GUEST, unregistred user!
我用worddocument和wordapplication、wordfont的过程中遇到以下问题:
我想控制word每一段的字体,但我用以下方法只能使各段显示同一种字体,还请各位大虾指点,谢过先了

procedure TForm1.Button1Click(Sender: TObject);
var
ItemIndex :OleVariant;
FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
PasswordDocument, PasswordTemplate, Revert,
WritePasswordDocument, WritePasswordTemplate, Format: OleVariant;

procedure setfont1;
begin
WordFont.ConnectTo(WordDocument. .Sentences.Get_Last.Font);
WordFont.Name:='宋体';
WordFont.Size :=9;
WordFont.Bold := 1;
end;
procedure setfont2;
begin
WordFont.ConnectTo(WordDocument.Sentences.Get_Last.Font);
WordFont.Name:='黑体';
WordFont.Size :=9;
WordFont.Bold := 0;
end;

begin
try
Wordapplication.Connect;
except
MessageDlg('Word may not be installed', mtError, [mbOk], 0);
Abort;
end;
Wordapplication.Visible := True;
WordApplication.Caption := 'Delphi automation';


FileName := 'e:/newword.doc'; //我硬盘里存在的word文件
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));

Wordapplication.Visible := true;
SetFont1;
WordDocument.Range.InsertAfter('这句显示用宋体');
SetFont2;
WordDocument.Range.InsertAfter('这句显示用黑体')


end;
 
热诚关注
 
你用Range.font指定字体,通过设置range的范围不就可以指定字体了吗?
 
您可以查询
word 或 excel
看看老帖。
 
jiangxiancheng:
请问怎么设置,我就是不会设置range的范围啊
 
不是有Start和end两个参数吗?
 
真是不好意思,我是新手,各位大虾能否给点例子
 
procedure TForm1.Button1Click(Sender: TObject);
var
a: olevariant;
begin
a := CreateOleObject('word.document');
a.application.visible := true;
a.application.documents.add;
a := a.application.activedocument;
a.Range.InsertAfter('这句显示用宋体'#13#10);
a.Range.InsertAfter('这句显示用黑体'#13#10);
a.range(1,8).font.name := '宋体';
a.range(1,8).font.size := 80;
a.range(9,16).font.name := '黑体';
a.range(9,16).font.size := 36;
end;
 
你的setfont函数是这么写的
WordFont.ConnectTo(WordDocument.Sentences.Get_Last.Font);
所以word就对文档的最后一行设置成相应的字体.

然后再看看你的代码
SetFont1;
WordDocument.Range.InsertAfter('这句显示用宋体');
SetFont2;
WordDocument.Range.InsertAfter('这句显示用黑体')
插入的两句话仍然是一个sentence,即还是一个句子,所以最后的字体还是
黑体.

试试下面的代码就知道区别了
WordDoc.Range.InsertAfter('这句显示用宋体'+ char(10)+char(13));// 加了一个回车
SetFont1;
WordDoc.Range.InsertAfter('这句显示用黑体');
SetFont2;

 
继续关注。。。
 
转载:
[DELPHI]让DELPHI与OFFICE联姻
[Crystal Studio]收录 2001-8-6 20:54:12 发布人:房客

由于微软的Office系列的完善的功能;与Windows和IE的紧密集成以及强大的扩展能力,它实际上已经成为事实上的Windows下办公软件的标准,我们知道在VB中可以建立各种Office对象(Word、Excel)并控制这些对象编辑、打印、保存文档以及控制执行Office中的很多操作。象这样在VB中建立并控制Office对象是十分有用的,例如你可以将一个或者一批数据库自动输入到Word或者Excel中并保存,再通过Outlook将文档分发给其它同仁。
  过去,这只有通过VB才能实现的,但是现在Delphi5也提供了这样强大的对象组。利用Delphi也可以利用Office资源了。
  打开Delphi,滚动Compent Palette到Servers页,就可以看到很多熟悉的控件图标,这些就是Office组件的控件。Delphi 5中对应Office的组件包括了Word、Excel、Access、PowerPoint和Outlook可以说是十分的全面。不过要使用这些组件首先要保证你的系统中安装了Office 97或以上的 版本。
  下面首先来说以下Office组件的基本使用方法Delphi中对于Office中不同的组件,首先要建立一个Application对象,例如要控制Word,首先要建立TWordApplication对象,然后再将诸如TWordDocument等Word对象通过ConnectTo方法连接到TWordApplication对象上。对于其它的Excel、Outlook等也是如此。
  下面我通过具体的范例来说明对Delphi中Office对象的控制,即如何将文字输出到Word中进行简单的排版并保存和打印输出。
  首先建立一个新的工程,在Form1中加入三个TButton对象、一个TMemo对象、一个TWordApplication对象、一个TWordDocument对象、一个TWordFont对象。下面是Form1的代码:
  unit Unit1;
  interface
  uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Word97, OleServer,Clipbrd;
  type
  TForm1 = class(TForm)
  Memo1: TMemo;
  Button1: TButton;
  WordApplication1: TWordApplication;
  WordDocument1: TWordDocument;
  WordFont1: TWordFont;
  Button2: TButton;
  Button3: TButton;
  procedure FormCreate(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;
  var
  Form1: TForm1;
  implementation
  {$R *.DFM}
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  Button1.Caption := '插入到Word';
  Button2.Caption := '打印';
  Button3.Caption := '退出';
  Button2.Enabled :=False;
  Button3.Enabled :=False;
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  var
  Template,NewTemplate,ItemIndex:OleVariant;
  procedure setfont;
  begin
  WordFont1.ConnectTo(WordDocument1.Sentences.Get_Last.Font);
  WordFont1.Bold := 1;
  WordFont1.Italic := 1;
  WordFont1.shadow := 1;
  WordFont1.Size := 12;
  end;
  begin
  try
  Template := EmptyParam;
  NewTemplate := True;
  ItemIndex := 1;
  try
  Wordapplication1.Connect;
  except
  MessageDlg('无法连接,也许没有安装Word', mtError, [mbOk], 0);
  Abort;
  end;
  Wordapplication1.Visible := False;
  WordApplication1.Caption := 'Delphi Word';
  //建立一个新文档
  Template := EmptyParam;
  NewTemplate := False;
  WordApplication1.Documents.Add(Template, NewTemplate);
  //建立WordDocument连接
  WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
  //因为Word进行拼写检查需要很多时间,所以首先关闭检查
  WordApplication1.Options.CheckSpellingAsYouType := False;
  WordApplication1.Options.CheckGrammarAsYouType := False;
  //将Memo1的内容拷贝到Word中
  SetFont;
  WordDocument1.Range.InsertAfter('Memo1的文本: ' + #13+Memo1.Text + #13);
  Button2.Enabled :=True;
  Button3.Enabled :=True;
  Button1.Enabled :=False;
  except
  on E: Exception do
  begin
  ShowMessage(E.Message);
  WordApplication1.Disconnect;
  end;
  end;
  end;
  procedure TForm1.Button2Click(Sender: TObject);
  begin
  WordDocument1.PrintOut;
  end;
  procedure TForm1.Button3Click(Sender: TObject);
  var
  SaveChanges,OriginalFormat,RouteDocument,SavePath: OleVariant;
  begin
  SaveChanges := WdDoNotSaveChanges;
  OriginalFormat := UnAssigned;
  RouteDocument := UnAssigned;
  try
  SavePath:='c:/samp.doc';
  WordDocument1.SaveAs(SavePath);
  WordDocument1.Close;
  WordDocument1.Disconnect;
  WordApplication1.Quit(SaveChanges, OriginalFormat, RouteDocument);
  WordApplication1.Disconnect;
  close;
  except
  on E: Exception do
  begin
  Showmessage(E.Message);
  WordApplication1.Disconnect;
  end;
  end;
  end;
  end.
  运行程序,在Memo1中输入一些文字,点击“插入到Word”按钮,然后点击“打印”按钮就可以将由Memo1输入到Word中的文本打印出来。点击“退出”按钮就可以将文档保存到 c:/samp.doc 中然后关闭与Word的连接并退出。
  由上面的范例可以看到,Delphi对于Office组件的编程同VB是有一些相似的,由于不知道什么原因,Delphi并没有提供Office组件的帮助文档。上面的程序我是一点点摸索出来的,但是如果你掌握了Office组件的编程技巧,加上Delphi强大的功能,一定会使你的程序如虎添翼的。
  以上程序在Windows98、Windows2000,Delphi5.0,Office2000下运行通过。  
 
多人接受答案了。
 
顶部