找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
楼主: 风帆刘工

将SQL数据库中的表导入到新的EXCEL表

[复制链接]
发表于 2012-9-7 12:57:05 | 显示全部楼层
回复

使用道具 举报

发表于 2012-9-14 00:07:08 | 显示全部楼层
已经有人说了  ,这个into 是 ACCESS 与XLS之间的;
回复

使用道具 举报

发表于 2012-9-21 08:03:48 | 显示全部楼层
我也试一试!
回复

使用道具 举报

发表于 2012-9-21 08:22:54 | 显示全部楼层
好像不成功,不知道是什么原因的!
回复

使用道具 举报

发表于 2012-9-21 08:24:44 | 显示全部楼层
unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,
    Grids,   DBGrids,   Db,   DBTables,   StdCtrls,   Excel97,   OleServer,   ComObj,   ActiveX,
    Excel2000;

type
    TForm1   =   class(TForm)
        Button1:   TButton;
        Table1:   TTable;
        DataSource1:   TDataSource;
        DBGrid1:   TDBGrid;
        ExcelApplication1:   TExcelApplication;
        ExcelWorkbook1:   TExcelWorkbook;
        ExcelWorksheet1:   TExcelWorksheet;
        SaveDialog1:   TSaveDialog;
        procedure   Button1Click(Sender:   TObject);
        procedure   FormCreate(Sender:   TObject);
        procedure   FormDestroy(Sender:   TObject);
    private
        {   Private   declarations   }
    public
        {   Public   declarations   }
        ExcelFormatNum:   TStrings;   //ExcelFormatNum
        ExcelFormatStr:   TStrings;   //ExcelFormatStr      
        function   ExportDBGrid(DBGrid:   TDBGrid;   SheetName:   string):   boolean;//直接保存,不顯示EXCEL
        function   ExportDataToExcelV(SheetName:   string;   DBGrid:   TDBGrid;   ExcelApplication:   TExcelApplication;
                ExcelWorkbook:   TExcelWorkbook;   ExcelWorksheet:   TExcelWorksheet):   boolean;   //顯示EXCEL
        function   ConvertIntToCharacters(IntNumber:   Integer):   string;
        function   GetNumberFormat(s:   string):   string;   //判斷字段的格式
        function   FindExcelFormatStr(s:   string):   Boolean;   //找字符格式
        function   FindExcelFormatNum(s:   string):   Boolean;   //找數字格式
    end;

var
    Form1:   TForm1;

implementation

{$R   *.DFM}

function   TForm1.ExportDataToExcelV(SheetName:   string;   DBGrid:   TDBGrid;   ExcelApplication:   TExcelApplication;
    ExcelWorkbook:   TExcelWorkbook;   ExcelWorksheet:   TExcelWorksheet):   boolean;   //顯示EXCEL
//引用:ActiveX
var
    Row,   Col:   integer;
    RowFirst,   ColEnd:   string;
    lcid:   integer;
    vNumberFormat:   string;
begin
    result   :=   false;
    if   DBGrid.DataSource   =   nil   then                                   //數據源為空退出
        exit;
    if   DBGrid.DataSource.DataSet   =   nil   then
        exit;
    if   DBGrid.DataSource.DataSet.IsEmpty   then
        exit;
    try
        ExcelApplication.Disconnect;
    except
    end;
    try
        try
            lcid   :=   1;   //GetUserDefaultLCID;
            ExcelApplication.ScreenUpdating[lcid]   :=   false;
            ExcelApplication.ConnectKind   :=   ckNewInstance;
            ExcelApplication.Connect;
        except
            Application.MessageBox( '系統檢測到此机器沒有安裝EXCEL!如果需要導出功能,先安裝EXCEL! ', '警告 ',MB_OK);
            exit;
        end;
        screen.Cursor   :=   crHourGlass;
        ExcelWorkbook.ConnectTo(ExcelApplication.Workbooks.Add(TOleEnum(xlWBATWorksheet),   lcid));
        ExcelWorksheet.ConnectTo(ExcelWorkbook.Worksheets[1]   as   _Worksheet);
        if   SheetName   <>   ' '   then
            ExcelWorksheet.Name   :=   SheetName;
        ExcelWorksheet.Cells.Font.Size   :=   10;

        DBGrid.DataSource.DataSet.DisableControls;
        //導入報頭
        for   Col   :=   1   to   DBGrid.Columns.Count   do
            ExcelWorksheet.Cells.Item[1,   Col].value   :=   DBGrid.Columns[Col   -   1].Title.caption;

        //導入數據庫
        DBGrid.DataSource.DataSet.First;
        for   Col   :=   1   to   DBGrid.Columns.Count   do
        begin
            RowFirst   :=   ConvertIntToCharacters(Col)   +   '1 ';     //第一條
            ColEnd   :=   ConvertIntToCharacters(Col)   +   inttostr(DBGrid.DataSource.DataSet.RecordCount   +   1);//結束
            if   DBGrid.Fields[Col   -   1].DataSize   <   200   then
                ExcelWorksheet.Range[RowFirst,   ColEnd].ColumnWidth   :=   DBGrid.Fields[Col   -   1].DataSize
            else
                ExcelWorksheet.Range[RowFirst   +   '1 ',   ColEnd].ColumnWidth   :=   21;

            vNumberFormat   :=   GetNumberFormat(DBGrid.Columns[Col   -   1].Title.Caption);
            if   vNumberFormat   <>   ' '   then
                ExcelWorksheet.Range[RowFirst,   ColEnd].NumberFormat   :=   vNumberFormat;

            for   Row   :=   1   to   DBGrid.DataSource.DataSet.RecordCount   do
            begin
                ExcelWorksheet.Cells.Item[Row   +   1,   Col].value   :=   trim(DBGrid.Fields[Col   -   1].AsString);
                DBGrid.DataSource.DataSet.Next;
            end;
            DBGrid.DataSource.DataSet.First;
        end;
        ExcelApplication.Visible[lcid]   :=   True;
        ExcelApplication.ScreenUpdating[lcid]   :=   true;
        DBGrid.DataSource.DataSet.EnableControls;
        result   :=   true;
    finally
        screen.Cursor   :=   crDefault;
    end;
end;

function   TForm1.ConvertIntToCharacters(IntNumber:   Integer):   string;
//IntNumber判斷字符串是否數字
begin
    if   IntNumber   <   1   then
        Result   :=   'A '
    else
    begin
        if   IntNumber   >   702   then
            Result   :=   'ZZ '
        else
        begin
            if   IntNumber   >   26   then
            begin
                if   (IntNumber   mod   26)   =   0   then
                    Result   :=   Chr(64   +   (IntNumber   div   26)   -   1)     //返回   ASC   碼所代表的字符。
                else
                    Result   :=   Chr(64   +   (IntNumber   div   26));
                if   (IntNumber   mod   26)   =   0   then
                    result   :=   result   +   chr(64   +   26)
                else
                    result   :=   Result   +   Chr(64   +   (IntNumber   mod   26));
            end
            else
                Result   :=   Chr(64   +   IntNumber);
        end;
    end;
end;

function   TForm1.GetNumberFormat(s:   string):   string;   //判斷字段的格式
begin
    s   :=   Uppercase(s);
    if   FindExcelFormatNum(s)   then
    begin
        result   :=   '0.00 ';
        Exit;
    end;

    if   FindExcelFormatStr(s)   then
    begin
        result   :=   '@ ';
        Exit;
    end;
    result   :=   ' ';
end;

function   TForm1.FindExcelFormatStr(s:   string):   Boolean;   //找字符格式
var
    i:   integer;
begin
    Result   :=   False;
    for   i   :=   0   to   ExcelFormatStr.Count   -   1   do
    begin
        if   Pos(ExcelFormatStr[i],   s)   >   0   then
        begin
            Result   :=   True;
            Exit;
        end;
    end;
end;

function   TForm1.FindExcelFormatNum(s:   string):   Boolean;   //找數字格式
var
    i:   integer;
begin
    Result   :=   False;
    for   i   :=   0   to   ExcelFormatNum.Count   -   1   do
    begin
        if   Pos(ExcelFormatNum[i],   s)   >   0   then
        begin
            Result   :=   True;
            Exit;
        end;
    end;
end;

function   TForm1.ExportDBGrid(DBGrid:   TDBGrid;   SheetName:   string):   boolean;//直接保存,不顯示EXCEL
//引用:ComObj
var
    c,   r,   i,   j:   integer;
    app:   Olevariant;
    TempFileName,   ResultFileName:   string;
begin
    try
        result   :=   True;
            app   :=   CreateOLEObject( 'Excel.application ');
            app.WorkBooks.Add(xlWBatWorkSheet);
        except
            Application.MessageBox( 'Excel沒有正确安裝! ', '警告 ',MB_OK);
            result   :=   False;
            exit;
        end;
        SaveDialog1.DefaultExt   :=   'xls ';
        SaveDialog1.FileName   :=   SheetName;
        if   SaveDialog1.Execute   then
            TempFileName   :=   SaveDialog1.FileName
        else
            Exit;

        app.Workbooks.add;
        app.Visible   :=   false;
        Screen.Cursor   :=   crHourGlass;
        DBGrid.DataSource.DataSet.First;
        c   :=   DBGrid.DataSource.DataSet.FieldCount;
        r   :=   DBGrid.DataSource.DataSet.RecordCount;
        Application.ProcessMessages;
        for   i   :=   0   to   c   -   1   do
            app.cells(1,   1   +   i)   :=   DBGrid.DataSource.DataSet.Fields[i].DisplayLabel;
        for   j   :=   1   to   r   do
        begin
            for   i   :=   0   to   c   -   1   do
                app.cells(j   +   1,   1   +   i)   :=   DBGrid.DataSource.DataSet.Fields[i].AsString;

            DBGrid.DataSource.DataSet.Next;
        end;

        ResultFileName   :=   TempFileName;
        if   ResultFileName   =   ' '   then
            ResultFileName   :=   '自動報表 ';
        if   FileExists(TempFileName)   then
            DeleteFile(TempFileName);
        app.Activeworkbook.saveas(TempFileName);
        app.Activeworkbook.close(false);
        app.quit;
      //   app   :=   unassigned;     //對象釋放
      //app:=nil;
end;

procedure   TForm1.Button1Click(Sender:   TObject);
begin
    try
        Screen.Cursor   :=   crHourGlass;
        //ExportDBGrid(DBGrid1,   '查詢結果 ');   //直接保存,不顯示EXCEL
        ExportDataToExcelV( '查詢結果 ',   DBGrid1,   ExcelApplication1,   ExcelWorkbook1,   ExcelWorksheet1);   //顯示EXCEL
    finally
        Screen.Cursor   :=   crDefault;
    end;
end;

procedure   TForm1.FormCreate(Sender:   TObject);
begin
    Table1.Active:=true;
    ExcelFormatNum   :=   TStringList.Create;
    ExcelFormatStr   :=   TStringList.Create;
   
end;
procedure   TForm1.FormDestroy(Sender:   TObject);
begin
    ExcelFormatNum.Free;
    ExcelFormatStr.Free;
end;
end.
可以参考一下!
回复

使用道具 举报

发表于 2013-3-9 20:15:11 | 显示全部楼层
学习学习。
回复

使用道具 举报

发表于 2013-7-3 15:31:55 | 显示全部楼层
用查询引擎在系统做一个表 然后就可以导出到excel格式了
回复

使用道具 举报

发表于 2014-8-7 15:58:29 | 显示全部楼层
22楼做个列子让大家学习学习
回复

使用道具 举报

发表于 2014-8-7 16:07:52 | 显示全部楼层
发的规划法规和官方公会很高vgbngfdnghghghghghghghghghgh
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-5-5 16:14 , Processed in 0.025796 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表