protected void ButtonDummy_Click(object sender, EventArgs e)
        {
            try
            {
                //导出数据
                string name = DateTime.Now.ToString("yyyymmddhhmmss");
                string path = Server.MapPath("~/Upload/导出Excel/" + name + ".xls");
                ToExcel(path);                System.IO.FileInfo file = new System.IO.FileInfo(path);
                Response.Clear();
                Response.Charset = "GB2312";
                Response.ContentEncoding = System.Text.Encoding.UTF8;
                //   添加头信息,为"文件下载/另存为"对话框指定默认文件名   
                Response.AddHeader("Content-Disposition", "attachment;   filename=" + Server.UrlEncode(file.Name));
                //   添加头信息,指定文件大小,让浏览器能够显示下载进度   
                Response.AddHeader("Content-Length", file.Length.ToString());                //   指定返回的是一个不能被客户端读取的流,必须被下载   
                Response.ContentType = "application/ms-excel";                //   把文件流发送到客户端   
                Response.WriteFile(file.FullName);
                //   停止页面的执行   
                Response.Flush();
                Response.End();            }
            catch (Exception ex)
            {
                ExceptionLogger.LogException("SaleReport.ButtonDummy_Click", new ZeroGlobalException(ExceptionType.UnknownError.ToString(), ex));
            }
        }
        /// <summary>
        /// 导出Excel
        /// </summary>
        private void ToExcel(string strExcelFileName)
        {
            try
            {
                object objOpt = Missing.Value;
                Application excel = new Application();//实例化一个Excel
                _Workbook wkb = excel.Workbooks.Add(objOpt);
                _Worksheet wks = (_Worksheet)wkb.ActiveSheet;                #region 设置格式
                wks = (_Worksheet)wkb.Worksheets.Add(Missing.Value, Missing.Value, 1, Missing.Value);
                wks.Name = "人员";
                excel.get_Range(excel.Cells[1, 1], excel.Cells[1, 4]).MergeCells = true;
                wks.get_Range("A1", "L1").get_Value(System.Type.Missing);
                excel.Cells[1, 1] = "基本信息";
                  excel.Cells[6, 1] = "名字";
                wkb.SaveAs(strExcelFileName, objOpt, null, null, null, null, XlSaveAsAccessMode.xlShared, null, null, null, null, null);
                wkb.Close(false, objOpt, objOpt);
              
                excel.Quit();1。在出现下载提示框后,如果点“打开”会提示,文件被锁定?如和解决呢?
2。如果保存后,在本地打开,会提示“文件丢失”,基本都是些CSS文件。。点“确定”,发现excel显示的是整个也面。

解决方案 »

  1.   

    EXCEL不能被你上述的两种办法打开并修改再保存。
    第一种方法,其实仅仅是显示,出现CSS文件丢失,是因为在该页面中,它的页面类型不再是html格式而是电子表格格式,链接不到你服务端的样式,一个解决的办法是把样式表直接写在页面中,或者不使用样式表。第二种方法,出现“文件被锁定”,是因为代码最后的quit并不能真正退出上一次打开的EXCEL进程。如何真正退出进程,目前还没有一个可行的办法。这种操作,非常容易出现服务器上多个EXCEL进程并存导致服务器死机,建议不要使用 。想要在B、S中直接打开表格、编辑、再保存,这是不现实的。
    不过有一些人制作了一些组件,倒是可以实现客户端打开编程保存回服务器,如果项目确实有此需求,请至网上找此类控件,一般都是需要花钱买。
      

  2.   

    Response.Write("var winname = window.open('', '_blank', 'top=10000,left=10000');")
    Response.Write("winname.document.open('text/html', 'replace');")
    While Not Rs.Eof
      If Rs(0)<>"" Then 
          Response.Write("winname.document.writeln('" & Rs(0) & "');")里面写入图片啊地址 如下:
         Rs.MoveNext
      Wend
    把数据保存到导出数据.xls
    Response.Write("winname.document.execCommand('saveas','','导出数据.xls');")
    Response.Write("winname.close();")
    Response.Write("window.close();")
    Response.Write "</SCRIPT>"
    例子
    Response.Write("winname.document.writeln(""<img src='images/myphoto.jpg'>"");")