谢了!

xiangwangz 2003-12-26 10:54:06
delphi在数据库方面的应用俺真的很菜,请指教!现在我要把ACCESS中的数据给导出到EXCEL中,我该咋办呀?能给俺点例子吗?源代码最好了!谢谢,zjpwm@sina.com
...全文
42 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangwangz 2004-01-05
  • 打赏
  • 举报
回复
昏,顶,呵呵
goldpony 2004-01-02
  • 打赏
  • 举报
回复
UP
-------------------------------------

╔♂╗┏┯┓┏┯┓┏┯┓┏┯┓╔♀╗
┃★┃┠新┨┠年┨┠快┨┠乐┨┃☆┃
┃☆┃┗┷┛┗┷┛┗┷┛┗┷┛┃★┃
╚♂╝↘*≡恭≡喜≡发≡财≡*↙╚♀╝

-------------------------------------
xiangwangz 2004-01-02
  • 打赏
  • 举报
回复
ding !
jb99334 2003-12-30
  • 打赏
  • 举报
回复
好!顶!
xiangwangz 2003-12-30
  • 打赏
  • 举报
回复
顶!谢了
xiangwangz 2003-12-30
  • 打赏
  • 举报
回复
我全试了,就是效率太低 !太慢了 !谢谢
jxc163 2003-12-30
  • 打赏
  • 举报
回复
你试了别人介绍的方法没有呀!
xiangwangz 2003-12-30
  • 打赏
  • 举报
回复
再顶
smilelhh 2003-12-30
  • 打赏
  • 举报
回复
都用ODBC联好,就不用管什么格式了.
wolf2005 2003-12-30
  • 打赏
  • 举报
回复
ding
maycy 2003-12-29
  • 打赏
  • 举报
回复
Function DataSetToTXT(DataSet:TDataSet;FileName:String):Boolean;
var
s:TStringList;
str:string;
i:integer;
SaveDialog:TSaveDialog;
BK:TBookMark;
begin
s:=TStringList.Create;
BK:=DataSet.GetBookMark;
DataSet.DisableControls;
DataSet.First;
while not DataSet.Eof do
begin
str:='';
for i:=0 to DataSet.FieldCount-1 do
begin
if str='' then
str:=str+DataSet.Fields[i].AsString
else str:=str+'|'+DataSet.Fields[i].AsString;
end;
s.Add(str);
DataSet.Next;
end;
DataSet.GotoBookMark(BK);
DataSet.EnableControls;
SaveDialog:=TSaveDialog.Create(Nil);
SaveDialog.Filter:='文本文件(*.txt)|*.txt';
SaveDialog.Title:='将'+FileName+'数据表导出文本文件';
SaveDialog.FileName:=FileName+'.txt';
Result:=SaveDialog.Execute;
UpdateWindow(GetActiveWindow);
if Result then
s.SaveToFile(SaveDialog.FileName);
SaveDialog.Free;
s.Free;
end;

Function DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant):Boolean;
var
Row,Col,FieldIndex:Integer;
BK:TBookMark;
begin
Result := False;
if not Dataset.Active then exit;
BK:=DataSet.GetBookMark;
DataSet.DisableControls;
Sheet.Activate;
try
// 列标题
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;
// 表内容
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
Sheet.Cells(Row,Col):=DataSet.Fields[FieldIndex].AsString;
Inc(Col);
end;
end;
DataSet.Next;
end;
Result:=True;
finally
DataSet.GotoBookMark(BK);
DataSet.EnableControls;
end;
end;

Function DataSetToExcel(DataSet:TDataSet;FieldTagMax:Integer;Visible:Boolean;ExcelFileName:String='';FileName:String=''):Boolean;
var
ExcelObj,Excel,WorkBook,Sheet:OleVariant;
OldCursor:TCursor;
SaveDialog:TSaveDialog;
begin
Result:=False;
if not 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,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+'请检查是否安装了Mircorsoft Excel!','提示',MB_OK+MB_ICONINFORMATION);
Screen.Cursor:=OldCursor;
Exit;
end;
Result:=DataSetToExcelSheet(DataSet,FieldTagMax,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 文件(*.xls)|*.xls';
SaveDialog.Title:='将'+FileName+'数据表导出Excel文件';
SaveDialog.FileName:=FileName+'.xls';
Result:=SaveDialog.Execute;
UpdateWindow(GetActiveWindow);
if Result then
WorkBook.SaveAs(FileName:=SaveDialog.FileName);
SaveDialog.Free;
end;
Excel.Quit;
end;
Screen.Cursor:=OldCursor;
end;
zzh26 2003-12-29
  • 打赏
  • 举报
回复
最简单的是用ehlib直接导入excel,不用你知道怎么控制excel,它全帮你做了
Mrkang 2003-12-29
  • 打赏
  • 举报
回复

> 全面控制 Excel
> 首先?建 Excel ?象,使用ComObj:
> var ExcelID: Variant;
> ExcelID := CreateOleObject( 'Excel.Application' );
> 1) ?示?前窗口:
> ExcelID.Visible := True;
> 2) 更改 Excel ???:
> ExcelID.Caption := '?用程序?用 Microsoft Excel';
> 3) 添加新工作簿:
> ExcelID.WorkBooks.Add;
> 4) 打?已存在的工作簿:
> ExcelID.WorkBooks.Open( 'C:ExcelDemo.xls' );
> 5) ?置第2?工作表?活?工作表:
> ExcelID.WorkSheets[2].Activate;
> 或
> ExcelID.WorksSheets[ 'Sheet2' ].Activate;
> 6) ??元格?值:
> ExcelID.Cells[1,4].Value := '第一行第四列';
> 7) ?置指定列的?度(?位:字符??),以第一列?例:
> ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
> 8) ?置指定行的高度(?位:磅)(1磅=0.035厘米),以第二行?例:
> ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
> 9) 在第8行之前插入分?符:
> ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
> 10) 在第8列之前?除分?符:
> ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
> 11) 指定?框??度:
> ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
> 1-左 2-右 3-? 4-底 5-斜( ) 6-斜( / )
> 12) 清除第一行第四列?元格公式:
> ExcelID.ActiveSheet.Cells[1,4].ClearContents;
> 13) ?置第一行字体?性:
> ExcelID.ActiveSheet.Rows[1].Font.Name := '??';
> ExcelID.ActiveSheet.Rows[1].Font.Color := clBlue;
> ExcelID.ActiveSheet.Rows[1].Font.Bold := True;
> ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
> 14) ?行?面?置:
> a.?眉:
> ExcelID.ActiveSheet.PageSetup.CenterHeader := '?表演示';
> b.??:
> ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P?';
> c.?眉到?端?距2cm:
> ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
> d.??到底端?距3cm:
> ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
> e.??距2cm:
> ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
> f.底?距2cm:
> ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
> g.左?距2cm:
> ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
> h.右?距2cm:
> ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
> i.?面水平居中:
> ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
> j.?面垂直居中:
> ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
> k.打印?元格网?:
> ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
> 15) 拷?操作:
> a.拷?整?工作表:
> ExcelID.ActiveSheet.Used.Range.Copy;
> b.拷?指定?域:
> ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
> c.?A1位置?始粘?:
> ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
> d.?文件尾部?始粘?:
> ExcelID.ActiveSheet.Range.PasteSpecial;
> 16) 插入一行或一列:
> a. ExcelID.ActiveSheet.Rows[2].Insert;
> b. ExcelID.ActiveSheet.Columns[1].Insert;
> 17) ?除一行或一列:
> a. ExcelID.ActiveSheet.Rows[2].Delete;
> b. ExcelID.ActiveSheet.Columns[1].Delete;
> 18) 打印??工作表:
> ExcelID.ActiveSheet.PrintPreview;
> 19) 打印?出工作表:
> ExcelID.ActiveSheet.PrintOut;
> 20) 工作表保存:
> if not ExcelID.ActiveWorkBook.Saved then
> ExcelID.ActiveSheet.PrintPreview;
> 21) 工作表另存?:
> ExcelID.SaveAs( 'C:ExcelDemo1.xls' );
> 22) 放?存?:
> ExcelID.ActiveWorkBook.Saved := True;
> 23) ??工作簿:
> ExcelID.WorkBooks.Close;
> 24) 退出 Excel:
> ExcelID.Quit;
>
>


xiangwangz 2003-12-29
  • 打赏
  • 举报
回复
顶!
outer2000 2003-12-26
  • 打赏
  • 举报
回复
FROM 超级猛料
outer2000 2003-12-26
  • 打赏
  • 举报
回复
来自:yzhshi, 时间:2001-12-2 10:04:00, ID:758347

[code]

既然大家都在这里将自己的东西贴出来,那我就再贴一个,将DBGrid中的文件转换到Excel中或者转换到Txt中的控件。

我自己编写的,希望大家讨论一下。

unit DBGridExport;

interface

uses

SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Db, DBGrids, Comobj, extctrls, comctrls, ActiveX;

type

TSpaceMark = (csComma, csSemicolon, csTab, csBlank, csEnter);

TDBGridExport = class(TComponent)

private

FDB_Grid: TDBGrid; {读取DBGrid的源}

FTxtFileName: string; {文本文件名}

FSpaceMark: TSpaceMark; {间隔符号}

FSpace_Ord: Integer; {间隔符号的Asc数值}

FTitle: string; {显示的标题}

FSheetName: string; {工作表标题}

FExcel_Handle: OleVariant; {Excel的句柄}

FWorkbook_Handle: OleVariant; {书签的句柄}

FShow_Progress: Boolean; {是否显示插入进度}

FProgress_Form: TForm; {进度窗体}

FRun_Excel_Form: TForm; {启动Excel提示窗口}

FProgressBar: TProgressBar; {进度条}

function Connect_Excel: Boolean; {启动Excel}

function New_Workbook: Boolean; {插入新的工作博}

function InsertData_To_Excel: Boolean; {插入数据}

procedure Create_ProgressForm(AOwner: TComponent); {创建进度显示窗口}

procedure Create_Run_Excel_Form(AOwner: TComponent); {创建启动Excel窗口}

procedure SetSpaceMark(Value: TSpaceMark); {设置导出时的间隔符号}

protected

public

constructor Create(AOwner: TComponent); override; {新建}

destructor Destroy; override; {销毁}

function Export_To_Excel: Boolean; overload; {导出到Excel中}

function Export_To_Excel(DB_Grid: TDBGrid): Boolean; overload;

function Export_To_Txt(NewFile: Boolean = True): Boolean; overload; {导出到文本文件中}

function Export_To_Txt(FileName: string; NewFile: Boolean = True): Boolean; overload;

function Export_To_Txt(DB_Grid: TDBGrid; NewFile: Boolean = True): Boolean; overload;

function Export_To_Txt(FileName: string; DB_Grid: TDBGrid; NewFile: Boolean = True): Boolean; overload;

published

property DB_Grid: TDBGrid read FDB_Grid write FDB_Grid;

property Show_Progress: Boolean read FShow_Progress write FShow_Progress;

property TxtFileName: string read FTxtFileName write FTxtFileName;

property SpaceMark: TSpaceMark read FSpaceMark write SetSpaceMark;

property Title: string read FTitle write FTitle;

property SheetName: string read FSheetName write FSheetName;

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents('Stone', [TDBGridExport]);

end;

{-------------------------------------------------------------------------------}

{新建}

constructor TDBGridExport.Create(AOwner: TComponent);

begin

inherited Create(AOwner);

FShow_Progress := True;

FSpaceMark := csTab;

end;

{销毁}

destructor TDBGridExport.Destroy;

begin

varClear(FExcel_Handle);

varClear(FWorkbook_Handle);

inherited Destroy;

end;

mxk19791116 2003-12-26
  • 打赏
  • 举报
回复
我用的SQL server 2k 没用过access不敢妄讲
mxk19791116 2003-12-26
  • 打赏
  • 举报
回复
up先
xiangwangz 2003-12-26
  • 打赏
  • 举报
回复
谢谢 outer2000(天外流星) ,、不过我还是看不懂 !能说的再明白点吗?谢谢
xiangwangz 2003-12-26
  • 打赏
  • 举报
回复
谢谢,不过我还是不懂

5,390

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧