Mysql 使用asp.net将sql选定数据转换为excel表的最佳方法
我有一个sql语句,用于选择要以.xls格式导出到excel的数据表, 我将此表添加到网格视图中,然后呈现该网格视图以创建html编写器,并使用asp.net将其写入excel文件 但我一直有这样的警告,文件格式和扩展名不匹配。 问题是您正在创建的文件不是真正的Excel文件。它是带有.xls扩展名的HTMLMysql 使用asp.net将sql选定数据转换为excel表的最佳方法,mysql,asp.net,excel,gridview,export,Mysql,Asp.net,Excel,Gridview,Export,我有一个sql语句,用于选择要以.xls格式导出到excel的数据表, 我将此表添加到网格视图中,然后呈现该网格视图以创建html编写器,并使用asp.net将其写入excel文件 但我一直有这样的警告,文件格式和扩展名不匹配。 问题是您正在创建的文件不是真正的Excel文件。它是带有.xls扩展名的HTML 请,我需要知道在没有警告的情况下将这些选定数据导出到xls文件的最佳方式。我也尝试过直接从dataTable导出,但在打开excel时仍会收到警告 // these namespac
请,我需要知道在没有警告的情况下将这些选定数据导出到xls文件的最佳方式。我也尝试过直接从dataTable导出,但在打开excel时仍会收到警告
// these namespaces need to be added to your code behind file
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
namespace MySpot.UserPages
{
public partial class Journal : System.Web.UI.Page
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySpotDBConnStr"].ConnectionString);
DataTable dt = new DataTable();
// regular page_load from .aspx file
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
// added a button with ID=btnDownload and double clicked it's onclick event to auto create method
protected void btnDownload_Click(object sender, EventArgs e)
{
string queryStr = "SELECT * from table";
SqlDataAdapter sda = new SqlDataAdapter(queryStr, conn);
sda.Fill(dt);
ExportTableData(dt);
}
// this does all the work to export to excel
public void ExportTableData(DataTable dtdata)
{
string attach = "attachment;filename=journal.xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attach);
Response.ContentType = "application/ms-excel";
if (dtdata != null)
{
foreach (DataColumn dc in dtdata.Columns)
{
Response.Write(dc.ColumnName + "\t");
//sep = ";";
}
Response.Write(System.Environment.NewLine);
foreach (DataRow dr in dtdata.Rows)
{
for (int i = 0; i < dtdata.Columns.Count; i++)
{
Response.Write(dr[i].ToString() + "\t");
}
Response.Write("\n");
}
Response.End();
}
}
}
}
//这些名称空间需要添加到代码隐藏文件中
使用系统配置;
使用System.Data.SqlClient;
使用系统数据;
命名空间MySpot.UserPages
{
公共部分类日志:System.Web.UI.Page
{
SqlConnection conn=新的SqlConnection(ConfigurationManager.ConnectionString[“MySpotDBConnStr”].ConnectionString);
DataTable dt=新的DataTable();
//从.aspx文件加载常规页面
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
}
}
//添加了一个ID=btnDownload的按钮,并双击它的onclick事件来自动创建方法
受保护的void btnDownload\u单击(对象发送方,事件参数e)
{
字符串queryStr=“从表中选择*”;
SqlDataAdapter sda=新的SqlDataAdapter(queryStr,conn);
sda.填充(dt);
输出表数据(dt);
}
//这完成了导出到excel的所有工作
public void ExportTableData(数据表dtdata)
{
string attach=“附件;文件名=journal.xls”;
Response.ClearContent();
AddHeader(“内容处置”,附件);
Response.ContentType=“应用程序/ms excel”;
如果(dtdata!=null)
{
foreach(dtdata.Columns中的数据列dc)
{
Response.Write(dc.ColumnName+“\t”);
//sep=“;”;
}
Response.Write(系统、环境、换行符);
foreach(dtdata.Rows中的数据行dr)
{
对于(int i=0;i
当前设计不允许您在Excel中从网站打开HTML内容,除非URL的扩展名为.HTM/.HTML/.MHT/.MHTML/.MHTML。因此,返回HTML并将MIME类型设置为类似XLS的内容以尝试强制HTML在Excel中而不是在web浏览器中打开(如预期)的ASP页面将始终收到安全警报,因为内容与MIME类型不匹配。如果使用HTML MIME类型,则web浏览器将打开内容而不是Excel。因此,对于这种情况没有很好的解决方法,因为HTML/MHTML缺少一种特定于Excel的特殊MIME类型。如果您同时控制需要访问的web服务器和客户端桌面,则可以添加自己的MIME类型,但除此之外,最好的选择是使用不同的文件格式,或向用户发出警告,并告诉他们选择“是”对话框。此警报是Excel 2007中一项新的安全功能,称为扩展强化,确保打开的文件内容与尝试打开该文件的shell命令中指定的扩展名类型匹配。。。此问题仍在调查中,但考虑到代码的复杂性,以及Excel不想降低安全措施以解决IE开放行为而不完全了解对其他浏览器用户的后果,在Office 14之前不可能修复此问题。