数据导出不外是包括:1)文件名 2)数据文件台头,解释(3-4行足够) 3)数据表格(DBGRID名)。其实都是标准化的东西。为什么没有标准控件呢? 哪个高手能写一个?

解决方案 »

  1.   

    var
    asheet,range:variant;
    i,K,M,N,y :integer;
    ls_FileName:string;
    tsList  :TStringList;
    s       :string;
    begin
    if SaveDialog1.Execute then begin
    Screen.Cursor:=crHourGlass;
    ls_FileName:=SaveDialog1.FileName;
    ExcelApplication1.Visible[0]:=False;
    ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);
    asheet:=ExcelApplication1.Worksheets.Item[1];
    i:=frmDataModule.QProject.FieldCount;
    range:=asheet.range[asheet.cells[1,1],asheet.cells[1,i]];
    range.merge;
    range.HorizontalAlignment:=xlCenter;
    range.Font.Size:=14;
    frmDataModule.Tstatement.Locate('Flags',1,[]);
    range.value:=Trim(frmDataModule.Tstatement.FieldByName('sqlName').Value);
    for i:=0 to DBGrid1.Columns.Count-1 do
    asheet.cells[2,i+1].value:=Trim(DBGrid1.Columns.Items[i].Title.Caption);
    K:=1;
    N:=DBGrid1.Columns.count;
    I:=DBGrid1.DataSource.DataSet.RecordCount;
    tsList:=TStringList.Create;
    try
    DBGrid1.DataSource.DataSet.first;
    while not DBGrid1.DataSource.DataSet.Eof do
    begin
                        s:='';
                        for y:=0 to n-1 do
                        begin
                            s:=s+Trim(DBGrid1.DataSource.DataSet.Fields[y].AsString)+#9;
                            Application.ProcessMessages;
                        end;
                        tsList.Add(s);
                        DBGrid1.DataSource.DataSet.next;
                    end;
                Clipboard.AsText:=tsList.Text;
        finally
            tsList.Free;
        end;
        ExcelApplication1.Disconnect;
        asheet.cells[3,1].select;
        aSheet.Paste;
        range:=asheet.range[asheet.cells[2,1],asheet.cells[DBGrid1.DataSource.DataSet.RecordCount+2,DBGrid1.DataSource.DataSet.FieldCount]];
        range.select;
        range.borders.linestyle:=1;
        for i:=1 to DBGrid1.DataSource.DataSet.FieldCount do begin
        range:=asheet.range[asheet.cells[1,i],asheet.cells[DBGrid1.DataSource.DataSet.RecordCount,i]];
        range.EntireColumn.AutoFit;
        end;
        aSheet.Saveas(ls_FileName);
        MessageBox(Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION or MB_OK);
        Screen.Cursor:=crDefault;
        ExcelApplication1.Quit;
        ExcelApplication1.Disconnect;
        aSheet:=Unassigned; //释放VARIANT变量
        DBGrid1.DataSource.DataSet.First;end;
    end;
    这是我原来写的一个例子,测试通过
      

  2.   

    有一个第三方控件
    DevExpress.QuantumGrid3.22.Delphi7