首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi 如何实现机构图的显示与打印

2012-04-08 
delphi 怎么实现机构图的显示与打印1、请问:delphi 怎么实现组织机构图的显示与打印 导出word也行2、怎么实

delphi 怎么实现机构图的显示与打印
1、请问:delphi 怎么实现组织机构图的显示与打印 导出word也行
2、怎么实现导出excel 每行都带标题,类似工资条。如下:
一格一格填充太慢,有没有好的方法

姓名 基本工资 提成 合计
张三 100 2000 2100
姓名 基本工资 提成 合计
李四 200 2000 2200
姓名 基本工资 提成 合计
王五 300 1800 2100



[解决办法]
导出excel 
用下面这个超快,1万行数据,几秒搞定。

Delphi(Pascal) code
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);Procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataQry: TADOQuery);var  i: integer;  Col, row: word;  ABookMark: TBookMark;  aFileStream: TFileStream;  procedure incColRow; //增加行列号  begin    if Col = aDataQry.FieldCount - 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 aDataQry.Recordset.RecordCount = 0 then  Exit;    if FileExists(FileName) then DeleteFile(FileName); //文件存在,先删除    aFileStream := TFileStream.Create(FileName, fmCreate);  Try    //写文件头    aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));    //写列头    Col := 0; Row := 0;    if bWriteTitle then    begin    for i := 0 to aDataQry.FieldCount - 1 do      WriteStringCell(aDataQry.Fields[i].FieldName);    end;    //写数据集中的数据    aDataQry.DisableControls;    ABookMark := aDataQry.GetBookmark;    aDataQry.First;    while not aDataQry.Eof do    begin    for i := 0 to aDataQry.FieldCount - 1 do      case aDataQry.Fields[i].DataType of        ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:        WriteIntegerCell(aDataQry.Fields[i].AsInteger);        ftFloat, ftCurrency, ftBCD:        WriteFloatCell(aDataQry.Fields[i].AsFloat)      else        WriteStringCell(aDataQry.Fields[i].AsString);      end;      aDataQry.Next;    end;    //写文件尾    AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));    if aDataQry.BookmarkValid(ABookMark) then aDataQry.GotoBookmark(ABookMark);  Finally    AFileStream.Free;    aDataQry.EnableControls;  end;end;
[解决办法]
导出excel 还是挺好的
百度吧

热点排行