求救 请教 如题 谢谢 !!

解决方案 »

  1.   

    看看这个,是否可以
    http://blog.csdn.net/zxf_feng/archive/2008/03/03/2142264.aspx
      

  2.   

    /******* 导出到excel 
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' 
      

  3.   

    从DBGrid,StringGrid导出Excel 
    procedure TDM.CopyDbDataToExcel(Target: TDBGridEh;mb,FileName: string);
    var
    iCount, jCount: Integer;
    XLApp: Variant;
    Sheet: Variant;
    begin
    Screen.Cursor := crHourGlass;
    if not VarIsEmpty(XLApp) then
    begin
     XLApp.DisplayAlerts := False;
     XLApp.Quit;
     VarClear(XLApp);
    end;
    //--------------------------选择模板------
    // CopyFile(pChar(Trim(ExtractFilePath(Application.ExeName))+mb+'.xls'),pChar(FileName+'1.xls'),false);
    //------------------------
    //通过ole创建Excel对象
    try
     XLApp := CreateOleObject('Excel.Application');
    except
     Screen.Cursor := crDefault;
     Exit;
    end;
    if mb = '统计-项目信息前' then
      XLApp.WorkBooks.Add[Trim(ExtractFilePath(Application.ExeName))+mb+'.xls']    //你要把数据放在那里啊,先生成个文件在e:\1.xls
    else
     XLApp.WorkBooks.Add;
    XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';
    Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];
    if not Target.DataSource.DataSet.Active then
    begin
     Screen.Cursor := crDefault;
     Exit;
    end;
    Target.DataSource.DataSet.first;for iCount := 0 to Target.Columns.Count - 1 do
    begin
     Sheet.cells[1, iCount + 1] := trim(Target.Columns.Items[iCount].Title.Caption);
    end;jCount := 1;
    while not Target.DataSource.DataSet.Eof do
    begin for iCount := 0 to Target.Columns.Count - 1 do   //
     begin
      if iCount = 0 then
       Sheet.cells[jCount + 1, iCount + 1] := IntToStr(jCount)
      else
       Sheet.cells[jCount + 1, iCount + 1] := trim(Target.Columns.Items[iCount].Field.AsString);
     end;
    Inc(jCount);
    Target.DataSource.DataSet.Next;
    end;//--------------------可以在此添加Excel的宏-----------XLApp.ActiveWorkbook.SaveAs(FileName:=FileName);                                                                                                            ;
    Screen.Cursor := crDefault;
    XLApp.ActiveWorkbook.Close;
    end;
    -----------------------------------------StringGridToExcelprocedure TDM.CopySGDataToExcel(Target: TStringGrid;FileName: string);
    var
    iCount, jCount: Integer;
    XLApp: Variant;
    Sheet: Variant;
    begin
    Screen.Cursor := crHourGlass;
    if not VarIsEmpty(XLApp) then
    begin
    XLApp.DisplayAlerts := False;
    XLApp.Quit;
    VarClear(XLApp);
    end;
    //通过ole创建Excel对象
    try
    XLApp := CreateOleObject('Excel.Application');
    except
    Screen.Cursor := crDefault;
    Exit;
    end;
    XLApp.WorkBooks.Add;    //你要把数据放在那里啊,先生成个文件在e:\1.xls
    XLApp.WorkBooks[1].WorkSheets[1].Name := 'sheet1';
    Sheet := XLApp.Workbooks[1].WorkSheets['sheet1'];
    Target.Row := 0;
    for iCount := 0 to Target.RowCount - 1 do
    begin
     for jCount := 0 to Target.ColCount - 1 do
       Sheet.cells[iCount + 1, jCount + 1] := Target.Cells[jCount,iCount];
     Target.Row := iCount;
    end;
    XLApp.ActiveWorkbook.SaveAs(FileName:=FileName);
    Screen.Cursor := crDefault;
    XLApp.ActiveWorkbook.Close;
    end;
      

  4.   

    以上的这么麻烦,来个简单的{前题ADOQUERY控件的SQL句 select x_a as 工号,x_b 姓名,x_c 部门 from x_eng 加入AS是为了标题显示中文}//方法:
    procedure TForm1.DataSetToExcel(ADataSet: TCustomADODataSet;
      const AFileName: string);
    var
      Table, ExcelApp, ExcelBook, ExcelSheet: Variant;
    begin
      if not ADataSet.Active then Exit;
      ExcelApp := CreateOleObject('Excel.Application');
      ExcelApp.DisplayAlerts := False;
      ExcelBook := ExcelApp.WorkBooks.Add;
      ExcelSheet := ExcelBook.Sheets.Item[1];
      Table := ExcelSheet.QueryTables.Add(ADataSet.Recordset, ExcelSheet.Range['A1']);
      Table.Refresh(True);
      ExcelBook.Close(True, AFileName);
    end;//调用
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     if SaveDialog1.Execute then begin
      DataSetToExcel(ADOquery1, SaveDialog1.FileName);
     end;
    end;