asp.net 导出EXCEL到指定路径

876456fyb 2013-05-27 02:08:18
public void DGToExcel(System.Web.UI.Control ctl)
{
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("费用", Encoding.UTF8).ToString() + ".xls");
HttpContext.Current.Response.Charset = "UTF-8";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
HttpContext.Current.Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
this.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);

ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();


我用该方法进行导出,请问如何实现不弹出保存对话框,直接保存到服务器或者客户端某个路径,比如我想直接保存在D盘的IMPORT文件夹下,请问如何写死路径?请求各位帮帮忙。
...全文
337 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiss筱魔 2013-05-27
  • 打赏
  • 举报
回复

 public ActionResult DataTableToExcel()
        {

            string OpeOrder = Request.QueryString["Ord"];
            int OpeOrderStatus = Convert.ToInt32(Request.QueryString["Status"]);
            string OpeOrderMemName = Request.QueryString["Name"];
            string OpeOrderMemEmail = Request.QueryString["Email"];
           
            string StartTime = Request.QueryString["StartTime"];
            string EndTime = Request.QueryString["EndTime"];
            // 当前对话 
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            IList<Order> Orders = null;

            //Orders = orderDao.SelectAllOrder();
            Orders = orderDao.SelectByTime(new Order { StartTime = StartTime, EndTime = EndTime });
            OrderHelper orderHelper = new OrderHelper();
            string MembersId = orderHelper.MemberIdsByOrder(Orders);

            IList<Member> members = memberDao.SelectByMemberOrderIds(MembersId);
            members = memberDao.SelectByMember(new Member { _Mem_UserName = OpeOrderMemName, _Mem_Email = OpeOrderMemEmail });

            MemberHelper memberHelper = new MemberHelper();
            string Ope_Ids = memberHelper.OperatorIdsByMember(members);
            IList<Operator> operates = operatorDao.SelectByMem_Ids(Ope_Ids);

            members = members.Join(operates, m => m.Mem_Ope_Id, o => o.Ope_Id, (m, o) => { m.Ope_Name = o.Ope_Name; return m; }).ToList();
            //先查询Member表,根据Mem_Id得到Ope_Id,然后根据Ope_Id查询tb_Operator表得到Ope_Name

            Orders = Orders.Join(members, o => o.Ord_Mem_Id, m => m.Mem_Id, (o, m) => { o.Ord_MemUserName = m.Mem_UserName; o.Ord_Mem_Email = m.Mem_Email; o.Ope_Name = m.Ope_Name; return o; }).ToList();

            string filename = DateTime.Now.Month + "_" + DateTime.Now.Day + "_" + DateTime.Now.Hour + "_" + DateTime.Now.Minute;
            byte[] str = null;

            curContext.Response.ContentType = "application/vnd.ms-excel";
            curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
            curContext.Response.Charset = "UTF-8";

            Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename + ".xls");
            string _str = "";

            if (Orders.Count > 0)
            {
               
                _str = "<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\"><br/>";
                _str += "<tr><td>订单编号</td><td>订单金额</td><td>会员名字</td><td>会员邮箱</td><td>操作员</td><td>添加时间</td><td>订单状态</td></tr><br/>";
                foreach (var order in Orders)
                {
                    _str += "<tr><td>" + order.Ord_Id + "</td><td>" + order.Ord_TotalAmount + "</td><td>" + order.Ord_MemUserName + "</td><td>" + order.Ord_Mem_Email + "</td><td>" + order.Ope_Name + "</td><td>" + order.AddDate + "</td><td>" + (OrderStatus)order.Ord_Status + "</td></tr><br/>";
                }
                _str += "</table>";
                // 返回客户端 
            }
            else
            {
                _str = "<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\"><br/>";
                _str += "<tr><td>订单编号</td><td>订单金额</td><td>会员名字</td><td>会员邮箱</td><td>操作员</td><td>添加时间</td><td>订单状态</td></tr><br/>";
                _str += "</table>";
            }
            str = System.Text.Encoding.UTF8.GetBytes(_str.ToString());
            return File(str, "attachment;filename=" + filename + ".xls");
        }
  • 打赏
  • 举报
回复
服務器直接保存不就OK ? 比如 System.IO.File.WriteAllText(SaveFilePath, strWriter.ToString(), System.Text.Encoding.UTF8); 客服端直接輸出即可 貌似沒有什麽特別的吧
爱在夕阳下 2013-05-27
  • 打赏
  • 举报
回复
保存到 服务器 可以不弹出提示 保存到 客户端 必须有提示吧 。。
IssacChow 2013-05-27
  • 打赏
  • 举报
回复
引用 5 楼 Scorip 的回复:


  #region 写文件
        /****************************************
         * 函数名称:WriteFile
         * 功能说明:当文件不存时,则创建文件,并追加文件
         * 参    数:Path:文件路径,Strings:文本内容
         * 调用示列:
         *           string Path = Server.MapPath("Default2.aspx");       
         *           string Strings = "这是我写的内容啊";
         *           FileOperate.WriteFile(Path,Strings);
        *****************************************/
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="Path">文件路径</param>
        /// <param name="Strings">文件内容</param>
        public static void WriteFile(string Path, string Strings)
        {

            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true, System.Text.Encoding.UTF8);
            f2.WriteLine(Strings);
            f2.Close();
            f2.Dispose();


        }
        #endregion

就他..木错了
Scorip 2013-05-27
  • 打赏
  • 举报
回复
注意 Server.MapPath("Default2.aspx") 获取绝对路径,并保证当前用户和IIS对该目录有IO权限。
Scorip 2013-05-27
  • 打赏
  • 举报
回复


  #region 写文件
        /****************************************
         * 函数名称:WriteFile
         * 功能说明:当文件不存时,则创建文件,并追加文件
         * 参    数:Path:文件路径,Strings:文本内容
         * 调用示列:
         *           string Path = Server.MapPath("Default2.aspx");       
         *           string Strings = "这是我写的内容啊";
         *           FileOperate.WriteFile(Path,Strings);
        *****************************************/
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="Path">文件路径</param>
        /// <param name="Strings">文件内容</param>
        public static void WriteFile(string Path, string Strings)
        {

            if (!System.IO.File.Exists(Path))
            {
                System.IO.FileStream f = System.IO.File.Create(Path);
                f.Close();
                f.Dispose();
            }
            System.IO.StreamWriter f2 = new System.IO.StreamWriter(Path, true, System.Text.Encoding.UTF8);
            f2.WriteLine(Strings);
            f2.Close();
            f2.Dispose();


        }
        #endregion

IssacChow 2013-05-27
  • 打赏
  • 举报
回复
FILE 类的吧
by_封爱 2013-05-27
  • 打赏
  • 举报
回复
浏览器直接保存到本地D盘? 做梦呢吧 flash sl ocx否则没办法
876456fyb 2013-05-27
  • 打赏
  • 举报
回复
请问这个saveTo 是哪个对象的方法,如何用?
IssacChow 2013-05-27
  • 打赏
  • 举报
回复
不用response.write,试试用saveTo

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧