DataSet导出至Excel的控件 请问谁有,将DataSet导至Excel的控件,(本人现在在维护一个老的程序,打印处我用到导至Excel的控件),具体类有 TVExcelExport , TVExportDialog等, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就用DBGRIDEH,里面有段代码可以直接导出数据到EXCEL,txt,html网上很多地方可以下载 贴一个:我修改了别人东东!unit DataSetToExcel;interfaceuses SysUtils, Classes, ADODB, DB;type TDataSetToExcel = class(TComponent) private { Private declarations } FDataSet: TDataSet; FADOConnect: TADOConnection; FADOQuery: TADOQuery; FADOTable: TADOTable; procedure FSetDataSet(AValue: TDataSet); procedure Finalize; procedure Initialize; protected { Protected declarations } procedure Notification(AComponent: TComponent;Operation: TOperation);override; public { Public declarations } constructor Create(AOwner: TComponent);override; destructor Destroy;override; procedure SaveExcelToFile(AFileName: string;ASheetName: string='Sheet1'); published { Published declarations } property DataSet: TDataSet read FDataSet write FSetDataSet; end;implementationuses ActiveX, ComObj, Variants, Forms, uCommon;const TEMP_TABLE_NAME = 't_temp'; TEMP_DB_FILE = 'temp.mdb'; adEmpty = $00000000; adTinyInt = $00000010; adSmallInt = $00000002; adInteger = $00000003; adBigInt = $00000014; adUnsignedTinyInt = $00000011; adUnsignedSmallInt = $00000012; adUnsignedInt = $00000013; adUnsignedBigInt = $00000015; adSingle = $00000004; adDouble = $00000005; adCurrency = $00000006; adDecimal = $0000000E; adNumeric = $00000083; adBoolean = $0000000B; adError = $0000000A; adUserDefined = $00000084; adVariant = $0000000C; adIDispatch = $00000009; adIUnknown = $0000000D; adGUID = $00000048; adDate = $00000007; adDBDate = $00000085; adDBTime = $00000086; adDBTimeStamp = $00000087; adBSTR = $00000008; adChar = $00000081; adVarChar = $000000C8; adLongVarChar = $000000C9; adWChar = $00000082; adVarWChar = $000000CA; adLongVarWChar = $000000CB; adBinary = $00000080; adVarBinary = $000000CC; adLongVarBinary = $000000CD; adChapter = $00000088; adFileTime = $00000040; adPropVariant = $0000008A; adVarNumeric = $0000008B;function DBTypeToADOType(AValue: TFieldType): Integer;begin case AValue of ftSmallint, ftWord, ftLargeint, ftInteger: result := adInteger; ftBoolean: result := adBoolean; ftFloat: result := adSingle; ftCurrency: result := adCurrency; else result := adVarWChar; end;end;function GetTempFileName: string;begin Result := GetApplicationPath + TEMP_DB_FILE; if FileExists(Result) then DeleteFile(Result);end;constructor TDataSetToExcel.Create(AOwner: TComponent);begin inherited Create(AOwner); Initialize;end;destructor TDataSetToExcel.Destroy;begin Finalize; inherited;end;procedure TDataSetToExcel.Initialize;begin FADOConnect := TADOConnection.Create(Self); FADOQuery := TADOQuery.Create(Self); FADOTable := TADOTable.Create(Self); FADOQuery.Connection := FADOConnect; FADOTable.Connection := FADOConnect; CoInitialize(nil);end;procedure TDataSetToExcel.Finalize;begin if Assigned(FADOQuery) then FADOQuery.Free; if Assigned(FADOTable) then FADOTable.Free; if Assigned(FADOConnect) then FADOConnect.Free; CoUninitialize; GetTempFileName;end;procedure TDataSetToExcel.SaveExcelToFile(AFileName: string; ASheetName: string = 'Sheet1');const S_CONNECT_ACCESS = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="%s"'; //Data Source中要有空格,""不能丢 S_CONNECT_EXCEL = 'Select * Into %s IN "%s" "Excel 8.0;" From t_temp';var LCatalog,LTable:OleVariant; LConnStr:WideString; i,ARecCount: integer; LFileName: string;begin if (FDataSet = nil) or (FDataSet.FieldCount < 1) then Exit; ARecCount := FDataSet.FieldCount - 1; if ARecCount <= 0 then Exit; LFileName := GetTempFileName; LCatalog := CreateOleObject('ADOX.CATALOG'); LTable := CreateOleObject('ADOX.TABLE'); LConnStr := Format(S_CONNECT_ACCESS, [LFileName]); FADOConnect.ConnectionString := LConnStr; LCatalog.Create(LConnStr); LTable.Name := TEMP_TABLE_NAME; try for i := 0 to ARecCount do LTable.Columns.Append(FDataSet.FieldDefList.FieldDefs[i].Name, DBTypeToADOType(FDataSet.FieldDefList.FieldDefs[i].DataType)); LCatalog.Tables.Append(LTable); FADOTable.TableName := TEMP_TABLE_NAME; FADOTable.Open; FDataSet.First; FADOTable.First; repeat FADOTable.Insert; for i := 0 to ARecCount do FADOTable.Fields[i].AsString := VarToStrDef(FDataSet.Fields[i].Value, ''); FDataSet.Next; until FDataSet.Eof; FADOTable.Post; FADOQuery.Active := false; FADOQuery.SQL.Clear; FADOQuery.SQL.Add(Format(S_CONNECT_EXCEL, [ASheetName, AFileName])); try FADOQuery.ExecSQL; except raise; end; finally LTable := UnAssigned; LCatalog := UnAssigned; FADOConnect.Connected := False; end;end;procedure TDataSetToExcel.FSetDataSet(AValue: TDataSet);begin FDataSet := AValue; if FDataSet <> nil then FDataSet.FreeNotification(self);end;procedure TDataSetToExcel.Notification(AComponent: TComponent;Operation: TOperation);begin if (Operation = opRemove) and (AComponent = DataSet) then DataSet := nil;end;end. 2个256色BMP图怎么快速的对比呢? dbgrid如何实现鼠标单击能选中一行? 如何将公历日期转换为农历 安装问题,急,急 高分诚问算法,有合理建议者给分 请问哪里有关于Delphi报表设计的教材下载?很急!!! aodquery 中能在记录中一条一条的移动吗? XPMan界面 如何得到主机的ip地址? 大虾急救!!!!!! Delphi7里如何用crystal10打印当前页? 如何获得当前CPU的利用率,即用任务管理器看到的那个CPU利用率,有什么函数!
网上很多地方可以下载
SysUtils, Classes, ADODB, DB;type
TDataSetToExcel = class(TComponent)
private
{ Private declarations }
FDataSet: TDataSet;
FADOConnect: TADOConnection;
FADOQuery: TADOQuery;
FADOTable: TADOTable;
procedure FSetDataSet(AValue: TDataSet);
procedure Finalize;
procedure Initialize;
protected
{ Protected declarations }
procedure Notification(AComponent: TComponent;Operation: TOperation);override;
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
procedure SaveExcelToFile(AFileName: string;ASheetName: string='Sheet1');
published
{ Published declarations }
property DataSet: TDataSet read FDataSet write FSetDataSet;
end;implementationuses
ActiveX, ComObj, Variants, Forms, uCommon;const
TEMP_TABLE_NAME = 't_temp';
TEMP_DB_FILE = 'temp.mdb';
adEmpty = $00000000;
adTinyInt = $00000010;
adSmallInt = $00000002;
adInteger = $00000003;
adBigInt = $00000014;
adUnsignedTinyInt = $00000011;
adUnsignedSmallInt = $00000012;
adUnsignedInt = $00000013;
adUnsignedBigInt = $00000015;
adSingle = $00000004;
adDouble = $00000005;
adCurrency = $00000006;
adDecimal = $0000000E;
adNumeric = $00000083;
adBoolean = $0000000B;
adError = $0000000A;
adUserDefined = $00000084;
adVariant = $0000000C;
adIDispatch = $00000009;
adIUnknown = $0000000D;
adGUID = $00000048;
adDate = $00000007;
adDBDate = $00000085;
adDBTime = $00000086;
adDBTimeStamp = $00000087;
adBSTR = $00000008;
adChar = $00000081;
adVarChar = $000000C8;
adLongVarChar = $000000C9;
adWChar = $00000082;
adVarWChar = $000000CA;
adLongVarWChar = $000000CB;
adBinary = $00000080;
adVarBinary = $000000CC;
adLongVarBinary = $000000CD;
adChapter = $00000088;
adFileTime = $00000040;
adPropVariant = $0000008A;
adVarNumeric = $0000008B;function DBTypeToADOType(AValue: TFieldType): Integer;
begin
case AValue of
ftSmallint,
ftWord,
ftLargeint,
ftInteger: result := adInteger;
ftBoolean: result := adBoolean;
ftFloat: result := adSingle;
ftCurrency: result := adCurrency;
else
result := adVarWChar;
end;
end;function GetTempFileName: string;
begin
Result := GetApplicationPath + TEMP_DB_FILE;
if FileExists(Result) then
DeleteFile(Result);
end;constructor TDataSetToExcel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Initialize;
end;destructor TDataSetToExcel.Destroy;
begin
Finalize;
inherited;
end;procedure TDataSetToExcel.Initialize;
begin
FADOConnect := TADOConnection.Create(Self);
FADOQuery := TADOQuery.Create(Self);
FADOTable := TADOTable.Create(Self); FADOQuery.Connection := FADOConnect;
FADOTable.Connection := FADOConnect;
CoInitialize(nil);
end;
procedure TDataSetToExcel.Finalize;
begin
if Assigned(FADOQuery) then
FADOQuery.Free;
if Assigned(FADOTable) then
FADOTable.Free;
if Assigned(FADOConnect) then
FADOConnect.Free;
CoUninitialize;
GetTempFileName;
end;procedure TDataSetToExcel.SaveExcelToFile(AFileName: string; ASheetName: string = 'Sheet1');
const
S_CONNECT_ACCESS = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="%s"'; //Data Source中要有空格,""不能丢
S_CONNECT_EXCEL = 'Select * Into %s IN "%s" "Excel 8.0;" From t_temp';
var
LCatalog,LTable:OleVariant;
LConnStr:WideString;
i,ARecCount: integer;
LFileName: string;
begin
if (FDataSet = nil) or (FDataSet.FieldCount < 1) then
Exit;
ARecCount := FDataSet.FieldCount - 1;
if ARecCount <= 0 then
Exit; LFileName := GetTempFileName; LCatalog := CreateOleObject('ADOX.CATALOG');
LTable := CreateOleObject('ADOX.TABLE'); LConnStr := Format(S_CONNECT_ACCESS, [LFileName]);
FADOConnect.ConnectionString := LConnStr; LCatalog.Create(LConnStr);
LTable.Name := TEMP_TABLE_NAME;
try
for i := 0 to ARecCount do
LTable.Columns.Append(FDataSet.FieldDefList.FieldDefs[i].Name,
DBTypeToADOType(FDataSet.FieldDefList.FieldDefs[i].DataType));
LCatalog.Tables.Append(LTable); FADOTable.TableName := TEMP_TABLE_NAME;
FADOTable.Open;
FDataSet.First;
FADOTable.First;
repeat
FADOTable.Insert;
for i := 0 to ARecCount do
FADOTable.Fields[i].AsString := VarToStrDef(FDataSet.Fields[i].Value, '');
FDataSet.Next;
until FDataSet.Eof; FADOTable.Post; FADOQuery.Active := false;
FADOQuery.SQL.Clear;
FADOQuery.SQL.Add(Format(S_CONNECT_EXCEL, [ASheetName, AFileName]));
try
FADOQuery.ExecSQL;
except
raise;
end;
finally
LTable := UnAssigned;
LCatalog := UnAssigned;
FADOConnect.Connected := False;
end;
end;procedure TDataSetToExcel.FSetDataSet(AValue: TDataSet);
begin
FDataSet := AValue;
if FDataSet <> nil then
FDataSet.FreeNotification(self);
end;procedure TDataSetToExcel.Notification(AComponent: TComponent;Operation: TOperation);
begin
if (Operation = opRemove) and (AComponent = DataSet) then
DataSet := nil;
end;end.