在Asp.Net中打开下载的Excel工作表(.xls)时发生异常
我使用以下代码下载Excel工作表。 上面的代码是我逻辑的起始代码。下载后,我打开Excel工作表。它会显示这样一个警告 由于此警告,当我尝试使用Asp.Net将同一页面上载到Mysql数据库时,会显示类似“页面格式不正确”的异常 这是我下载Excel工作表的全部逻辑在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");
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打开该文件。无论您选择什么选项,都不理想。我会对此置之不理,并向用户解释,当警告弹出时,他应该单击“是”。