procedure TForm1.Button1Click(Sender: TObject);
var
  excel_sheet:variant;
  e_s:variant;
  i,j:integer;
  save_ok:boolean;
begin
  Table1.TableName:=ComboBox1.Text;
  Table1.Open;
  try         //啟動Excel
    excel_sheet:=CreateOleObject('excel.sheet');
  except
    showmessage('無法啟動 MS Excel');
    exit;
  end;
  excel_sheet.application.visible:=true;        //啟示 MS Excel 執行情況
  for i:=0 to table1.FieldCount-1 do
    excel_sheet.cells(1,i+1):=Table1.Fields[i].FullName;
  j:=1;
  while not Table1.Eof do
  begin
    j:=j+1;
    for i:=0 to Table1.FieldCount-1 do
      excel_sheet.cells(j,i+1):=Table1.Fields[i].AsString;
    Table1.Next;
  end;
  Table1.Close;
  if messagedlg('轉換成攻! 要存檔嗎',mtinformation,[mbyes,mbno],0)=mryes then
  begin
    save_ok:=SaveDialog1.Execute;
    if save_ok then
      excel_sheet.saveas(SaveDialog1.FileName);
  end;
  excel_sheet.application.quit;                //關閉 MS Excel
end;

解决方案 »

  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;
      MergeCell : Variant;
    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 := '宋体';  WordApp.Visible := true;
      //统计打印行数
      SltRec:=5;
      SltCol := 5;
      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 + 2,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;