用delphi 如何把EXCELL文件显示在自己程序中(例如显示在TPanel等容器控件上),但不能修改,却可以取到EXCELL文件单元格内容,就象只读的DBGrid一样。
PS:不要用TOleContainer控件,这个太恶心了。

解决方案 »

  1.   

    直接当数据源来用,例如function ConnectExcel(FileName: string): Boolean;
    begin
      Result := False;
      FExcelConn := TADOConnection.Create(self);
      if FExcelConn.Connected then FExcelConn.Connected := False;
      FExcelConn.LoginPrompt := False ;
      FExcelConn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+FileName+';Extended Properties="Excel 8.0";Persist Security Info=False';
      try
        FExcelConn.Connected := True;
        Result := FExcelConn.Connected;
      except
        ShowMessage('连接['+FileName+']失败!');
      end;
    end;
      

  2.   

    以一下供参考。用 Delphi 读取 Excel 文档:uses ComObj;function GetExcelItems(xlsFileName: string; var OutItems: TStringList): string;
    var
      i,j:Integer;
      eclApp:Variant;
    begin
      result:= '';
      try
        eclApp:= CreateOleObject('Excel.Application');
        eclApp.WorkBooks.Open(xlsFileName);
        eclApp.Visible:= False;
      except
        result:= '您的电脑中可能未安装Microsoft Excel!';
        exit;
      end;  try
        for i:=1 to eclApp.ActiveSheet.UsedRange.Rows.Count   do
        begin
          for j:=1 to eclApp.ActiveSheet.UsedRange.Columns.Count do
            OutItems.Add(eclApp.Cells[i,j].Value);
          Memo1.Lines.Add('');
        end;
      except
        result:= '读取失败!';
      end;
      eclApp.ActiveWorkBook.close;
      eclApp.Quit;
      eclApp:=Unassigned;
    end;
      

  3.   

    谢谢楼上两位,我要的不是读取Excell内容,而是要Excell在自己程序中显示出来。
    TOleContainer一定要鼠标去双击打开激活,而且工具栏隐去也麻烦。失去焦点后又不会显示了,太恶心了。怎想不通一个强大的delphi工具竟然无法显示一个excell,真是晕啊!我找一个控件容器twebbrower可以显示Excell,可是不能控制修改!
      

  4.   

    用TF1Book控制,
    procedure TForm1.Button1Click(Sender: TObject);
    var i:smallint;
    s:string;
    begin
      i:=11;
      s:='d:\Book2.xls';
      F1Book1.Read(s,i);
    end;
      

  5.   

    把EXCELE嵌套到PANEL上?没做过,但用OLE对象,传递个句柄上去,我想应该可以.
      

  6.   

    除了TOleContainer,好象也没有什么办法了
      

  7.   

    我看楼主有点极端
    TOleContainer为什么不可以.
    TOleContainer一定要鼠标去双击打开激活,而且工具栏隐去也麻烦。失去焦点后又不会显示了,太恶心了。     OleContainer1.CreateObjectFromFile(ExcelFile,false);
         OleContainer1.Run;
         OleContainer1.Enabled   :=   true;
         OleContainer1.DoVerb(ovShow);试验以上方法,看可以自动打开激活不,自己不会,口气不少.
      

  8.   

    我看楼主有点极端 
    TOleContainer为什么不可以. 
    TOleContainer一定要鼠标去双击打开激活,而且工具栏隐去也麻烦。失去焦点后又不会显示了,太恶心了。      OleContainer1.CreateObjectFromFile(ExcelFile,false); 
         OleContainer1.Run; 
         OleContainer1.Enabled   :=   true; 
         OleContainer1.DoVerb(ovShow); 试验以上方法,看可以自动打开激活不,自己不会,口气不少.---------------------
    我试了,自动激活是可以。失去焦点后,不能正常excel显示啊!我没有说绝对不能自动激活,我上面说了象twebbrower就能自激活,但是twebbrower不能控制,
      

  9.   

    http://blog.csdn.net/soweb/archive/2008/03/14/2182678.aspx
    TOleContainer 焦点问题我现在的项目就是用的TOleContainer 嵌入 Excel 。自动激活、焦点显示、用VBA隐藏菜单、文档保护等,效果很好。
      

  10.   

    twebbrower 应该用在网页浏览吧,用来显示有点过头哦。其实 twebbrower也是一个COM对象,内核嵌入IE,只是没明白他是怎么做到不用TOleContainer 显示IE.
    而Excel也是一个COM对象,却非要一个TOleContainer 来显示。
    期待高手来解释