var CXlsBof: array[0..5] of Word = ($809, 8, 0, $10, 0, 0); CXlsEof: array[0..1] of Word = ($0A, 00); CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0); CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0); CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0); CXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);
procedure TDS2Excel.WritePrefix; //写前缀 begin Stream.WriteBuffer(CXlsBof, SizeOf(CXlsBof)); end;
procedure TDS2Excel.WriteSuffix; //写后缀 begin Stream.WriteBuffer(CXlsEof, SizeOf(CXlsEof)); end;
procedure TDS2Excel.WriteTitle; //写标题 var n: word; begin for n := 0 to FDataSet.FieldCount - 1 do WriteStringCell(FDataSet.Fields[n].FieldName); end;
procedure TDS2Excel.WriteDataCell; //正式写入Excel表的数据 var n: word; begin WritePrefix; //写前缀
if FWillWriteHead then WriteTitle;
FDataSet.DisableControls;
FBookMark := FDataSet.GetBookmark; FDataSet.First; while not FDataSet.Eof do begin for n := 0 to FDataSet.FieldCount - 1 do begin if FDataSet.Fields[n].IsNull then WriteBlankCell //如果n字段为空,则写空单元 else begin case FDataSet.Fields[n].DataType of ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes : WriteIntegerCell(FDataSet.Fields[n].AsInteger); ftFloat, ftCurrency, ftBCD : WriteFloatCell(FDataSet.Fields[n].AsFloat); else WriteStringCell(FDataSet.Fields[n].AsString); end; end; end; FDataSet.Next; end;
WriteSuffix; //写后缀
if FDataSet.BookmarkValid(FBookMark) then FDataSet.GotoBookmark(FBookMark);