请教高手,数据库查询后,dbgrid控件里如何分行显示颜色(不是分列),如何将数据导出到EXCEL表。

解决方案 »

  1.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
      

  2.   

    給你代碼:
    function GridToExcel(v_gld: TwwDBGrid; visible: boolean; excelfilename:
      string): boolean;
    var
      excelobj, excel, workbook, sheet: olevariant;
      oldcursor: tcursor;
      savedialog: tsavedialog;
    begin
      result := false;
      if not v_gld.DataSource.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, 'µLªk½Õ¥Îmircorsoft excel! ' + chr(13) + chr(10)
          +
          '½ÐÀˬd¬O§_¦w¸Ë¤Fmircorsoft excel¡C', '´£¥Ü', mb_ok + mb_iconinformation);
        screen.cursor := oldcursor;
        exit;
      end;  result := dbgridtoexcelsheet(v_gld, 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 ¤&aring;&yen;ó|*.xls';
            result := savedialog.execute;
            updatewindow(getactivewindow);
            if result then
              workbook.saveas(filename := savedialog.filename);
            savedialog.free;
          end;
          excel.quit;
        end;
      screen.cursor := oldcursor;
    end;//±N&frac14;&AElig;&Otilde;u&para;°&laquo;O&brvbar;s¨ìEXCEL¤¤function DatasetToExcelsheet(dataset: tdataset;
      fieldtagmax: integer; sheet: olevariant): boolean;
    var
      row, col, fieldindex: integer;
      bk: tbook;
    begin
      result := false;
      if not dataset.active then
        exit;
      bk := dataset.getbook;
      dataset.disablecontrols;  sheet.activate;
      try    // &brvbar;C&frac14;&ETH;&Atilde;D
        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;
        // &ordf;í¤&ordm;&reg;e
        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
              if dataset.Fields[fieldindex].DataType = ftString then
                sheet.cells(row, col) := '''' + dataset.fields[fieldindex].asstring
              else
                sheet.cells(row, col) := dataset.fields[fieldindex].asstring;
              inc(col);
            end;
          end;
          dataset.next;
        end;    result := true;
      finally
        dataset.gotobook(bk);
        dataset.enablecontrols;
      end;
    end;
      

  3.   

    全解决了,谢谢大侠,但能否不用循环导出的办法导出到EXCEL中去呢,这样做太麻烦了。