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

delphi7 压缩excel出现乱码解决思路

2013-01-06 
delphi7 压缩excel出现乱码library ConvertFormatusesSysUtils,Classes,ZLib{$R *.res}//压缩function C

delphi7 压缩excel出现乱码

library ConvertFormat;

uses
  SysUtils,
  Classes,
  ZLib;
  
{$R *.res}

//压缩
function CompressFile(const DestFile,SrcFile:pchar):Boolean; stdcall;
var
  des:TMemoryStream;
  sou:TMemoryStream;
  cs: TCompressionStream;
  Count: Integer;
  ret:boolean;
  level: TCompressionLevel;
begin
  ret:=false;
  level:= clFastest;
  des:=TMemoryStream.Create;
  sou:= TMemoryStream.Create;
  cs:=TCompressionStream.Create(level,des);
  try
    sou.LoadFromFile(SrcFile);
    Count:=sou.Size;
    sou.SaveToStream(cs);
    cs.Free;

    sou.Clear;
    sou.WriteBuffer(Count, SizeOf(Count));
    sou.CopyFrom(des,0);

    des.Clear;

    des.Seek(0,soFromBeginning);
    des.CopyFrom(sou,0);
    des.SaveToFile(DestFile);
    ret:=true;
  finally
    des.Free;
    sou.Free;
    result:=ret;
  end;
end;

//解压缩
function DeCompressFile(const DestFile,SrcFile:pchar):boolean;stdcall;
var
  des:TFileStream;
  sou:TMemoryStream;
  decs: TDeCompressionStream;
  Buffer: PChar;
  Count: integer;
  ret:boolean;
begin
  Buffer:=nil;
  ret:=false;
  des:=TFileStream.Create(DestFile,fmCreate);
  sou:= TMemoryStream.Create;
  decs:=nil;
  try
    sou.LoadFromFile(SrcFile);
    sou.Seek(0,soFromBeginning);
    sou.ReadBuffer(count,sizeof(count));
    GetMem(Buffer, Count);
    decs:=TDeCompressionStream.Create(sou);
    decs.ReadBuffer(Buffer^, Count);
    Des.WriteBuffer(Buffer^, Count);
    Des.Position := 0;//复位流指针
    ret:=true;
  finally
    FreeMem(Buffer);
    decs.Free;
    des.Free;
    sou.Free;
    result:=ret;
  end;
end;

exports
CompressFile, DeCompressFile;


begin
end.


调用 CompressFile 压缩然后调用 DeCompressFile 解压后出现乱字符

出现乱码的字符为 “×”(乘号),显示为?

在excel单元格中,如果乘号前面有汉字,则不会出现乱字符

如果乘号前面没有汉字,则乘号会和后面的一个字符结合,显示为一个问号

求解答
[解决办法]
D7经测试,没发现有乱码

热点排行