Excel导出的文件只有office的excel打开能看到数据内容,永中,wps等其他软件的打开都显示不了数据???不知何解?以下是我的导出代码:
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(aDataSet: TDataSet);
var
  i,j:integer;
  col, row: word;
  aBookMark: TBookMark;
  aFileStream: TFileStream;
  savedialog1:tsavedialog;
  filename:string;
procedure incColRow; //增加行列号
begin
  if Col=ADataSet.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
savedialog1:=tsavedialog.Create(nil);
if savedialog1.Execute then
   if sysutils.FileExists(savedialog1.FileName) then
      begin
       if application.MessageBox('文件已存在,替换?','提示',mb_yesno+mb_defbutton1+mb_iconquestion+mb_systemmodal)=idyes then
         begin
          if aDataSet.Active=false then
             begin
              application.MessageBox('当前数据表未打开,操作被中止','警告',MB_ICONINFORMATION);
              exit;
             end;
          if aDataSet.IsEmpty then
             begin
              application.MessageBox('当前数据表未打开,操作被中止','警告',MB_ICONINFORMATION);
              exit;
             end;
          if  sysutils.DeleteFile(savedialog1.FileName)=false then
           begin
              showmessage(savedialog1.FileName+'文件正在使用,无法替换.'+chr(13)+chr(10)+'请关闭excel 文件:'+savedialog1.FileName+'.在重新导入。');
              exit;
           end;
       end;
    end;
filename:=savedialog1.FileName;
if filename='' then
  exit
else
  begin
    if rightstr(FileName,4)<>'.xls' then
    filename:=filename+'.xls';
  end;
aFileStream := TFileStream.Create(FileName, fmCreate);
  Try
    //写文件头
    aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin));
    //写列头
    Col := 0; Row := 0;
    for i := 0 to aDataSet.FieldCount - 1 do
           WriteStringCell(aDataSet.Fields[i].FieldName);
    //写数据集中的数据
      aDataSet.DisableControls;
      ABookMark := aDataSet.GetBook;
      aDataSet.First;
      while not aDataSet.Eof do
      begin
        for i := 0 to aDataSet.FieldCount - 1 do
        case ADataSet.Fields[i].DataType of
           ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:
           WriteIntegerCell(aDataSet.Fields[i].AsInteger);
           ftFloat, ftCurrency, ftBCD:WriteFloatCell(aDataSet.Fields[i].AsFloat);
        ftBlob,ftGraphic:WriteStringCell('图片无法显示');
         else
         WriteStringCell(aDataSet.Fields[i].AsString);
         end;
         aDataSet.Next;
        end;
        //写文件尾
        AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
        if ADataSet.BookValid(ABookMark) then aDataSet.GotoBook(ABookMark);
         Finally
         AFileStream.Free;
         ADataSet.EnableControls;
         showmessage('文件已成功保存'+'文件位置 : '+filename);
      end;
end;

解决方案 »

  1.   

    Excel导出的文件只有office的excel打开能看到数据内容,永中,wps等其他软件的打开都显示不了数据???不知何解?
    ===========================================
    请问楼主:你不用导出的excel,而是直接用office-excel编辑一个电子表格,保存后看用wps能打开吗?呵呵
      

  2.   

    回楼上的朋友,用office-excel编辑后保存过后,其他软件就可以正常打开了!
      

  3.   

    那你为什么非用EXCEL保存   保存成TAB键分割的文本  WPS肯定WPS可以打开亚
      

  4.   

    是wps自身的问题,后来打上sp1后就可以打开了