老大这个东西需要问人吗?
需要吗不需要吗。
你可以用录制word宏的办法来得到vba代码
然后再改写成delphi不就行了吗

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      WordApp,WordDoc,WordParagraph,WordRange,WordTable:variant;
      SltRec,SltCol,VisCol :integer;
      ColIndex,RowIndex : Integer;
      selr,selc,j,hh,lh:integer;
      allself:boolean;
    begin
      if VarIsEmpty(WordApp) then
        WordApp := CreateOleObject('word.Application');  WordDoc := WordApp.documents.add;
      WordParagraph := WordApp.activedocument.paragraphs.add;  WordRange := WordParagraph.range;
      WordRange.text:= Table1.TableName +#13+'  ';
      WordRange.Font.Size := 18;
      WordRange.Font.Name := '宋体';
    //  WordRange.Font.style := fsbold;  WordApp.Visible := true;
      //统计打印行数
      SltRec:=0;
      SltRec:=DBGrid1.SelectedRows.Count;
      if SltRec = 0 then
        SltRec := Table1.RecordCount;  //统计打印列数
      allself:=True;
      SltCol := 0;
      VisCol := 0;
      for j:= 0 to DBGrid1.Columns.Count-1 do
      begin
        if DBGrid1.Columns[J].Visible then
        begin
          VisCol := VisCol + 1;      if DBGrid1.Columns[j].Title.Color=clAqua then
          begin
            SltCol := SltCol + 1;
          end;
        end;
      end;
      if SltCol = 0 then
        SltCol := VisCol;  WordRange := WordApp.ActiveDocument.Content;
      WordRange.Collapse(wdCollapseEnd);
      WordTable:= WordApp.activedocument.tables.add(WordRange,SltRec + 1,SltCol);  {打印表头}
      ColIndex := 1;
      for  j := 0 to dbgrid1.Columns.Count-1  do
      begin
        if SltCol <> VisCol then
        begin
          if (dbgrid1.Columns[j].Visible = false) or (dbgrid1.Columns[j].Title.color <> clAqua) then
            Continue;
        end;    WordTable.Cell(1,ColIndex).Range.InsertAfter(dbgrid1.Columns[j].Title.Caption);
        DBGrid1.Columns[J].Title.Color := clAqua;
        ColIndex := ColIndex + 1;
      end;  //打印数据
      Table1.First;
      RowIndex := 2;
      ColIndex := 1;
      while not Table1.Eof do
      begin
        if SltRec <> Table1.RecordCount then
        begin
          if dbgrid1.SelectedRows.CurrentRowSelected = false then
          begin
            Table1.Next;
            Continue;
          end;
        end;    for j := 0 to dbgrid1.Columns.Count-1 do begin
          if (dbgrid1.Columns[j].Visible<>false) and (dbgrid1.Columns[j].Title.color=clAqua) then
          begin
            WordTable.Cell(RowIndex,ColIndex).Range.InsertAfter
              (Table1.Fieldbyname(dbgrid1.Columns[j].FieldName).asstring);
            ColIndex := ColIndex + 1;
          end;
        end;
        RowIndex := RowIndex + 1;
        ColIndex := 1;
        Table1.Next;
      end;{End of While...not...}
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      WordApp,WordDoc,WordParagraph,WordRange,WordTable:variant;
    begin
      try
        WordApp:=CreateOleObject('Word.Basic');
    //    WordDoc := WordApp.documents.add;
        WordApp.FileOpen('c:\证书.doc');
        WordApp.EditReplace('姓名','123');
        WordApp.appshow;
      finally
        if not VarIsEmpty(WordApp) then
          WordApp.Quit;
      end这是我写的一个从数据库中导入数据到word的程序,其中包括了对表格的处理,希望可以给你帮助
      

  2.   

    Focus(老鱼) 啊
    我正因为用过 "录制word宏的办法来得到vba代码" 而不成才问嘛,
    在DELPHI中的ADD 老是说参数不对,教一教嘛,拜托了.
      

  3.   

    Focus(老鱼) 啊
    我正因为用过 "录制word宏的办法来得到vba代码" 而不成才问嘛,
    在DELPHI中的ADD 老是说参数不对,教一教嘛,拜托了.
      

  4.   

    这可能是不同语言间传递参数
    数据类型不同的原因造成的
    你可以试试传递指针来解决
    比如int num
    (@num)
    往往可以
      

  5.   

    cobi(我是小新,我只有5岁),你好,你的这种打印方法我早就使用着,现在是想做一个 WORD 文档,别人可以自由改变表格的宽度或添加其他文字,所以只能在 WORD 文档中放一,二行(其中一行 为标题--内容不变),要添加时插入.
    请各位老大在帮忙想想办法.
      

  6.   

    按行拆分出一行就可以了。
    numrows := 2;
    numcols := 1;
    mergeSplit := False;//定义为OleVariant     wrdDoc.Document.Tables.Item (iTableId{第几个表格}).Rows.Item (iRowCount{第几行}).Cells.Split (numRows, numCols, mergesplit);  //以行拆分
      
    //要求之前不能有纵向合并的单元格。否则按下循环处理,i为列号
    wrdDoc.Document.Tables.Item (iTableId{第几个表格}).Cell(iRowCount,i+1).Split(numrows,numcols);    //以单元格循环拆分,速度慢
      

  7.   

    Focus(老鱼),你好,你看下面这
    WordDocument1.Tables.Item(TableNum).Rows.Add()
    应该传递什么参数和返回什么东西,怎么使用.
      

  8.   

    谢谢各位的关心,
    现在 wk_knife(我在地狱和天堂之间晃悠!两边都很热闹!) 帮我解决了问题,我只能把分给他.