在Asp.Net中打开下载的Excel工作表(.xls)时发生异常

在Asp.Net中打开下载的Excel工作表(.xls)时发生异常,asp.net,Asp.net,我使用以下代码下载Excel工作表。 上面的代码是我逻辑的起始代码。下载后,我打开Excel工作表。它会显示这样一个警告 由于此警告,当我尝试使用Asp.Net将同一页面上载到Mysql数据库时,会显示类似“页面格式不正确”的异常 这是我下载Excel工作表的全部逻辑 protected void download_Click(object sender, EventArgs e) { ExportToExcel(SqlDataSource1, "StudentMarks");

我使用以下代码下载Excel工作表。

上面的代码是我逻辑的起始代码。下载后,我打开Excel工作表。它会显示这样一个警告

由于此警告,当我尝试使用Asp.Net将同一页面上载到Mysql数据库时,会显示类似“页面格式不正确”的异常

这是我下载Excel工作表的全部逻辑

protected void download_Click(object sender, EventArgs e)
 {

    ExportToExcel(SqlDataSource1, "StudentMarks");
  }
public void ExportToExcel(SqlDataSource dataSrc, string fileName)
{
    //Add Response header 
    Response.Clear();
    Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.xls", fileName));
    Response.Charset = "";
    Response.ContentType = "application/ms-excel";
    //GET Data From Database                
    MySqlConnection cn = new MySqlConnection(dataSrc.ConnectionString);
    // string query =  dataSrc.SelectCommand.Replace("\r\n", " ").Replace("\t", " ");
    MySqlCommand cmd9 = new MySqlCommand("select subject from class_subject where standard='" + DropDownList1.SelectedItem.Value + "';", cn);
    // cn.Open();

    //DataSet ds9=new DataSet();
    MySqlDataAdapter da9 = new MySqlDataAdapter(cmd9);
    // da9.Fill(ds9);
    DataTable dt = new DataTable();
    da9.Fill(dt);

    StringBuilder sb9 = new StringBuilder();




    for (int count = 0; count < dt.Rows.Count; count++)
    {
        // string headerRowText = GridView4.HeaderRow.Cells[i].Text;
        sb9.Append("'");
        sb9.Append(dt.Rows[count][0].ToString());
        sb9.Append("'");
        if (count < dt.Rows.Count - 1)
        //if (count < count3 - 1)
        {
            sb9.Append(",");
        }
    }
    Label2.Text = sb9.ToString();
    //MySqlCommand fyearcmd = new MySqlCommand("select fyear from student_data where standard='" + DropDownList1.SelectedItem.Value + "' and completed_status='running';", cn);
    //MySqlDataReader fyeardr = fyearcmd.ExecuteReader();

    string query = "select Admission_Num,Name,'Standard','Fyear','Type_of_exam'," + sb9.ToString() + " from student_data where standard='" + DropDownList1.SelectedItem.Value + "' and fyear='" + DropDownList4.SelectedItem.Value + "';";

    MySqlCommand cmd = new MySqlCommand(query, cn);

    cmd.CommandTimeout = 999999;
    cmd.CommandType = CommandType.Text;
    try
    {
        cn.Open();
        MySqlDataReader dr = cmd.ExecuteReader();
        StringBuilder sb = new StringBuilder();
        //Session["fieldcount"] = dr.FieldCount.ToString();
        //Label1.Text = dr.FieldCount.ToString();
        //Add Header  
        int count3 = 4;
        for (int count = 0; count < dr.FieldCount; count++)
        //for (int count = 0; count < count3; count++)
        {
            if (dr.GetName(count) != null)
                sb.Append(dr.GetName(count));
            if (count < dr.FieldCount - 1)
            //if (count < count3 - 1)
            {
                sb.Append("\t");
            }
        }
        Response.Write(sb.ToString() + "\n");
        Response.Flush();
        //Append Data
        while (dr.Read())
        {
            sb = new StringBuilder();

            //for (int col = 0; col < dr.FieldCount - 1; col++)
            for (int col = 0; col <= count3; col++)
            {
                if (col < (count3 - 2))
                {

                    if (!dr.IsDBNull(col))
                        sb.Append(dr.GetValue(col).ToString().Replace(",", " "));
                    sb.Append("\t");
                }
                if (col == (count3 - 2))
                {

                    if (!dr.IsDBNull(col))
                        sb.Append(DropDownList1.SelectedItem.Text);
                    sb.Append("\t");
                }
                if (col == (count3 - 1))
                {
                    if (!dr.IsDBNull(col))
                    {
                        //sb.Append(dr.GetValue(col).ToString().Replace(",", " "));
                        sb.Append(DropDownList4.SelectedItem.Text);
                    }
                    sb.Append("\t");
                }
                if (col == count3)
                {
                    if (!dr.IsDBNull(col))
                    {
                        //sb.Append(dr.GetValue(col).ToString().Replace(",", " "));
                        sb.Append(DropDownList3.SelectedItem.Text);
                    }
                    sb.Append("\t");
                }
            }
            //if (!dr.IsDBNull(dr.FieldCount - 1))
            //    sb.Append(dr.GetValue(dr.FieldCount - 1).ToString().Replace(",", " "));
            Response.Write(sb.ToString() + "\n");
            Response.Flush();

        }
        dr.Dispose();
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    finally
    {
        cmd.Connection.Close();
        cn.Close();
    }
    Response.End();
}
protectedvoid下载\u单击(对象发送方,事件参数e)
{
ExportToExcel(SqlDataSource1,“学生分数”);
}
public void ExportToExcel(SqlDataSource dataSrc,字符串文件名)
{
//添加响应头
Response.Clear();
AddHeader(“内容处置”,string.Format(“附件;文件名={0}.xls”,文件名));
响应。Charset=“”;
Response.ContentType=“应用程序/ms excel”;
//从数据库获取数据
MySqlConnection cn=新的MySqlConnection(dataSrc.ConnectionString);
//字符串查询=dataSrc.SelectCommand.Replace(“\r\n”,”).Replace(“\t”,”);
MySqlCommand cmd9=新的MySqlCommand(“从class_subject中选择subject,其中standard='”+DropDownList1.SelectedItem.Value+“';”,cn);
//cn.Open();
//数据集ds9=新数据集();
MySqlDataAdapter da9=新的MySqlDataAdapter(cmd9);
//da9.填充(ds9);
DataTable dt=新的DataTable();
da9.填充(dt);
StringBuilder sb9=新的StringBuilder();
对于(int count=0;count对于(int col=0;col您正在生成一个csv文件,而不是excel文件。请尝试更改标题:

Response.ContentType = "text/csv";
Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

通常,excel默认用于打开csv文件。

如何创建xls?请再次检查问题。我现在更改了。这不是错误,只是警告,每次创建扩展名为xls的文件时都会出现这种情况,实际上包含excel支持的XML格式(我忘了这种格式的确切名称)或任何其他格式。如果有问题,您可以从注册表中禁用此警告,或者您可以将文件扩展名设置为.XML并让excel打开该文件。无论您选择什么选项,都不理想。我会对此置之不理,并向用户解释,当警告弹出时,他应该单击“是”。