delphi5中有个例子,在delphi安装目录下了,你可以看看。。

解决方案 »

  1.   

    我不喜欢用上面的控件,用OLE吧!很方便的,有900多个命令可以使用,可以满足绝大部分的需要,我做了一个程序,可以用Word.Basic生成Word表格!有机会贴出来!
      

  2.   

    Delphi带的那个例子太弱智了,没有什么实用价值!我从Word里面整理分离了一个CHM文件出来,可以作为单独的Word.Basic的调用资料进行查询,有3M多,很方便的,如果要做OLE控制,一定要看它的。我的程序就是自己看着这个CHM文件作出来的。
      

  3.   

    一个例子,
    里面含有对 Word 操作的常用方法:定位替换、表格等。
    procedure TForm1.Button1Click(Sender: TObject);
    var  WordApp,MyDoc,wTable: OLEVariant;
         FileName: string;
         i: integer;
    procedure FillRow(wTable: OLEVariant; Row,StartColumn: Byte; ss: array of String);
    var j: word;
    begin
      for j := Low(ss) to High(ss) do begin
          wTable.Cell(Row,j+StartColumn).Range.Text := ss[j];
      end;
    end;
    begin
       FileName := ExtractFileDir(Application.ExeName) + '\test1.dot';
       if not FileExists(FileName) then
          raise Exception.Create('找不到模板!');
       try
          WordApp := CreateOleObject('Word.Application');
          MyDoc := CreateOleObject('Word.Document');
       except
             Raise Exception.Create('无法打开Word,请确认已安装Word。');
       end;   WordApp.Visible := true;
       MyDoc := WordApp.Documents.Add(FileName,false);   MyDoc.BookMarks.Item('表名1').Select;
       WordApp.Selection.Text := 'Animals';
       wTable := MyDoc.Tables.Item(1);
       table1.First;
       for i := 2 to 4 do begin
           if not Table1.Eof then begin
              FillCell(i,1,wtable,'Name');
              FillCell(i,2,wtable,'Size');
              FillCell(i,3,wtable,'Area');
              Table1.Next
           end else Break
       end;   wTable := MyDoc.Tables.Item(2);
       table1.First;
       for i := 1 to 3 do
           if not table1.Eof then begin
              FillRow(wTable,i,2,[table1.fieldbyName('Name').AsString,
                table1.FieldByName('Size').AsString,
                table1.FieldByName('Area').AsString]);
              table1.Next
           end;   MyDoc.Tables.Add(MyDoc.Books.Item('表格3').Range,2,5)
    end;procedure TForm1.FillCell(i, j: byte; wTable: Variant; FieldName: String);
    begin
         wTable.Cell(i,j).Range.Text := table1.FieldByName(FieldName).AsString
    end;
      

  4.   

    谢谢各位,但是我想用DELPHI有控件,重申一下,如何用WORDDOCUMENT控件打开一个文件?
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
    itemindex :olevariant;
    filename, confirmconversions, readonly, addtorecentfiles,
    passworddocument, passwordtemplate, revert,
    writepassworddocument, writepasswordtemplate, format: olevariant;
    begin
    //打开word
      wordapplication1.Disconnect;
      try
        wordapplication1.connect;
      except
        messagedlg('word may not be installed', mterror, [mbok], 0);
        abort;
      end;
      wordapplication1.visible := true;
      //打开文件
    filename := 'c:\test.doc';
    confirmconversions := false;
    readonly := false;
    addtorecentfiles := false;
    passworddocument := '';
    passwordtemplate := '';
    revert := true;
    writepassworddocument := '';
    writepasswordtemplate := '';
    format := wdopenformatdocument;wordapplication1.documents.open( filename, confirmconversions,
    readonly, addtorecentfiles, passworddocument, passwordtemplate,
    revert, writepassworddocument, writepasswordtemplate, format );
    end;
    end.
      

  6.   

    我控制EXECL 的实验代码,不知对你是否有用
    procedure TForm1.startserver(Sender: TObject);
    var
    i,J,row,column:integer;
    begin
        Try
            ExcelApplication1.Connect;
        Except
            MessageDlg('Excel may not be installed',  mtError, [mbOk], 0);
            Abort;
        End;// ExcelApplication1.Visible[0]:=True;    ExcelApplication1.Caption:='Excel Application';
        ExcelApplication1.Workbooks.Add(Null,0);
        ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
        ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);    row:=1;
        FOR j := 1 to 8 do
        begin
            column:=1;
            for i:=1 to 8 do
            begin
                ExcelWorksheet1.Cells.Item[row,column]:=j*10+i;
                column:=column+1;
            end;
        Row := Row+1;
        end;ExcelApplication1.Visible[0]:=True;{
    Table1.Open;
    row:=1;
    While Not(Table1.Eof) do
    begin
      column:=1;
      for i:=1 to Table1.FieldCount do
      begin
        ExcelWorksheet1.Cells.Item[row,column]:
        =Table1.fields[i-1].AsString;
        column:=column+1;
      end;
      Table1.Next;
      row:=row+1;
    end;
    }end;procedure TForm1.fiel1Click(Sender: TObject);
    begin
        startserver(self);
    end;procedure TForm1.printout1Click(Sender: TObject);
    begin
        ExcelWorksheet1.PrintOut;
    end;procedure TForm1.previous1Click(Sender: TObject);
    begin
        ExcelWorksheet1.PrintPreview;
    end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
    end;procedure TForm1.open1Click(Sender: TObject);
    begin
        if  OpenDialog1.Execute then
        ExcelApplication1.Workbooks.Open(OpenDialog1.FileName,null,null,null,null,null,null,null,null,null,null,null,null,0);
    end;