我想把其变为网页格式文档后导入word如何??

解决方案 »

  1.   

    把dbgrid中的数据导入word中,相信其原理和你要求应该是一样的
    procedure TForm4.BinWordClick(Sender: TObject);
    var
      WordApp,WordDoc,WordParagraph,WordRange,WordTable:variant;
      SltRec,SltCol,VisCol :integer;
      ColIndex,RowIndex : Integer;
      I,J : integer;
      PrintAll : Boolean;
    begin
      STBar.Panels[0].Text := '';
      PrintAll := false;
      if DBGrid1.SelectedRows.Count = 0 then
      begin
        if MessageDlg('当前没有选定打印的记录,是否全部打印?',mtconfirmation,[Mbyes,Mbno],0) = mrno then
        begin
          Application.MessageBox(pchar('没有选定的数据记录,打印终止!'),pchar('注意'),mb_ok);
          Abort;
        end else
          PrintAll := true;
      end;  try
        if VarIsEmpty(WordApp) then
          WordApp := CreateOleObject('word.Application');    WordDoc := WordApp.documents.add;
        WordParagraph := WordApp.activedocument.paragraphs.add;    WordRange := WordParagraph.range;
        //  WordRange.text:= dm1.QryMain.TableName +#13+'  ';
        WordRange.Font.Size := 18;
        WordRange.Font.Name := '宋体';
        //  WordRange.Font.style := fsbold;
      except
        Application.MessageBox(pchar('Ms Word 无法启动,数据转入终止!'),pchar('注意'),mb_ok);
        BinWord.Enabled := false;
        STBar.Panels[0].Text := 'Ms Word 无法启动';
        Abort;
      end;
      STBar.Panels[0].Text := '数据正在转移至Word';  //统计打印行数
      if PrintAll then
        SltRec := dm1.QryMain.RecordCount
      else
        SltRec:=DBGrid1.SelectedRows.Count;  //统计打印列数
      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;  //打印数据
      dm1.QryMain.First;
      RowIndex := 2;
      ColIndex := 1;
      while not dm1.QryMain.Eof do
      begin
        if SltRec <> dm1.QryMain.RecordCount then
        begin
          if dbgrid1.SelectedRows.CurrentRowSelected = false then
          begin
            dm1.QryMain.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
              (dm1.QryMain.Fieldbyname(dbgrid1.Columns[j].FieldName).asstring);
            ColIndex := ColIndex + 1;
          end;
        end;
        RowIndex := RowIndex + 1;
        ColIndex := 1;
        dm1.QryMain.Next;
      end;{End of While...not...}
      WordApp.Visible := true;
      STBar.Panels[0].Text := '数据转移成功,请使用Word打印所选定的数据';
      for j := 0 to dbgrid1.Columns.Count-1 do
        DBGrid1.Columns[J].Title.Color := clAqua;
    end;