我想將DBGRID中的若干行數據寫入EXCEL中寫到這裡卻不知怎樣寫:
var ExcelApp: Variant;
begin
   ExcelApp := CreateOleObject( 'Excel.Application' );
   ExcelApp.Visible := True;
   ExcelApp.WorkBooks.Add;
   ExcelApp.WorkBooks.Open( 'd:\print\order.xls' );
   ExcelApp.WorkSheets[1].Activate;
   以下怎樣寫
   .
   .
   .
end;
  還有就是:有沒有方法創建一個動態的EXCEL也就是不要ExcelApp.WorkBooks.Open( 'd:\print\order.xls' );這一句,能動態生成與( 'd:\print\order.xls' )表格標頭一樣的文檔。

解决方案 »

  1.   

    var
      i, row, col : Integer;
    begin
      if Query1.FieldCount > 0 then
      begin
        Try
          ExcelApplication1.Connect;
        Except
          ShowMessage(ExcelConError);
          Abort;
        end;
        ExcelApplication1.Workbooks.Add(emptyParam,0);
        ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
        ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet);    for i:=0 to Query1.FieldCount-1 do
        begin
          ExcelWorkSheet1.Cells.Item[1,i+1] := Query1.Fields[i].FieldName;
        end;
        row := 2;
        while not(Query1.Eof) do
        begin
          col := 1;
          for i:=0 to Query1.FieldCount-1 do
          begin
            ExcelWorkSheet1.Cells.Item[row,col] := Query1.Fields[i].AsString;
            col := col+1;
          end;
          Query1.Next;
          row := row+1;
        end;    if SaveDialog1.Execute then
        begin
          ExcelWorkSheet1.SaveAs(SaveDialog1.FileName);
          ShowMessage('成功导出数据.');
        end;    ExcelApplication1.Quit;
        ExcelApplication1.Disconnect;
      end         // if Query1.FieldCount
      else
        ShowMessage('没有数据.');
    end;
      

  2.   

    var
    MSExcel:Variant;
    i,j,k,l:Integer;
    begin
    if Screen.ActiveControl.ClassName<>'TDBGrid' then
    begin
       Messagebox(handle,'请选择表格后再试','提示',$40);
       exit;
    end;
        try
          MSExcel := CreateOleObject('Excel.Application');
        except
          Application.MessageBox('不能打开 Microsoft Excel.','错误',MB_OK+MB_ICONERROR);
          Exit;
        end;
        MSExcel.Workbooks.Add();
        MSExcel.Visible:=true;
        k:=TDBGrid(Screen.ActiveControl).DataSource.DataSet.RecordCount-1;
        l:=TDBGrid(Screen.ActiveControl).Columns.Count-1;
       for j:=0 to l do
        begin
           MSExcel.Workbooks[1].Sheets[1].Cells[1,j+1]:=TDBGrid(Screen.ActiveControl).Columns[j].Title.Caption;
        end;
        TDBGrid(Screen.ActiveControl).DataSource.DataSet.First;
        for i:=0 to k do
        begin
          for j:=0 to l do
          begin
            if I = 0 then
              MSExcel.Workbooks[1].Sheets[1].Columns[J + 1].ColumnWidth := TDBGrid(Screen.ActiveControl).Columns[j].Width div 6;
            MSExcel.Workbooks[1].Sheets[1].Cells[i+2,j+1]:=
                      TDBGrid(Screen.ActiveControl).DataSource.DataSet.FieldByName(TDBGrid(Screen.ActiveControl).Columns[j].FieldName).AsString;
          end;
        TDBGrid(Screen.ActiveControl).DataSource.DataSet.Next;
        end;
      这个是一个通用的,只要activecontrol是DBGrid就可以用(MDI窗口)
      

  3.   

    運行到ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);提示為沒有定義ExcelWorkbook1,這個要怎樣定義
      

  4.   

    ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet);怎麼這條類型轉換語句有問題,提示為沒定義_Worksheet。