用的ACCESS库,比较恶心。排除用SQL语句的方法,想把DBGRID的内容输出到EXCEL表里,如何能把字段名也输出出来?
以下代码要怎么改改?给个思路。
procedure TForm1.Button1Click(Sender: TObject);
var
  i, row, column: integer;
begin
  Try
    ExcelApplication1.Connect;
  Except
    MessageDlg('Excel may not be installed',
      mtError, [mbOk], 0);
    Abort;
  End;
  ExcelApplication1.Visible[0] := True;
  ExcelApplication1.Caption := 'Excel Application';
  ExcelApplication1.Workbooks.Add(Null, 0);
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
  DBGrid.DataSource.DataSet.Open;
  row := 1;
  While Not (DBGrid.DataSource.DataSet.Eof) do
  begin
    column := 1;
    for i := 1 to DBGrid.DataSource.DataSet.FieldCount do
    begin
      ExcelWorksheet1.Cells.Item[row, column] := DBGrid.DataSource.DataSet.fields[i - 1].AsString;
      column := column + 1;
    end;
    DBGrid.DataSource.DataSet.Next;
    row := row + 1;
  end;
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i, row, column: integer;
    begin
      Try
        ExcelApplication1.Connect;
      Except
        MessageDlg('Excel may not be installed',
          mtError, [mbOk], 0);
        Abort;
      End;
      ExcelApplication1.Visible[0] := True;
      ExcelApplication1.Caption := 'Excel Application';
      ExcelApplication1.Workbooks.Add(Null, 0);
      ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
      ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
      DBGrid.DataSource.DataSet.Open;
      for i := 1 to DBGrid.DataSource.DataSet.FieldCount do
        begin
          ExcelWorksheet1.Cells.Item[1, I] := DBGrid.DataSource.DataSet.fields[i - 1].Fields[1].FieldName;
        end;
      row := 2;
      While Not (DBGrid.DataSource.DataSet.Eof) do
      begin
        column := 1;
        for i := 1 to DBGrid.DataSource.DataSet.FieldCount do
        begin
          ExcelWorksheet1.Cells.Item[row, column] := DBGrid.DataSource.DataSet.fields[i - 1].AsString;
          column := column + 1;
        end;
        DBGrid.DataSource.DataSet.Next;
        row := row + 1;
      end;
    end;
      

  2.   

    最好不要用column 变量,直接用I就可以了
      

  3.   

    非常感谢,懂你意思了。
    celWorksheet1.Cells.Item[1, I] := DBGrid.DataSource.DataSet.fields[i - 1].FieldName;