delphi中怎样把显示在dbgrid中的数据导出?

我做的人力资源招聘系统最后经过筛选会选出一些符合应聘条件的记录,会显示在dbgrid里,我想设置一个按钮,单击之后,就能把这些筛选出来的记录写进本地的excel或者txt... 我做的人力资源招聘系统最后经过筛选会选出一些符合应聘条件的记录,会显示在dbgrid里,我想设置一个按钮,单击之后,就能把这些筛选出来的记录写进本地的excel或者txt文件里,哪个简单写进哪个就行。
这个界面要筛选多次,所以每次导入的数据都是不同的,意思就是能多次执行导入就行。
请给出详细代码,谢谢。
导出的数据是“面试管理”表的一部分,数据库是SQL2000
展开
 我来答
howlshadow
2010-05-24 · TA获得超过1381个赞
知道小有建树答主
回答量:1171
采纳率:100%
帮助的人:934万
展开全部
给你一个导出代码

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;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式