delphi中怎样把显示在dbgrid中的数据导出?
我做的人力资源招聘系统最后经过筛选会选出一些符合应聘条件的记录,会显示在dbgrid里,我想设置一个按钮,单击之后,就能把这些筛选出来的记录写进本地的excel或者txt...
我做的人力资源招聘系统最后经过筛选会选出一些符合应聘条件的记录,会显示在dbgrid里,我想设置一个按钮,单击之后,就能把这些筛选出来的记录写进本地的excel或者txt文件里,哪个简单写进哪个就行。
这个界面要筛选多次,所以每次导入的数据都是不同的,意思就是能多次执行导入就行。
请给出详细代码,谢谢。
导出的数据是“面试管理”表的一部分,数据库是SQL2000 展开
这个界面要筛选多次,所以每次导入的数据都是不同的,意思就是能多次执行导入就行。
请给出详细代码,谢谢。
导出的数据是“面试管理”表的一部分,数据库是SQL2000 展开
1个回答
展开全部
给你一个导出代码
procedure TForm1.ExpExcelFileByStream(Src_DBG: TDBGrid; FileName: String);
var
i: integer;
Col, row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
procedure incColRow;
begin
if Col = Src_DBG.Columns.Count - 1 then
begin
Inc(Row);
Col :=0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);
var
L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);
var
V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double);
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
begin
if FileExists(FileName) then
DeleteFile(Pchar(FileName));
aFileStream := TFileStream.Create(FileName, fmCreate);
Try
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));
Col := 0;
Row := 0;
for i := 0 to Src_Dbg.Columns.Count-1 do
WriteStringCell(Src_DBG.COLUMNS[I].TITLE.CAPTION);
ABookMark := Src_DBG.DataSource.DataSet.GetBookmark;
Src_DBG.DataSource.DataSet.DisableControls;
Src_DBG.DataSource.DataSet.First;
while not Src_DBG.DataSource.DataSet.Eof do
begin
for i := 0 to Src_Dbg.Columns.Count - 1 do
case Src_Dbg.DataSource.DataSet.FieldByName(Src_Dbg.Columns[i].FieldName).DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:
// WriteIntegerCell(Src_DBG.DataSource.DataSet.FIELDBYNAME(Src_DBG.COLUMNS[I].FIELDNAME).AsInteger);
WriteIntegerCell(Src_DBG.COLUMNS[I].Field.AsInteger);
ftFloat, ftCurrency, ftBCD:
//WriteFloatCell(Src_DBG.DataSource.DataSet.FIELDBYNAME(Src_DBG.COLUMNS[I].FIELDNAME).AsFloat)
WriteFloatCell(Src_DBG.COLUMNS[I].Field.AsFloat);
else
WriteStringCell(Src_DBG.COLUMNS[I].Field.Text);
end;
Src_DBG.DataSource.DataSet.Next;
end;
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
if Src_DBG.DataSource.DataSet.BookmarkValid(ABookMark) then
Src_DBG.DataSource.DataSet.GotoBookmark(ABookMark);
Finally
AFileStream.Free;
Src_DBG.DataSource.DataSet.EnableControls;
end;
end;
procedure TForm1.ExpExcelFileByStream(Src_DBG: TDBGrid; FileName: String);
var
i: integer;
Col, row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
procedure incColRow;
begin
if Col = Src_DBG.Columns.Count - 1 then
begin
Inc(Row);
Col :=0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string);
var
L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer);
var
V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double);
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
begin
if FileExists(FileName) then
DeleteFile(Pchar(FileName));
aFileStream := TFileStream.Create(FileName, fmCreate);
Try
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));
Col := 0;
Row := 0;
for i := 0 to Src_Dbg.Columns.Count-1 do
WriteStringCell(Src_DBG.COLUMNS[I].TITLE.CAPTION);
ABookMark := Src_DBG.DataSource.DataSet.GetBookmark;
Src_DBG.DataSource.DataSet.DisableControls;
Src_DBG.DataSource.DataSet.First;
while not Src_DBG.DataSource.DataSet.Eof do
begin
for i := 0 to Src_Dbg.Columns.Count - 1 do
case Src_Dbg.DataSource.DataSet.FieldByName(Src_Dbg.Columns[i].FieldName).DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:
// WriteIntegerCell(Src_DBG.DataSource.DataSet.FIELDBYNAME(Src_DBG.COLUMNS[I].FIELDNAME).AsInteger);
WriteIntegerCell(Src_DBG.COLUMNS[I].Field.AsInteger);
ftFloat, ftCurrency, ftBCD:
//WriteFloatCell(Src_DBG.DataSource.DataSet.FIELDBYNAME(Src_DBG.COLUMNS[I].FIELDNAME).AsFloat)
WriteFloatCell(Src_DBG.COLUMNS[I].Field.AsFloat);
else
WriteStringCell(Src_DBG.COLUMNS[I].Field.Text);
end;
Src_DBG.DataSource.DataSet.Next;
end;
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
if Src_DBG.DataSource.DataSet.BookmarkValid(ABookMark) then
Src_DBG.DataSource.DataSet.GotoBookmark(ABookMark);
Finally
AFileStream.Free;
Src_DBG.DataSource.DataSet.EnableControls;
end;
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询