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.种的?

解决方案 »

  1.   

    OleDbConnection 数据驱动程序,支持Acess ,好像不支持EXcel吧!
      

  2.   

    其实在你将DataGrid中的数据导入Excel给客户端时,
    采用的是RenderControl(oHtmlTextWriter);
    这种方法很容易实现将DataGrid数据写入Excel,但是这种方法也会将
    HTML标记也写入Excel,你仔细看的话,Excel的数据是有格式的。所以你把这个生成的Excel文件当作数据源时就会出现问题,抛出异常。
    而你在生成Excel时不采用RenderControl(oHtmlTextWriter),似乎也挺困难的。
      

  3.   

    excel格式问题
    你写出的excel事实上已经不是标准的excel格式了