http://dotnet.aspx.cc/ShowDetail.aspx?id=BF0A54F9-C7C7-4200-BD9A-802AC1F5DE50

解决方案 »

  1.   

    导出到excel是没有问题的,问题就是导出在服务器里面,如何才能下载到客户端呢?
      

  2.   

    导出到服务器里后:
    Response.Clear();
    Response.ContentType = "application/octet-stream";
    Response.WriteFile(@"c:\my.xls");
    Response.End();
    ===============================
    注意:如果上面的ContentType 写成 "application/vnd.ms-excel"
    则会在浏览器中打开Excel程序。
      

  3.   

    这是我常用的:(格式有点乱,自己整理一下,myado是我的数据类)
    private void downeml(string yjid,string sn)
    {
    string sql="select 附件名称,附件地址 from 普通邮件 where 验证码='"+sn+"' and 附件大小>0 and id="+yjid;
    adohelper myado=new adohelper();
    SqlDataReader dr=myado.ExecuteRead(sql);
    if(dr.Read())
    {
    string fjname,fjaddress,fjn1,fjn2;
    fjname=dr["附件名称"].ToString();
    fjaddress=dr["附件地址"].ToString();
    dr.Close(); fjn1=System.IO.Path.GetFileNameWithoutExtension(fjname);
    fjn2=System.IO.Path.GetExtension(fjname);
    fjname=CutString(fjn1,28)+fjn2; fjaddress=Server.MapPath("../Emailfile/"+fjaddress);
    try
    {
    FileStream MyFileStream=new FileStream(fjaddress, FileMode.Open,FileAccess.Read,FileShare.Read);
    long FileSize = MyFileStream.Length;
    byte[] Buffer = new byte[(int)FileSize];
    MyFileStream.Read(Buffer, 0, (int)FileSize);
    MyFileStream.Close(); Response.Expires=0;
    Response.Buffer=true;
    Response.Clear();
    Response.AppendHeader("Content-Disposition","attachment; filename="+HttpUtility.UrlEncode(fjname,System.Text.Encoding.UTF8));
    Response.ContentType="application/octet-stream";
    Response.BinaryWrite(Buffer);
    }
    catch
    {
    Response.Write(@"<script language='javascript'>alert('附件下载失败,原因是该附件已被删除或服务器正忙,请稍候重试!');window.close();</script>");
    Response.End();
    }
    }
    else
    {
    dr.Close();
    Response.Write(@"<script language='javascript'>alert('您没有访问该邮件的权限!');window.close();</script>");
    Response.End();
    }
    }private string CutString(string inputString,int len)
    {
    ASCIIEncoding ascii =  new ASCIIEncoding();
    int tempLen=0;
    string tempString="";
    byte[] s = ascii.GetBytes(inputString);
    for(int i=0;i<s.Length;i++)
    {
    if((int)s[i]==63)
    {
    tempLen+=2;
    }
    else
    {
    tempLen+=1;
    }
            
    try
    {
    tempString+=inputString.Substring(i,1);
    }
    catch
    {
    break;
    } if(tempLen>len)
    break;
    }
    //如果截过则加上半个省略号
    byte[] mybyte=System.Text.Encoding.Default.GetBytes(inputString);
    if(mybyte.Length>len)
    tempString+="(…)"; return tempString;
    }
      

  4.   

    这是一个导出DataGrid至Excel文件并下载的类:using System;
    using System.Text;
    using System.Web;
    using System.Web.UI.WebControls;
    namespace toExcel
    {
    public class DataGridToCSV
    {
    public void GenerateFile(System.Web.UI.Page page,System.Web.UI.WebControls.DataGrid MyDataGrid,string FileName)
    {
    HttpResponse resp;
    int colCount = MyDataGrid.Columns.Count - 1;
    resp = page.Response;
    resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
    resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName); string colHeaders = "";
    StringBuilder strItems = new StringBuilder();
    DataGridColumn myCol;
    int i; for(i=0;i<=colCount;i++)
    {
    myCol = MyDataGrid.Columns[i];
    if(myCol.Visible==true)
    {
    colHeaders = colHeaders + myCol.HeaderText.ToString() + ",";
    }
    } if(colHeaders.Length>0)
    {
    colHeaders = colHeaders.Substring(0,colHeaders.LastIndexOf(","));
    }
    resp.Write(colHeaders);

    foreach(DataGridItem item in MyDataGrid.Items)
    {
    resp.Write(this.FormatExportRow(colCount,item,MyDataGrid));
    }
    }
    private string FormatExportRow(int colCount,DataGridItem Item,DataGrid MyDataGrid)
    {
    string strItem="";
    int i; for(i=0;i<=colCount;i++)
    {
    if(MyDataGrid.Columns[i].Visible==true)
    {
    if(Item.Cells[i].Text == null)
    {
    Item.Cells[i].Text="";
    }
    if(i==colCount)
    {
    strItem += Item.Cells[i].Text.ToString() + "<BR>";
    }
    else
    {
    strItem += Item.Cells[i].Text.ToString() + ",";
    }
    }
    }
    return strItem;
    }
    }
    }然后在你的下载页面:
    private void btnDownLoad_Click(object sender, System.EventArgs e)
    {
    toExcel.DataGridToCSV toXls = new toExcel.DataGridToCSV();
    toXls.GenerateFile(this.Page,this.grdDisp,"1.xls");
    }
      

  5.   

    上面那段代码有点问题,再优化一下:
    using System;
    using System.Text;
    using System.Web;
    using System.Web.UI.WebControls;
    namespace toExcel
    {
    public class DataGridToCSV
    {
    public void GenerateFile(System.Web.UI.Page page,System.Web.UI.WebControls.DataGrid MyDataGrid,string FileName)
    {
    HttpResponse resp;
    int colCount = MyDataGrid.Columns.Count - 1;
    resp = page.Response;
    resp.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");
    resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName); string colHeaders = "";
    StringBuilder strItems = new StringBuilder();
    DataGridColumn myCol;
    int i; for(i=0;i<=colCount;i++)
    {
    myCol = MyDataGrid.Columns[i];
    if(myCol.Visible==true)
    {
    colHeaders = colHeaders + myCol.HeaderText.ToString() + ",";
    }
    } if(colHeaders.Length>0)
    {
    colHeaders = colHeaders.Substring(0,colHeaders.LastIndexOf(","));
    }
    resp.Write(colHeaders);
    resp.Write(System.Environment.NewLine);
    foreach(DataGridItem item in MyDataGrid.Items)
    {
    resp.Write(this.FormatExportRow(colCount,item,MyDataGrid));
    }
    resp.End();
    }
    private string FormatExportRow(int colCount,DataGridItem Item,DataGrid MyDataGrid)
    {
    string strItem="";
    int i; for(i=0;i<=colCount;i++)
    {
    if(MyDataGrid.Columns[i].Visible==true)
    {
    if(Item.Cells[i].Text == null)
    {
    Item.Cells[i].Text="";
    }
    if(i==colCount)
    {
    strItem += Item.Cells[i].Text.ToString() + System.Environment.NewLine;
    }
    else
    {
    strItem += Item.Cells[i].Text.ToString() + ",";
    }
    }
    }
    return strItem;
    }
    }
    }
      

  6.   

    不明白什么意思,如果excel文件已经生成,那么把页面上的一个hyperlink的url指向这个excel文件不就可以了,用户点击hyperlink不就是下载吗?