[email protected] Thank You!

解决方案 »

  1.   

    你可以使用CELL控件,蛮不错,可以导入导出EXCEL文件,也可以用它自己写一个EXCEL。不过没有注册的版本只能用30天。
      

  2.   

    我的email: [email protected],收到加分!
      

  3.   

    一个调用excel 和 word处理数据的例子,请使用dbdemos中的数据表测试:
    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.columns[j].setwidth(100,1); 
        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.
      

  4.   

       CELL 控件蛮大的,原版安装文件将近4M,有人想要的话,告诉我一个大的信箱。
      

  5.   

    用ODBC打开EXCEL文件,可以把他当数据库用
    用table, dbgrid 都可以
      

  6.   

    stlont兄,不知到底怎样用ODBC连接excel文件,能够讲详细一些吗。
      

  7.   

    unit UExcelTools;interfaceuses
      classes, comctrls, stdctrls, windows, Dialogs, controls, SysUtils,
      Db,forms,DBClient,ComObj;//把数据集导入ExcelSheet的核心函数
    function DataSetToExcelSheet
                (
                DataSet    :TDataSet;
                FieldTagMax :Integer;  // 字段的Tag值如果大于这个值,就不导出到Excel
                Sheet      :OleVariant
                ): Boolean;//实际使用的函数,内部调用了DataSetToExcelSheet,在外面加入UI接口和错误处理
    function DataSetToExcel
                (
                DataSet    :TDataSet;  // 要转换的数据集
                FieldTagMax :Integer;  // 字段的Tag值如果大于这个值,就不导出到Excel
                Visible    :Boolean;      // 是否让做转换工作的Excel可见
                ExcelFileName:String='' // Excel文件名,*.xls
                ): Boolean;implementationFunction DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant): Boolean;
    var
      Row,Col,FieldIndex :Integer;
      BK:TBookMark;
    begin
      Result := False;
      if not Dataset.Active then exit;
      BK:=DataSet.GetBookMark;
      DataSet.DisableControls;  Sheet.Activate;
      try    // 列标题
        Row:=1;
        Col:=1;
        for FieldIndex:=0 to DataSet.FieldCount-1 do
            begin
            if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
                begin
                Sheet.Cells(Row,Col)  :=DataSet.Fields[FieldIndex].DisplayLabel;
                Inc(Col);
                end;
            end;
        // 表内容
        DataSet.First;
        while Not DataSet.Eof do
            begin
            Row:=Row+1;
            Col:=1;
            for FieldIndex:=0 to DataSet.FieldCount-1 do
                begin
                if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
                  begin
                  Sheet.Cells(Row,Col):=DataSet.Fields[FieldIndex].AsString;
                  Inc(Col);
                  end;
                end;
            DataSet.Next;
            end;    Result := True;
        finally
          DataSet.GotoBookMark(BK);
          DataSet.EnableControls;
        end;
    end;
    Function DataSetToExcel(
                      DataSet:TDataSet;FieldTagMax:Integer;
                      Visible:Boolean;ExcelFileName:String=''): Boolean;
    var
      ExcelObj, Excel, WorkBook, Sheet: OleVariant;
        OldCursor:TCursor;
      SaveDialog:TSaveDialog;
    begin
      Result := False;
      if not Dataset.Active then exit;  OldCursor:=Screen.Cursor;
      Screen.Cursor:=crHourGlass;  try
          ExcelObj := CreateOleObject('Excel.Sheet');
          Excel := ExcelObj.Application;
          Excel.Visible := Visible ;
          WorkBook := Excel.Workbooks.Add ;
          Sheet:= WorkBook.Sheets[1];
      except
          MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
                        '请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
          Screen.Cursor:=OldCursor;
          Exit;
      end;  Result:=DataSetToExcelSheet(DataSet,FieldTagMax,Sheet) ;
      if Result then
          if Not Visible then
          begin
            if ExcelFileName<>'' then
              WorkBook.SaveAs(FileName:=ExcelFileName)
            else begin
              SaveDialog:=TSaveDialog.Create(Nil);
              SaveDialog.Filter := 'Microsoft Excel 文件&brvbar;*.xls';
              Result:=SaveDialog.Execute;
              UpdateWindow(GetActiveWindow);
              if Result then
                WorkBook.SaveAs(FileName:=SaveDialog.FileName);
              SaveDialog.Free;
            end;
            Excel.Quit;
          end;
      Screen.Cursor:=OldCursor;
    end;
      

  8.   

    "Formula one" where to down ?
      

  9.   

    "Formula one" : http://www.helpwork.com/ocx/html/user/download.asp?id=361
      

  10.   

    创建 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; 
      

  11.   

    http://www.hktk.com/soft/soft_con_grids/cell.htmlcell控件太大,信箱发不进去,找了个地址,要的话,自己去下吧
      

  12.   

    youfly:你的控件收到了,怎么用?有例子或说明文档吗?
      

  13.   

    我在delphi6中导入"Formula one"时编译出错:pas 程序片段:function  TF1Book.Get_NumberRC(nRow: Integer; nCol: Integer): Double;
    begin
      Result := DefaultInterface.Get_NumberRC[nRow, nCol];
    end;error:
    [Error] TTF160_TLB.pas(3476): Undeclared identifier: 'Get_NumberRC' 
      

  14.   

    to jdxjf(生活象拉磨,我就是那拉磨的驴)
    如果EXCEL有合并的单元个怎么办