有一个关于将数据导出到excel中的问题,是用的调用excel组件的方法将数据导出.方法是先将数据导出excel然后存放在服务器上的一个文件夹中,然后供用户下载.
现在有这样一个问题,当我在本机测试的时候一切正常,没有任何问题.当部署到服务器后,如果我用一个账户登录到服务器上(也就是我能看见服务器的桌面),也一切正常,客户端能够正常导出数据然后下载.但是,当我注销服务器后,就不行了.我也按照网上的的一些方法,把组件的权限, 安全之类的设置都更改了,尝试了很多方法,都没有成功.
有哪位高手能够帮助诊断下可能有什么问题吗?谢谢了

解决方案 »

  1.   

    你的问题应该是客户端通过浏览器浏览服务端的应用程序,这个应用程序里有导出数据的功能,但是客户端现在不可以导出数据,解决思路是:先在服务端生成文件,然后通过http将刚导出的数据让用户下载,下面是具体代码:/// <summary>
        /// 实现导出到execl文件
        /// </summary>
        /// <param name="filePathName">保存的文件路径和名称</param>
        /// <param name="GVPassDetail">GridView控件的数据</param>
        public void ExportDataToCSV(string filePathName, GridView GVPassDetail)
        {
            using (FileStream fileStream = new FileStream(filePathName, FileMode.CreateNew, FileAccess.ReadWrite))
            {
                StringBuilder stringBuilder = new StringBuilder();
                using (StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.Default))
                {
                    int colCount = GVPassDetail.Columns.Count;                for (int i = 0; i < colCount; i++)
                    {
                        stringBuilder.Append(GVPassDetail.Columns[i].HeaderText);
                        if (i < colCount - 1)
                        {
                            stringBuilder.Append(",");
                        }
                    }
                    stringBuilder.Append("\n");                                         //换行                for (int i = 0; i < GVPassDetail.Rows.Count; i++)
                    {
                        for (int j = 0; j < GVPassDetail.Columns.Count; j++)
                        {
                            stringBuilder.Append(GVPassDetail.Rows[i].Cells[j].Text.Trim());
                            if (j < GVPassDetail.Columns.Count - 1)
                            {
                                stringBuilder.Append(",");
                            }
                        }
                        stringBuilder.Append("\n");
                    }
                    streamWriter.Write(stringBuilder.ToString());
                    streamWriter.Close();            }
            }
        }    protected void ClientDownLoadFile(string filePathName)
        {
            FileInfo fi = new FileInfo(filePathName);
            FileStream MyFileStream = fi.OpenRead();
            long FileSize = MyFileStream.Length;
            byte[] Buffer = new byte[(int)FileSize];
            MyFileStream.Read(Buffer, 0, (int)FileSize);
            MyFileStream.Close();
            Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(System.IO.Path.GetFileName(filePathName)));
            Response.ContentType = "application/octet-stream";
            Response.BinaryWrite(Buffer);
            Response.Flush();
            Response.Close();
        }
      

  2.   

    简单做法可以先将数据放到gridview(隐藏)然后再导出,或者循环拼HTML,再输出HTML,或者自己写导出算法,这个有些难度
      

  3.   

    谢谢楼上的回复,最开始时用导出到csv的方法来的,那样是能成功的.但是那样有一个问题,就是数据是文本,文本中可能就有逗号,这样会影响excel中的格式,然后就是导出来的csv文件很难看,有的行宽,有的行窄.
    现在是引用Microsoft.Office.Interop.Excel,这样也可以定制excel的格式,但就是出现前述的问题.