发布一个生成 Excel 文件的类,不用OLE(20分)

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
unit ExcelExport;
// Author: RedFox
// E-mail: singlecat@163.com
interface

uses Classes;

type
TExcelExport = class
public
procedure WriteBegin(f:TStream);
procedure WriteEnd(f:TStream);
procedure WriteStringCell(f:TStream; ACol,ARow:Integer;Value:string);
procedure WriteIntegerCell(f:TStream; ACol,ARow:Integer;Value:Integer);
procedure WriteFloatCell(f:TStream; ACol,ARow:Integer;Value:double);
end;

implementation

var
arXlsBegin : array[0..5] of Word = ($809, 8, 0, $10, 0, 0);
arXlsEnd : array[0..1] of Word = ($0A, 00);
arXlsString : array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
arXlsNumber : array[0..4] of Word = ($203, 14, 0, 0, 0);
arXlsInteger : array[0..4] of Word = ($27E, 10, 0, 0, 0);
arXlsBlank : array[0..4] of Word = ($201, 6, 0, 0, $17);


{ TExcelExport }

procedure TExcelExport.WriteBegin(f: TStream);
begin
f.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));
end;

procedure TExcelExport.WriteEnd(f: TStream);
begin
f.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
end;

procedure TExcelExport.WriteFloatCell(f: TStream; ACol, ARow: Integer;
Value: double);
begin
arXlsNumber[2] := ARow;
arXlsNumber[3] := ACol;
f.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
f.WriteBuffer(Value, 8);
end;

procedure TExcelExport.WriteIntegerCell(f: TStream; ACol, ARow,
Value: Integer);
var
V: Integer;
begin
arXlsInteger[2] := ARow;
arXlsInteger[3] := ACol;
f.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (Value shl 2) or 2;
f.WriteBuffer(V, 4);
end;

procedure TExcelExport.WriteStringCell(f: TStream; ACol, ARow: Integer;
Value: string);
var
L: Word;
begin
L := Length(Value);
arXlsString[1] := 8 + L;
arXlsString[2] := ARow;
arXlsString[3] := ACol;
arXlsString[5] := L;
f.WriteBuffer(arXlsString, SizeOf(arXlsString));
f.WriteBuffer(Pointer(Value)^, L);
end;

end.
 
类里面没有合并单元格、设置单元格属性等函数?
 
涓嶉敊,寰堝疄鐢ㄧ殑涓滀笢鍟?
 
类里面没有合并单元格、设置单元格属性等函数?
--------------
没有.
 
看代码 貌似抄滴 台湾佬 代码
 
我这也有,比你的还好用,但不方便发上来
 
我这也有,比你的还好用,但不方便发上来

-----------------------
为什么不方便?
 
是公司里的
可以把 dbgrid/dbgrideh 里的数据导出到 excel ,和你的差不多吧,速度很快的
 
能不能设定单元格 格 式?
 
没有这些,这个功能也很简单
就是用来导数据的
 
多人接受答案了。
 
后退
顶部