吧数据表数据导入word、excel及吧数据从excel导入到text文件
unit UMain;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, StdCtrls, Grids, DBGrids,Excel97,Comctrls,OleCtnrs,ComObj,word97;type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    Button1: TButton;
    Button2: TButton;
    DataSource1: TDataSource;
    Table1: TTable;
    SaveDialog1: TSaveDialog;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    XlsApp,XlsSheet,XlsWBk : Variant;
    WordApp : Variant;
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
  I,J : integer;
begin
  if VarIsEmpty(XlsApp) then
    XlsApp := CreateOleObject('Excel.Application');  XLsApp.Workbooks.Add;
  XlsSheet := XLsApp.Worksheets['Sheet1'];  for I := 0 to Table1.Fields.Count - 1 do
  begin
    XlsSheet.Cells[3,I + 1] := dbgrid1.Columns[I].Title.Caption;
  end;  Table1.first;
  for J := 0 to Table1.RecordCount - 1 do
  begin
    if DBGrid1.SelectedRows.CurrentRowSelected then
    begin
      for I := 0 to Table1.Fields.Count - 1 do
      begin
        XlsSheet.Cells[J + 4,I + 1] := Table1.Fields[I].AsString;
      end;
    end;
    Table1.Next;
  end;  if savedialog1.Execute then
    xlssheet.saveas(savedialog1.FileName);  XlsApp.Visible := true;
end;procedure TForm1.Button2Click(Sender: TObject);
var
  I,J : integer;
  TxtFile : TextFile;
  TmpString : String;
begin
  try
    if VarIsEmpty(XlsApp) then
      XlsApp := CreateOleObject('Excel.Application');
    XlsSheet := XlsApp.workbooks.open('c:\my documents\book3.xls');    AssignFile(TxtFile,'C:\My Documents\Test.txt');
    Rewrite(TxtFile);
    try
      for I := 3 to 21 do
      begin
        TmpString := '';
        for J := 1 to 5 do
        begin
          TmpString := TmpString + XlsSheet.ActiveSheet.Cells[I,J].Text + '|';
        end;
        Writeln(TxtFile,Tmpstring);
      end;
    finally
      CloseFile(TxtFile);
    end;
    XlsApp.Visible := true;
  except
    XlsSheet.close;
    XlsApp.Application.quit;
    XlsApp := Unassigned;
    XlsSheet := Unassigned;
  end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if not VarIsEmpty(XlsApp) then
  begin
    XlsApp.DisplayAlerts := True;  // 7Discard unsaved files....
    try
      XlsApp.Application.Quit;
      XlsApp := Unassigned;
      XlsSheet := Unassigned;
    except
    end;
  end;  if not VarIsEmpty(WordApp) then
  begin
    WordApp.DisplayAlerts := True;  // 7Discard unsaved files....
    try
      WordApp.Application.Quit;
      WordApp := Unassigned;
    except
    end;
  end;end;procedure TForm1.Button3Click(Sender: TObject);
var
  WordDoc,WordParagraph,WordRange,WordTable:variant;
  SltRec,SltCol,VisCol :integer;
  ColIndex,RowIndex : Integer;
  I,J : integer;
  PrintAll : Boolean;
begin
  try
    if VarIsEmpty(WordApp) then
      WordApp := CreateOleObject('word.Application');    WordDoc := WordApp.documents.add;
    WordParagraph := WordApp.activedocument.paragraphs.add;    WordRange := WordParagraph.range;
    WordRange.Font.Size := 18;
    WordRange.Font.Name := '宋体';
  except
    Application.MessageBox(pchar('Ms Word 无法启动,数据转入终止!'),pchar('注意'),mb_ok);
    Abort;
  end;  if DBGrid1.SelectedRows.Count <> 0 then
    SltRec:= DBGrid1.SelectedRows.Count
  else
    SltRec := Table1.RecordCount;  SltCol := DBGrid1.Columns.Count;  WordRange := WordApp.ActiveDocument.Content;
  WordRange.Collapse(wdCollapseEnd);
  WordTable:= WordApp.activedocument.tables.add(WordRange,SltRec + 1,SltCol);  {打印表头}
  for  j := 0 to SltCol-1  do
  begin
    WordTable.Cell(1,J+1).Range.InsertAfter(dbgrid1.Columns[j].Title.Caption);
  end;  //打印数据
  Table1.First;
  RowIndex := 2;
  ColIndex := 1;
  while not Table1.Eof do
  begin
    if dbgrid1.SelectedRows.CurrentRowSelected then
    begin
      for j := 0 to dbgrid1.Columns.Count-1 do
      begin
        WordTable.Cell(RowIndex,ColIndex).Range.InsertAfter
            (table1.Fieldbyname(dbgrid1.Columns[j].FieldName).asstring);
          ColIndex := ColIndex + 1;
      end;
      RowIndex := RowIndex + 1;
      ColIndex := 1;
    end;    Table1.Next;
  end;{End of While...not...}  if savedialog1.Execute then
    WordDoc.saveas(savedialog1.FileName);  WordApp.Visible := true;
end;procedure TForm1.Button4Click(Sender: TObject);
var
  i : integer;
begin
  for I := 0 to Table1.RecordCount - 1 do
  begin
    DBGrid1.SelectedRows.CurrentRowSelected := true;
    Table1.Next;
  end;
end;end.

解决方案 »

  1.   

    创建 Excel 对象,使用ComObj:
    var ExcelID: Variant;ExcelID := CreateOleObject( 'Excel.Application' );1) 显示当前窗口:
    ExcelID.Visible := True;2) 更改 Excel 标题栏:
    ExcelID.Caption := '应用程序调用 Microsoft Excel';3) 添加新工作簿:
    ExcelID.WorkBooks.Add;4) 打开已存在的工作簿:
    ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );5) 设置第2个工作表为活动工作表:
    ExcelID.WorkSheets[2].Activate;  
    或 
    ExcelID.WorksSheets[ 'Sheet2' ].Activate;6) 给单元格赋值:
    ExcelID.Cells[1,4].Value := '第一行第四列';7) 设置指定列的宽度(单位:字符个数),以第一列为例:
    ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
    ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米9) 在第8行之前插入分页符:
    ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;10) 在第8列之前删除分页符:
    ExcelID.ActiveSheet.Columns[4].PageBreak := 0;11) 指定边框线宽度:
    ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;1-左    2-右  3-顶    4-底  5-斜( \ )    6-斜( / )12) 清除第一行第四列单元格公式:
    ExcelID.ActiveSheet.Cells[1,4].ClearContents;13) 设置第一行字体属性:
    ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';
    ExcelID.ActiveSheet.Rows[1].Font.Color  := clBlue;
    ExcelID.ActiveSheet.Rows[1].Font.Bold  := True;
    ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;14) 进行页面设置:a.页眉:
        ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';
    b.页脚:
        ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';
    c.页眉到顶端边距2cm:
        ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
    d.页脚到底端边距3cm:
        ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
    e.顶边距2cm:
        ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
    f.底边距2cm:
        ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
    g.左边距2cm:
        ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
    h.右边距2cm:
        ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
    i.页面水平居中:
        ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
    j.页面垂直居中:
        ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
    k.打印单元格网线:
        ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;15) 拷贝操作:a.拷贝整个工作表:
        ExcelID.ActiveSheet.Used.Range.Copy;
    b.拷贝指定区域:
        ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
    c.从A1位置开始粘贴:
        ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
    d.从文件尾部开始粘贴:
        ExcelID.ActiveSheet.Range.PasteSpecial;16) 插入一行或一列:a. ExcelID.ActiveSheet.Rows[2].Insert;
    b. ExcelID.ActiveSheet.Columns[1].Insert;
    17) 删除一行或一列:a. ExcelID.ActiveSheet.Rows[2].Delete;
    b. ExcelID.ActiveSheet.Columns[1].Delete;18) 打印预览工作表:
    ExcelID.ActiveSheet.PrintPreview;19) 打印输出工作表:
    ExcelID.ActiveSheet.PrintOut;20) 工作表保存:
    if not ExcelID.ActiveWorkBook.Saved then
      ExcelID.ActiveSheet.PrintPreview;21) 工作表另存为:
    ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );22) 放弃存盘:
    ExcelID.ActiveWorkBook.Saved := True;23) 关闭工作簿:
    ExcelID.WorkBooks.Close;24) 退出 Excel:
    ExcelID.Quit;