由于DbgridEh 导出 Excel 如果字段长度超过255会截断,所以必须换一种方法来导出,百度  谷歌 看了上百帖,都是有这句:

 

 xlApp := CreateOleObject('Excel.Application');

 

由于这句代码是要求 客户的电脑上必须有 Office 才行,利用的是OLE技术;

 

中国的市场是客户电脑上没有Office 但是有WPS,所以带上面那句的代码 都不行,看了很多帖子,发现了一贴很强:

 

http://blog.sina.com.cn/s/blog_4a8552f80100hee8.html

 

再客户电脑上没有OFFICE的情况下  除了利用dbgrideh的导出方法,又多了一种导出的方法。代码如下:

 

另外这里说下dbgrideh 的导出excel,它有两种方式:

 

1. 客户电脑上有没有Office 都可以,缺陷是  当字段长度 超过255后,会被截断。

SaveDBGridEhToExportFile(TDBGridEhExportAsXLS,TopExportExcelShow,top_file_name,True);

2.要求客户端电脑上必须有Office,实际是 他内部是调用了CreateOleObject('Excel.Application');注意OLE

SaveDBGridEhToExportFile(TDBGridEhExportAsOLEXLS,TopExportExcelShow,top_file_name,True);

 

 

新型方法代码如下:

 

procedure TfrmExportExcel.Excel1Click(Sender: TObject);
var
  MyList: TStringList;
  MyStr,top_file_name: string;
  I: Integer;
  MySaveDialog: TSaveDialog;
begin
  MyList := TStringList.Create;
  MySaveDialog := TSaveDialog.Create(nil);
  try
    //-----------------------------
    //初始化
    MySaveDialog.Filter := 'Excel|*.xls';
    MyStr:='';

    //-----------------------------
    //选择文件
    if MySaveDialog.Execute then
    begin
      top_file_name := MySaveDialog.FileName+'.xls';
    end else begin
      ShowMessage('导出失败');
      Exit;
    end;


    //-----------------------------
    //导出表
    frmClientDm.ExportExcelShowAdq.DisableControls;
    for I := 0 to frmClientDm.ExportExcelShowAdq.FieldCount-1 do
    begin
      MyStr := MyStr+frmClientDm.ExportExcelShowAdq.Fields[I].DisplayLabel + Char(9);
      Application.ProcessMessages;
    end;
    MyStr := MyStr + #13;
    frmClientDm.ExportExcelShowAdq.First;
    while not(frmClientDm.ExportExcelShowAdq.Eof) do
    begin
      for I := 0 to frmClientDm.ExportExcelShowAdq.FieldCount-1 do
      begin
        MyStr := MyStr + frmClientDm.ExportExcelShowAdq.Fields[I].AsString + Char(9);
      end;
      MyStr := MyStr + #13;
      frmClientDm.ExportExcelShowAdq.Next;
      Application.ProcessMessages;
    end;
    //回到原点
    frmClientDm.ExportExcelShowAdq.First;
    frmClientDm.ExportExcelShowAdq.EnableControls;
    MyList.Add(MyStr);
    MyList.SaveToFile(top_file_name);

    //-----------------------------
    //提示导出成功
    ShowMessage('导出订单表成功');
  finally
    MyList.Free;
    MySaveDialog.Free;
  end;
end;

 

posted on 2014-08-07 18:46  del88  阅读(38)  评论(0编辑  收藏  举报