1.我从DataGrid导出到Excel (.xls),(代码如下),是正确的,并且生成的Excel文件可以用记事本打开,为HTML格式:*****************
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename="+strFileName);
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.dgPrp.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());******************2.但是当我把用上面代码生成的Excel文件作为Data Source数据源,再导入到DataGrid使其在页面上显示时(代码如下),
则提示错误“System.Data.OleDb.OleDbException: 外部表不是预期的格式。”,可能是生成的Excel作为数据源时格式错误:******************StrFullName="D:\Excel\e01.xls";
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"+StrFullName+"';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable SchemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables ,new object[]{null});
string TableName = SchemaTable.Rows[0][2].ToString().Trim();
TableName = "[" + TableName.Replace( " ' ", " ") + "]";
OleDbDataAdapter myCommand = new OleDbDataAdapter( "SELECT * FROM " + TableName, strConn);
DataSet myDataSet = new DataSet(); ******************3.为了测试Excel文件作为数据源的正确性,我又单独新建了一Excel文件,按其规格写入excel数据保存,再作为Data Source数据源连接导入到DataGrid时,这种方式则又是可以的,能正常连接显示。不过这种Excel文件不能用记事本打开(全为乱码)。我就不明白了,这两种.xls的Excel有什么不一样,为什么一个可以做为数据源导入,一个又不可以??
怎样让DataGrid导出到Excel的格式是3.种的?
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename="+strFileName);
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.dgPrp.RenderControl(oHtmlTextWriter);
Response.Output.Write(oStringWriter.ToString());******************2.但是当我把用上面代码生成的Excel文件作为Data Source数据源,再导入到DataGrid使其在页面上显示时(代码如下),
则提示错误“System.Data.OleDb.OleDbException: 外部表不是预期的格式。”,可能是生成的Excel作为数据源时格式错误:******************StrFullName="D:\Excel\e01.xls";
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"+StrFullName+"';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable SchemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables ,new object[]{null});
string TableName = SchemaTable.Rows[0][2].ToString().Trim();
TableName = "[" + TableName.Replace( " ' ", " ") + "]";
OleDbDataAdapter myCommand = new OleDbDataAdapter( "SELECT * FROM " + TableName, strConn);
DataSet myDataSet = new DataSet(); ******************3.为了测试Excel文件作为数据源的正确性,我又单独新建了一Excel文件,按其规格写入excel数据保存,再作为Data Source数据源连接导入到DataGrid时,这种方式则又是可以的,能正常连接显示。不过这种Excel文件不能用记事本打开(全为乱码)。我就不明白了,这两种.xls的Excel有什么不一样,为什么一个可以做为数据源导入,一个又不可以??
怎样让DataGrid导出到Excel的格式是3.种的?
采用的是RenderControl(oHtmlTextWriter);
这种方法很容易实现将DataGrid数据写入Excel,但是这种方法也会将
HTML标记也写入Excel,你仔细看的话,Excel的数据是有格式的。所以你把这个生成的Excel文件当作数据源时就会出现问题,抛出异常。
而你在生成Excel时不采用RenderControl(oHtmlTextWriter),似乎也挺困难的。
你写出的excel事实上已经不是标准的excel格式了