delphi7 压缩excel出现乱码
- Delphi(Pascal) code
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;exportsCompressFile, DeCompressFile;beginend.调用 CompressFile 压缩然后调用 DeCompressFile 解压后出现乱字符
出现乱码的字符为 “×”(乘号),显示为?
在excel单元格中,如果乘号前面有汉字,则不会出现乱字符
如果乘号前面没有汉字,则乘号会和后面的一个字符结合,显示为一个问号
求解答
[解决办法]
D7经测试,没发现有乱码