我在Windows 2003Server上装了office2003
想打开服务器网站的excel文件:
fi.OpenExistsExcelFile("~/report/test.xls");
但发现客户端只一闪而过,服务器上却打开了此文件,这不是我想要的,我要的是在客户端打开此文件而不是在服务器上,请问如何做啊??注:我在服务器上设置了DCOM为交互用户,本地启动,本地激活,权限也设了。

解决方案 »

  1.   

    Response.Write
    输出Excel文件内容到客户端
      

  2.   

    这个要在客户端打开需要用ActiveX插件的,因为你要打开客户端的EXCEL,IE用户权限似乎不够, 你可以看一下DSOFramer,微软提供的插件,开源的
      

  3.   

    ....如果你实现了这个功能,但是别人浏览页面的时候机器上没有装Office呢
      

  4.   

    <a href="report/test.xls">open</a>
      

  5.   

    hrperlink连接EXCEL文件
    或string fileName = "";//客户端保存的文件名
                string filePath = Server.MapPath("");//路径            FileInfo fileInfo = new FileInfo(filePath);
                Response.Clear();
                Response.ClearContent();
                Response.ClearHeaders();
                Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
                Response.AddHeader("Content-Length", fileInfo.Length.ToString());
                Response.AddHeader("Content-Transfer-Encoding", "binary");
                Response.ContentType = "application/octet-stream";
                Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                Response.WriteFile(fileInfo.FullName);
                Response.Flush();
                Response.End();
      

  6.   

    谢谢“人生如梦”兄,用了你的代码可以实现打开服务器端的EXCEL文件,但我还想在客户端打开之前往这个EXCEL文件里面写入东西,麻烦再指教一下,非常感谢!!!!
      

  7.   

    你获得了这个Excel文件后,修改Excel内容 不就得了。然后再用流的方式(10楼正解)读出来啊!!
      

  8.   

    工具函数public static bool ResponseFile(HttpRequest _Request,HttpResponse _Response,string _fileName,string _fullPath, long _speed)
        {
            try
            {
                FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                BinaryReader br = new BinaryReader(myFile);
                try
                {
                    _Response.AddHeader("Accept-Ranges", "bytes");
                    _Response.Buffer = false;
                    long fileLength = myFile.Length;
                    long startBytes = 0;
         
                    double pack = 10240; //10K bytes
                    //int sleep = 200;   //每秒5次   即5*10K bytes每秒
                    int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
                    if (_Request.Headers["Range"] != null)
                    {
                        _Response.StatusCode = 206;
                        string[] range = _Request.Headers["Range"].Split(new char[] {'=', '-'});
                        startBytes = Convert.ToInt64(range[1]);
                    }
                    _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
                    if (startBytes != 0)
                    {
                        //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
                    }
                    _Response.AddHeader("Connection", "Keep-Alive");
                    _Response.ContentType = "application/octet-stream";
                    _Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8) );
                 
                    br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
                    int maxCount = (int) Math.Floor((fileLength - startBytes) / pack) + 1;                for (int i = 0; i < maxCount; i++)
                    {
                        if (_Response.IsClientConnected)
                        {
                            _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
                          System.Threading.Thread.Sleep(sleep);
                        }
                        else
                        {
                            i=maxCount; 
                        }
                    }
                }
                catch
                {
                 return false;
                }
                finally
                {
                    br.Close();                myFile.Close();
                }
            }
            catch
            {
                return false;
            }
            return true;
        }
    调用代码
    Page.Response.Clear();
             string excelFileName = this.Page.Title + ".xls";        bool success = excel2.ResponseFile(Page.Request, Page.Response, excelFileName, Server.MapPath("./") + @"download\要下载的excel.xls", 1024000);
            if (!success)
                Response.Write("下载文件出错!");
            Page.Response.End();
      

  9.   

    excel2 是我写的一个 操作 excel 的工具函数类
      

  10.   

    既然你生成了文件,直接
    Response.Redirect("~/report/test.xls")就可以直接打开
      

  11.   

    问题是我要在打开之前“写入”其它的数据。也许是我的表达不够清楚,其实是这样的:
    把设定好格式并排好版的excel文件test.xls放入网站服务器目录,然后用网页操作此文件,并且还要“写入”数据(如送货记录)到单元格,然后再提供给客户端下载或打开,所以这个“写入”数据很重要,仅仅原样打开是不够的。